From 7deb24270bd31f16043669a00c5d380603ccad6a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Apr 2024 10:40:55 +0200 Subject: [PATCH 001/887] bump version to 4.0.0dev --- CHANGELOG.md | 10 ++++++++++ assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 871c46594..18fabee33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,16 @@ 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). +## v4.0.0dev - [date] + +### Added + +### Changed + +### Fixed + +### Removed + ## v3.0.2 - [2024-04-10] ### Added diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index fe0459889..963555cf6 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/rnafusion + This report has been generated by the nf-core/rnafusion analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: nf-core-rnafusion-methods-description: diff --git a/nextflow.config b/nextflow.config index 17375158e..22799afed 100644 --- a/nextflow.config +++ b/nextflow.config @@ -302,7 +302,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '3.0.2' + version = '4.0.0dev' doi = '' } From 8f794b39585dec444eb2a0e1617ad7938e355026 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:42:45 +0200 Subject: [PATCH 002/887] get arriba from nf-core --- conf/modules.config | 2 +- modules.json | 46 +- modules/nf-core/arriba/arriba/environment.yml | 7 + modules/nf-core/arriba/arriba/main.nf | 66 +++ modules/nf-core/arriba/arriba/meta.yml | 112 ++++ .../nf-core/arriba/download/environment.yml | 7 + .../arriba/download/main.nf | 17 +- .../arriba/download/meta.yml | 3 +- modules/nf-core/cat/cat/main.nf | 23 +- modules/nf-core/cat/cat/tests/main.nf.test | 45 +- modules/nf-core/cat/fastq/environment.yml | 2 +- modules/nf-core/cat/fastq/main.nf | 1 - modules/nf-core/cat/fastq/tests/main.nf.test | 63 ++- .../nf-core/cat/fastq/tests/main.nf.test.snap | 185 +++++-- modules/nf-core/fastp/main.nf | 26 +- modules/nf-core/fastp/tests/main.nf.test | 332 ++++++++++-- modules/nf-core/fastp/tests/main.nf.test.snap | 290 ++++++++++- .../fastp/tests/nextflow.interleaved.config | 5 + ...low.config => nextflow.save_failed.config} | 3 +- modules/nf-core/fastqc/main.nf | 6 + .../gatk4/bedtointervallist/environment.yml | 2 +- .../nf-core/gatk4/bedtointervallist/main.nf | 4 +- .../bedtointervallist/tests/main.nf.test | 38 ++ .../bedtointervallist/tests/main.nf.test.snap | 35 ++ .../gatk4/bedtointervallist/tests/tags.yml | 2 + .../createsequencedictionary/environment.yml | 2 +- .../gatk4/createsequencedictionary/main.nf | 4 +- .../gatk4/markduplicates/environment.yml | 5 +- modules/nf-core/gatk4/markduplicates/main.nf | 4 +- .../gatk4/markduplicates/tests/bam.config | 8 + .../gatk4/markduplicates/tests/cram.config | 8 + .../gatk4/markduplicates/tests/main.nf.test | 126 +++++ .../markduplicates/tests/main.nf.test.snap | 160 ++++++ .../gatk4/markduplicates/tests/tags.yml | 2 + .../collectinsertsizemetrics/environment.yml | 2 +- .../picard/collectinsertsizemetrics/main.nf | 4 +- .../picard/collectinsertsizemetrics/meta.yml | 2 +- .../picard/collectwgsmetrics/environment.yml | 2 +- .../nf-core/picard/collectwgsmetrics/main.nf | 4 +- .../nf-core/samtools/faidx/environment.yml | 5 +- modules/nf-core/samtools/faidx/main.nf | 4 +- modules/nf-core/samtools/faidx/meta.yml | 4 + .../nf-core/samtools/faidx/tests/main.nf.test | 122 +++++ .../samtools/faidx/tests/main.nf.test.snap | 249 +++++++++ .../samtools/faidx/tests/nextflow.config | 7 + .../samtools/faidx/tests/nextflow2.config | 6 + modules/nf-core/samtools/faidx/tests/tags.yml | 2 + .../nf-core/samtools/index/environment.yml | 3 +- modules/nf-core/samtools/index/main.nf | 4 +- .../nf-core/samtools/index/tests/main.nf.test | 36 +- .../samtools/index/tests/main.nf.test.snap | 54 +- modules/nf-core/samtools/sort/environment.yml | 3 +- modules/nf-core/samtools/sort/main.nf | 32 +- modules/nf-core/samtools/sort/meta.yml | 32 +- .../nf-core/samtools/sort/tests/main.nf.test | 68 ++- .../samtools/sort/tests/main.nf.test.snap | 127 ++++- .../samtools/sort/tests/nextflow.config | 3 +- modules/nf-core/samtools/view/environment.yml | 3 +- modules/nf-core/samtools/view/main.nf | 17 +- .../nf-core/samtools/view/tests/bam.config | 3 + .../samtools/view/tests/bam_index.config | 3 + .../nf-core/samtools/view/tests/main.nf.test | 212 ++++++++ .../samtools/view/tests/main.nf.test.snap | 488 ++++++++++++++++++ modules/nf-core/samtools/view/tests/tags.yml | 2 + modules/nf-core/star/align/environment.yml | 3 +- modules/nf-core/star/align/main.nf | 4 +- modules/nf-core/star/align/tests/main.nf.test | 141 ++--- .../star/align/tests/main.nf.test.snap | 68 +-- .../star/genomegenerate/environment.yml | 3 +- modules/nf-core/star/genomegenerate/main.nf | 87 ++-- .../star/genomegenerate/tests/main.nf.test | 89 +++- .../genomegenerate/tests/main.nf.test.snap | 86 ++- .../stringtie/merge/tests/main.nf.test | 48 +- .../stringtie/merge/tests/main.nf.test.snap | 20 +- .../stringtie/stringtie/tests/main.nf.test | 64 ++- .../stringtie/stringtie/tests/nextflow.config | 5 + subworkflows/local/arriba_workflow.nf | 12 +- workflows/build_references.nf | 2 +- 78 files changed, 3244 insertions(+), 532 deletions(-) create mode 100644 modules/nf-core/arriba/arriba/environment.yml create mode 100644 modules/nf-core/arriba/arriba/main.nf create mode 100644 modules/nf-core/arriba/arriba/meta.yml create mode 100644 modules/nf-core/arriba/download/environment.yml rename modules/{local => nf-core}/arriba/download/main.nf (65%) rename modules/{local => nf-core}/arriba/download/meta.yml (95%) create mode 100644 modules/nf-core/fastp/tests/nextflow.interleaved.config rename modules/nf-core/fastp/tests/{nextflow.config => nextflow.save_failed.config} (50%) create mode 100644 modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/bedtointervallist/tests/tags.yml create mode 100644 modules/nf-core/gatk4/markduplicates/tests/bam.config create mode 100644 modules/nf-core/gatk4/markduplicates/tests/cram.config create mode 100644 modules/nf-core/gatk4/markduplicates/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/markduplicates/tests/tags.yml create mode 100644 modules/nf-core/samtools/faidx/tests/main.nf.test create mode 100644 modules/nf-core/samtools/faidx/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/faidx/tests/nextflow.config create mode 100644 modules/nf-core/samtools/faidx/tests/nextflow2.config create mode 100644 modules/nf-core/samtools/faidx/tests/tags.yml create mode 100644 modules/nf-core/samtools/view/tests/bam.config create mode 100644 modules/nf-core/samtools/view/tests/bam_index.config create mode 100644 modules/nf-core/samtools/view/tests/main.nf.test create mode 100644 modules/nf-core/samtools/view/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/view/tests/tags.yml create mode 100644 modules/nf-core/stringtie/stringtie/tests/nextflow.config diff --git a/conf/modules.config b/conf/modules.config index 9d4ca62b1..dfb660787 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,7 +18,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - withName: 'ARRIBA' { + withName: 'ARRIBA_ARRIBA' { publishDir = [ path: { "${params.outdir}/arriba" }, mode: params.publish_dir_mode, diff --git a/modules.json b/modules.json index 23a6ce29f..f14cf897a 100644 --- a/modules.json +++ b/modules.json @@ -12,42 +12,52 @@ }, "arriba": { "branch": "master", - "git_sha": "ea9e2892a9d12e8769402f12096219942bcf6536", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, - "cat/cat": { + "arriba/arriba": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, - "cat/fastq": { + "arriba/download": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, + "cat/cat": { + "branch": "master", + "git_sha": "9437e6053dccf4aafa022bfd6e7e9de67e625af8", + "installed_by": ["modules"] + }, + "cat/fastq": { + "branch": "master", + "git_sha": "0997b47c93c06b49aa7b3fefda87e728312cf2ca", + "installed_by": ["modules"] + }, "fastp": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "95cf5fe0194c7bf5cb0e3027a2eb7e7c89385080", "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c", + "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d3f215802f696f7993f25c759781d2db91232015", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "194fca815cf594646e638fa5476acbcc296f1850", "installed_by": ["modules"] }, "multiqc": { @@ -57,52 +67,52 @@ }, "picard/collectinsertsizemetrics": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "f153f1f10e1083c49935565844cccb7453021682", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "5394565c5fe4c760e5b35977ec7607c62e81d1f8", + "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "4352dbdb09ec40db71e9b172b97a01dcf5622c26", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "0bd7d2333a88483aa0476acea172e9f5f6dd83bb", "installed_by": ["modules"] }, "star/align": { "branch": "master", - "git_sha": "9f6b233518f7d9ecdcf24b798b7e491db5424273", + "git_sha": "a21faa6a3481af92a343a10926f59c189a2c16c9", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "0e98289b5bec6e3f8f588a8a9d05e8aacc1179a0", + "git_sha": "a21faa6a3481af92a343a10926f59c189a2c16c9", "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", - "git_sha": "b0dcb44b018d9b2bcb35b1abb7bcd34061bc5a6d", + "git_sha": "5756b12b1fab0c07f05b9ad2d5d5c262b1a2c1ef", "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "b0dcb44b018d9b2bcb35b1abb7bcd34061bc5a6d", + "git_sha": "b1b959609bda44341120aed1766329909f54b8d0", "installed_by": ["modules"] } } diff --git a/modules/nf-core/arriba/arriba/environment.yml b/modules/nf-core/arriba/arriba/environment.yml new file mode 100644 index 000000000..8494c8c03 --- /dev/null +++ b/modules/nf-core/arriba/arriba/environment.yml @@ -0,0 +1,7 @@ +name: arriba_arriba +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::arriba=2.4.0 diff --git a/modules/nf-core/arriba/arriba/main.nf b/modules/nf-core/arriba/arriba/main.nf new file mode 100644 index 000000000..a29a8d140 --- /dev/null +++ b/modules/nf-core/arriba/arriba/main.nf @@ -0,0 +1,66 @@ +process ARRIBA_ARRIBA { + 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/arriba:2.4.0--h0033a41_2' : + 'biocontainers/arriba:2.4.0--h0033a41_2' }" + + input: + tuple val(meta), path(bam) + tuple val(meta2), path(fasta) + tuple val(meta3), path(gtf) + tuple val(meta4), path(blacklist) + tuple val(meta5), path(known_fusions) + tuple val(meta6), path(structural_variants) + tuple val(meta7), path(tags) + tuple val(meta8), path(protein_domains) + + output: + tuple val(meta), path("*.fusions.tsv") , emit: fusions + tuple val(meta), path("*.fusions.discarded.tsv"), emit: fusions_fail + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def blacklist = blacklist ? "-b $blacklist" : "-f blacklist" + def known_fusions = known_fusions ? "-k $known_fusions" : "" + def structural_variants = structural_variants ? "-d $structual_variants" : "" + def tags = tags ? "-t $tags" : "" + def protein_domains = protein_domains ? "-p $protein_domains" : "" + + """ + arriba \\ + -x $bam \\ + -a $fasta \\ + -g $gtf \\ + -o ${prefix}.fusions.tsv \\ + -O ${prefix}.fusions.discarded.tsv \\ + $blacklist \\ + $known_fusions \\ + $structural_variants \\ + $tags \\ + $protein_domains \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + arriba: \$(arriba -h | grep 'Version:' 2>&1 | sed 's/Version:\s//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo stub > ${prefix}.fusions.tsv + echo stub > ${prefix}.fusions.discarded.tsv + + echo "${task.process}:" > versions.yml + echo ' arriba: 2.2.1' >> versions.yml + """ +} diff --git a/modules/nf-core/arriba/arriba/meta.yml b/modules/nf-core/arriba/arriba/meta.yml new file mode 100644 index 000000000..11f744b54 --- /dev/null +++ b/modules/nf-core/arriba/arriba/meta.yml @@ -0,0 +1,112 @@ +name: arriba_arriba +description: Arriba is a command-line tool for the detection of gene fusions from RNA-Seq data. +keywords: + - fusion + - arriba + - detection + - RNA-Seq +tools: + - arriba: + description: Fast and accurate gene fusion detection from RNA-Seq data + homepage: https://github.com/suhrig/arriba + documentation: https://arriba.readthedocs.io/en/latest/ + tool_dev_url: https://github.com/suhrig/arriba + doi: "10.1101/gr.257246.119" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Assembly FASTA file + pattern: "*.{fasta}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: Annotation GTF file + pattern: "*.{gtf}" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - blacklist: + type: file + description: Blacklist file + pattern: "*.{tsv}" + - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - known_fusions: + type: file + description: Known fusions file + pattern: "*.{tsv}" + - meta6: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - structural_variants: + type: file + description: Structural variants file + pattern: "*.{tsv}" + - meta7: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - tags: + type: file + description: Tags file + pattern: "*.{tsv}" + - meta8: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - protein_domains: + type: file + description: Protein domains file + pattern: "*.{gff3}" +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" + - fusions: + type: file + description: File contains fusions which pass all of Arriba's filters. + pattern: "*.{fusions.tsv}" + - fusions_fail: + type: file + description: File contains fusions that Arriba classified as an artifact or that are also observed in healthy tissue. + pattern: "*.{fusions.discarded.tsv}" +authors: + - "@praveenraj2018" + - "@rannick" +maintainers: + - "@praveenraj2018" + - "@rannick" diff --git a/modules/nf-core/arriba/download/environment.yml b/modules/nf-core/arriba/download/environment.yml new file mode 100644 index 000000000..dc7d3bf99 --- /dev/null +++ b/modules/nf-core/arriba/download/environment.yml @@ -0,0 +1,7 @@ +name: arriba_download +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::arriba=2.4.0 diff --git a/modules/local/arriba/download/main.nf b/modules/nf-core/arriba/download/main.nf similarity index 65% rename from modules/local/arriba/download/main.nf rename to modules/nf-core/arriba/download/main.nf index 860439ade..7f11898bd 100644 --- a/modules/local/arriba/download/main.nf +++ b/modules/nf-core/arriba/download/main.nf @@ -1,15 +1,18 @@ process ARRIBA_DOWNLOAD { tag "arriba" - label 'process_low' + label 'process_single' - conda "bioconda::gnu-wget=1.18" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : - 'quay.io/biocontainers/gnu-wget:1.18--h5bf99c6_5' }" + 'https://depot.galaxyproject.org/singularity/arriba:2.4.0--h0033a41_2' : + 'biocontainers/arriba:2.4.0--h0033a41_2' }" output: - path "versions.yml" , emit: versions path "*" , emit: reference + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when script: """ @@ -21,7 +24,7 @@ process ARRIBA_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + arriba_download: \$(arriba -h | grep 'Version:' 2>&1 | sed 's/Version:\s//') END_VERSIONS """ @@ -35,7 +38,7 @@ process ARRIBA_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + arriba_download: \$(arriba -h | grep 'Version:' 2>&1 | sed 's/Version:\s//') END_VERSIONS """ } diff --git a/modules/local/arriba/download/meta.yml b/modules/nf-core/arriba/download/meta.yml similarity index 95% rename from modules/local/arriba/download/meta.yml rename to modules/nf-core/arriba/download/meta.yml index 55e50b115..d32106163 100644 --- a/modules/local/arriba/download/meta.yml +++ b/modules/nf-core/arriba/download/meta.yml @@ -3,6 +3,7 @@ description: Arriba is a command-line tool for the detection of gene fusions fro keywords: - fusion - arriba + - reference tools: - arriba: description: Fast and accurate gene fusion detection from RNA-Seq data @@ -23,4 +24,4 @@ output: pattern: "*" authors: - - "@praveenraj2018, @rannick" + - "@peterpru" diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index 4264a92cc..adbdbd7ba 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -22,6 +22,8 @@ process CAT_CAT { def args2 = task.ext.args2 ?: '' def file_list = files_in.collect { it.toString() } + // choose appropriate concatenation tool depending on input and output format + // | input | output | command1 | command2 | // |-----------|------------|----------|----------| // | gzipped | gzipped | cat | | @@ -30,11 +32,15 @@ process CAT_CAT { // | ungzipped | gzipped | cat | pigz | // Use input file ending as default - prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}" out_zip = prefix.endsWith('.gz') in_zip = file_list[0].endsWith('.gz') command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } """ $command1 \\ $args \\ @@ -49,8 +55,12 @@ process CAT_CAT { """ stub: - def file_list = files_in.collect { it.toString() } - prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + def file_list = files_in.collect { it.toString() } + prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } """ touch $prefix @@ -60,3 +70,10 @@ process CAT_CAT { END_VERSIONS """ } + +// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz +def getFileSuffix(filename) { + def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ + return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) +} + diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index 5766daafb..fcee2d19f 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -8,6 +8,32 @@ nextflow_process { tag "cat" tag "cat/cat" + test("test_cat_name_conflict") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'genome', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") } + ) + } + } + test("test_cat_unzipped_unzipped") { when { params { @@ -19,8 +45,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -46,8 +72,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) ] ] """ @@ -76,8 +102,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) ] ] """ @@ -105,8 +131,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -134,7 +160,7 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] ] """ @@ -150,4 +176,3 @@ nextflow_process { } } } - diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml index bff93add0..8c69b121f 100644 --- a/modules/nf-core/cat/fastq/environment.yml +++ b/modules/nf-core/cat/fastq/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - conda-forge::sed=4.7 + - conda-forge::coreutils=8.30 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index 3d963784c..f132b2adc 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -76,5 +76,4 @@ process CAT_FASTQ { """ } } - } diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index f5f941825..dab2e14c0 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -16,11 +16,11 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true) ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) """ } } @@ -28,8 +28,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.reads).match() }, - { assert path(process.out.versions.get(0)).getText().contains("cat") } + { assert snapshot(process.out).match() } ) } } @@ -42,13 +41,13 @@ nextflow_process { } process { """ - input[0] = [ + input[0] = Channel.of([ [ 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), - file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_2_fastq_gz'], checkIfExists: true) ] - ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) """ } } @@ -56,8 +55,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.reads).match() }, - { assert path(process.out.versions.get(0)).getText().contains("cat") } + { assert snapshot(process.out).match() } ) } } @@ -70,11 +68,11 @@ nextflow_process { } process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] - ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) """ } } @@ -82,8 +80,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.reads).match() }, - { assert path(process.out.versions.get(0)).getText().contains("cat") } + { assert snapshot(process.out).match() } ) } } @@ -96,13 +93,13 @@ nextflow_process { } process { """ - input[0] = [ + input[0] = Channel.of([ [ 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), - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] - ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + 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)] + ]) """ } } @@ -110,8 +107,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.reads).match() }, - { assert path(process.out.versions.get(0)).getText().contains("cat") } + { assert snapshot(process.out).match() } ) } } @@ -124,10 +120,10 @@ nextflow_process { } process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)] - ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) """ } } @@ -135,8 +131,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.reads).match() }, - { assert path(process.out.versions.get(0)).getText().contains("cat") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap index ec2342e54..43dfe28fc 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -1,78 +1,169 @@ { "test_cat_fastq_single_end": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,f9cf5e375f7de81a406144a2c70cc64d" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" ] - ] + } ], - "timestamp": "2023-10-17T23:19:12.990284837" + "timestamp": "2024-01-17T17:30:39.816981" }, "test_cat_fastq_single_end_same_name": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,63f817db7a29a03eb538104495556f66" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" ] - ] + } ], - "timestamp": "2023-10-17T23:19:31.554568147" + "timestamp": "2024-01-17T17:32:35.229332" }, "test_cat_fastq_single_end_single_file": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,e325ef7deb4023447a1f074e285761af" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" ] - ] + } ], - "timestamp": "2023-10-17T23:19:49.629360033" + "timestamp": "2024-01-17T17:34:00.058829" }, "test_cat_fastq_paired_end_same_name": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, + { + "0": [ [ - "test_1.merged.fastq.gz:md5,63f817db7a29a03eb538104495556f66", - "test_2.merged.fastq.gz:md5,fe9f266f43a6fc3dcab690a18419a56e" + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" ] - ] + } ], - "timestamp": "2023-10-17T23:19:40.711617539" + "timestamp": "2024-01-17T17:33:33.031555" }, "test_cat_fastq_paired_end": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ [ - "test_1.merged.fastq.gz:md5,f9cf5e375f7de81a406144a2c70cc64d", - "test_2.merged.fastq.gz:md5,77c8e966e130d8c6b6ec9be52fcb2bda" + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" ] - ] + } ], - "timestamp": "2023-10-18T07:53:20.923560211" + "timestamp": "2024-01-17T17:32:02.270935" } } \ No newline at end of file diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index c8e815aea..4fc19b744 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -29,7 +29,7 @@ process FASTP { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" - def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' + def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_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') ) { @@ -45,7 +45,7 @@ process FASTP { $adapter_list \\ $fail_fastq \\ $args \\ - 2> ${prefix}.fastp.log \\ + 2> >(tee ${prefix}.fastp.log >&2) \\ | gzip -c > ${prefix}.fastp.fastq.gz cat <<-END_VERSIONS > versions.yml @@ -66,7 +66,7 @@ process FASTP { $adapter_list \\ $fail_fastq \\ $args \\ - 2> ${prefix}.fastp.log + 2> >(tee ${prefix}.fastp.log >&2) cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -91,7 +91,7 @@ process FASTP { --thread $task.cpus \\ --detect_adapter_for_pe \\ $args \\ - 2> ${prefix}.fastp.log + 2> >(tee ${prefix}.fastp.log >&2) cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -99,4 +99,22 @@ process FASTP { 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/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index f610b735e..6f1f48978 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -19,11 +19,10 @@ nextflow_process { save_trimmed_fail = false save_merged = false - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:true ], - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] - ] - + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged @@ -57,7 +56,67 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { + 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") } ) } } @@ -74,12 +133,11 @@ nextflow_process { save_trimmed_fail = false save_merged = false - input[0] = [ + input[0] = Channel.of([ [ 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) ] - ] - + [ 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 @@ -127,13 +185,28 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { + 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("fastp test_fastp_interleaved") { - config './nextflow.config' + test("test_fastp_paired_end-stub") { + + options '-stub' + when { params { outdir = "$outputDir" @@ -144,10 +217,56 @@ nextflow_process { save_trimmed_fail = false save_merged = false - input[0] = [ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'], checkIfExists: 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-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 @@ -159,7 +278,7 @@ nextflow_process { 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: 198"] + "reads passed filter: 162"] def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads_fail.get(0).get(1).get(1)).linesGzip.contains(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 -> @@ -321,7 +500,7 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_paired_end_trim_fail") } ) } } @@ -337,11 +516,11 @@ nextflow_process { adapter_fasta = [] save_trimmed_fail = false save_merged = true - - 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) ] - ] + 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 @@ -399,7 +578,67 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { + 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") } ) } } @@ -412,14 +651,15 @@ nextflow_process { } process { """ - adapter_fasta = file("https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/fastp/adapters.fasta", checkIfExists: true) + 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] = [ [ 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) ] - ] + 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 @@ -478,7 +718,7 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { 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 index 0fa68c7d7..3e8762889 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -7,11 +7,47 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,168f516f7bd4b7b6c32da7cba87299a4" + "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" ] ] ], - "timestamp": "2023-10-17T11:04:45.794175881" + "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": [ @@ -25,15 +61,253 @@ ] ] ], - "timestamp": "2023-10-17T11:04:10.566343705" + "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": { + "versions_paired_end_merged": { "content": [ [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], - "timestamp": "2023-10-17T11:04:10.582076024" + "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": [ @@ -47,6 +321,10 @@ ] ] ], - "timestamp": "2023-10-17T11:05:00.379878948" + "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 new file mode 100644 index 000000000..4be8dbd2c --- /dev/null +++ b/modules/nf-core/fastp/tests/nextflow.interleaved.config @@ -0,0 +1,5 @@ +process { + withName: FASTP { + ext.args = "--interleaved_in -e 30" + } +} diff --git a/modules/nf-core/fastp/tests/nextflow.config b/modules/nf-core/fastp/tests/nextflow.save_failed.config similarity index 50% rename from modules/nf-core/fastp/tests/nextflow.config rename to modules/nf-core/fastp/tests/nextflow.save_failed.config index 0f7849ad9..53b61b0c1 100644 --- a/modules/nf-core/fastp/tests/nextflow.config +++ b/modules/nf-core/fastp/tests/nextflow.save_failed.config @@ -1,6 +1,5 @@ process { - withName: FASTP { - ext.args = "--interleaved_in" + ext.args = "-e 30" } } diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 9e19a74c5..d79f1c862 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -25,6 +25,11 @@ process FASTQC { def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') + + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // FastQC memory value allowed range (100 - 10000) + def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) + """ printf "%s %s\\n" $rename_to | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name @@ -33,6 +38,7 @@ process FASTQC { fastqc \\ $args \\ --threads $task.cpus \\ + --memory $fastqc_memory \\ $renamed_files cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/gatk4/bedtointervallist/environment.yml b/modules/nf-core/gatk4/bedtointervallist/environment.yml index e7cb4280e..d6fbe2e77 100644 --- a/modules/nf-core/gatk4/bedtointervallist/environment.yml +++ b/modules/nf-core/gatk4/bedtointervallist/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 88b24b1ac..68863d677 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -4,8 +4,8 @@ process GATK4_BEDTOINTERVALLIST { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bed) diff --git a/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test new file mode 100644 index 000000000..2289f73fa --- /dev/null +++ b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test @@ -0,0 +1,38 @@ +nextflow_process { + + name "Test Process GATK4_BEDTOINTERVALLIST" + script "../main.nf" + process "GATK4_BEDTOINTERVALLIST" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/bedtointervallist" + + test("test_gatk4_bedtointervallist") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [file(params.modules_testdata_base_path + + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + input[1] = [ [ id:'dict' ], // meta map + [file(params.modules_testdata_base_path + + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test.snap b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test.snap new file mode 100644 index 000000000..48c322fd0 --- /dev/null +++ b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "test_gatk4_bedtointervallist": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.interval_list:md5,e51101c9357fb2d59fd30e370eefa39c" + ] + ], + "1": [ + "versions.yml:md5,29a18c36f27584eb5a5f2f5457088b3b" + ], + "interval_list": [ + [ + { + "id": "test" + }, + "test.interval_list:md5,e51101c9357fb2d59fd30e370eefa39c" + ] + ], + "versions": [ + "versions.yml:md5,29a18c36f27584eb5a5f2f5457088b3b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-19T14:20:12.168775" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml b/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml new file mode 100644 index 000000000..b4d54f129 --- /dev/null +++ b/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/bedtointervallist: + - "modules/nf-core/gatk4/bedtointervallist/**" diff --git a/modules/nf-core/gatk4/createsequencedictionary/environment.yml b/modules/nf-core/gatk4/createsequencedictionary/environment.yml index db663e148..78822ad03 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/environment.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index b47ad1622..c7f1d75b3 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -4,8 +4,8 @@ process GATK4_CREATESEQUENCEDICTIONARY { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml index 9adad104d..7362eea6f 100644 --- a/modules/nf-core/gatk4/markduplicates/environment.yml +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -4,5 +4,6 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 - - bioconda::samtools=1.17 + - bioconda::gatk4=4.5.0.0 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/gatk4/markduplicates/main.nf b/modules/nf-core/gatk4/markduplicates/main.nf index 564b86d3d..baadefef4 100644 --- a/modules/nf-core/gatk4/markduplicates/main.nf +++ b/modules/nf-core/gatk4/markduplicates/main.nf @@ -4,8 +4,8 @@ process GATK4_MARKDUPLICATES { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:f857e2d6cc88d35580d01cf39e0959a68b83c1d9-0': - 'biocontainers/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:f857e2d6cc88d35580d01cf39e0959a68b83c1d9-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0': + 'biocontainers/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/gatk4/markduplicates/tests/bam.config b/modules/nf-core/gatk4/markduplicates/tests/bam.config new file mode 100644 index 000000000..0bbfbac35 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/bam.config @@ -0,0 +1,8 @@ +process { + + withName: GATK4_MARKDUPLICATES { + ext.args = '--CREATE_INDEX true' + ext.prefix = { "${meta.id}.bam" } + } + +} diff --git a/modules/nf-core/gatk4/markduplicates/tests/cram.config b/modules/nf-core/gatk4/markduplicates/tests/cram.config new file mode 100644 index 000000000..04a9b0745 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/cram.config @@ -0,0 +1,8 @@ +process { + + withName: GATK4_MARKDUPLICATES { + ext.args = '--CREATE_INDEX true' + ext.prefix = { "${meta.id}.cram" } + } + +} diff --git a/modules/nf-core/gatk4/markduplicates/tests/main.nf.test b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test new file mode 100644 index 000000000..bbcf74db6 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test @@ -0,0 +1,126 @@ +nextflow_process { + + name "Test Process GATK4_MARKDUPLICATES" + script "../main.nf" + process "GATK4_MARKDUPLICATES" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/markduplicates" + + test("sarscov2 - bam") { + config "./bam.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.bam).match("bam") }, + { assert snapshot(process.out.bai).match("bai") }, + { assert snapshot(process.out.versions).match("versions") }, + { assert snapshot(file(process.out.metrics[0][1]).name).match("test.metrics") } + ) + } + } + + test("homo_sapiens - multiple bam") { + config "./bam.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ] + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.bam).match("multi bam") }, + { assert snapshot(process.out.bai).match("multi bai") }, + { assert snapshot(process.out.versions).match("multi versions") }, + { assert snapshot(file(process.out.metrics[0][1]).name).match("multi test.metrics") } + ) + } + + } + + test("homo_sapiens - multiple cram") { + config "./cram.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.cram[0][1]).name).match("multi cram")}, + { assert snapshot(file(process.out.crai[0][1]).name).match("multi crai") }, + { assert snapshot(process.out.versions).match("multi cram versions") }, + { assert snapshot(file(process.out.metrics[0][1]).name).match("multi cram test.metrics") } + ) + } + + } + + test("stub") { + config "./bam.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [] + ] + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap new file mode 100644 index 000000000..336bb3735 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap @@ -0,0 +1,160 @@ +{ + "multi bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,8a808b1a94d2627c4d659a2151c4cb9f" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:36.059923" + }, + "multi crai": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:37.780426007" + }, + "multi bai": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bai:md5,38b99c5f771895ecf5324c3186b9d452" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:36.09642" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:08.710549" + }, + "multi test.metrics": { + "content": [ + "test.bam.metrics" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:11.732892667" + }, + "bai": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bai:md5,26001bcdbce12e9f07557d8f7b8d360e" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:42:39.651888758" + }, + "multi cram versions": { + "content": [ + [ + "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:56.966376" + }, + "multi versions": { + "content": [ + [ + "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:36.138095" + }, + "multi cram test.metrics": { + "content": [ + "test.cram.metrics" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:37.798977444" + }, + "multi cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:43:37.771137858" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,75d914ba8804eaf2acf02ab432197ec9" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T15:21:08.645892" + }, + "test.metrics": { + "content": [ + "test.bam.metrics" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-12T17:42:39.672508385" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/markduplicates/tests/tags.yml b/modules/nf-core/gatk4/markduplicates/tests/tags.yml new file mode 100644 index 000000000..8632e32b3 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/markduplicates: + - "modules/nf-core/gatk4/markduplicates/**" diff --git a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml index 5c85f8725..73ba7dc6b 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml +++ b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::picard=3.1.0 + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/collectinsertsizemetrics/main.nf b/modules/nf-core/picard/collectinsertsizemetrics/main.nf index 48e4d2ad2..06c4bc172 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/main.nf +++ b/modules/nf-core/picard/collectinsertsizemetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTINSERTSIZEMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.0--hdfd78af_0' : - 'biocontainers/picard:3.1.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/picard/collectinsertsizemetrics/meta.yml b/modules/nf-core/picard/collectinsertsizemetrics/meta.yml index efd5abe06..e2749cb62 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/meta.yml +++ b/modules/nf-core/picard/collectinsertsizemetrics/meta.yml @@ -12,7 +12,7 @@ tools: homepage: "https://broadinstitute.github.io/picard/" documentation: "https://broadinstitute.github.io/picard/" tool_dev_url: "https://github.com/broadinstitute/picard" - licence: "['MIT']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/picard/collectwgsmetrics/environment.yml b/modules/nf-core/picard/collectwgsmetrics/environment.yml index 8adda4914..6a0b9258e 100644 --- a/modules/nf-core/picard/collectwgsmetrics/environment.yml +++ b/modules/nf-core/picard/collectwgsmetrics/environment.yml @@ -4,5 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::picard=3.1.0 + - bioconda::picard=3.1.1 - r::r-base diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 67aa5b5e8..35f4129cf 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTWGSMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.0--hdfd78af_0' : - 'biocontainers/picard:3.1.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 73badedb1..9c24eb0ab 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -1,7 +1,10 @@ name: samtools_faidx + channels: - conda-forge - bioconda - defaults + dependencies: - - bioconda::samtools=1.17 + - bioconda::htslib=1.19.1 + - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 3aa988224..cfe7ad95f 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index e189af28f..f3c25de20 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -39,6 +39,10 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - fa: + type: file + description: FASTA file + pattern: "*.{fa}" - fai: type: file description: FASTA index file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test new file mode 100644 index 000000000..17244ef2e --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,122 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FAIDX" + script "../main.nf" + process "SAMTOOLS_FAIDX" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/faidx" + + test("test_samtools_faidx") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fasta") { + + config "./nextflow2.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fai") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap new file mode 100644 index 000000000..3e651ef68 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,249 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:22:39.412601" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:23:22.427966" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:24:04.107537" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:24:45.868463" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:25:27.550554" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config new file mode 100644 index 000000000..f76a3ba09 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = 'MT192765.1 -o extract.fa' + } + +} diff --git a/modules/nf-core/samtools/faidx/tests/nextflow2.config b/modules/nf-core/samtools/faidx/tests/nextflow2.config new file mode 100644 index 000000000..33ebbd5df --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow2.config @@ -0,0 +1,6 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = '-o extract.fa' + } +} diff --git a/modules/nf-core/samtools/faidx/tests/tags.yml b/modules/nf-core/samtools/faidx/tests/tags.yml new file mode 100644 index 000000000..e4a839481 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/faidx: + - modules/nf-core/samtools/faidx/** diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index 3c6f95b25..a5e506498 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.17 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 256bd7c46..dc14f98d6 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index c76a9169f..bb7756d1c 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -8,7 +8,7 @@ nextflow_process { tag "samtools" tag "samtools/index" - test("sarscov2 [BAI]") { + test("bai") { when { params { @@ -16,10 +16,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) """ } } @@ -28,12 +28,12 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot(process.out.bai).match("bai") }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out.versions).match("bai_versions") } ) } } - test("homo_sapiens [CRAI]") { + test("crai") { when { params { @@ -41,10 +41,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) """ } } @@ -53,12 +53,12 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot(process.out.crai).match("crai") }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out.versions).match("crai_versions") } ) } } - test("homo_sapiens [CSI]") { + test("csi") { config "./csi.nextflow.config" @@ -68,10 +68,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) """ } } @@ -80,7 +80,7 @@ nextflow_process { assertAll ( { assert process.success }, { assert path(process.out.csi.get(0).get(1)).exists() }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out.versions).match("csi_versions") } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index b3baee7fb..3dc8e7de8 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,28 +1,74 @@ { + "crai_versions": { + "content": [ + [ + "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:00.324667957" + }, + "csi_versions": { + "content": [ + [ + "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:07.885103162" + }, "crai": { "content": [ [ [ { - "id": "test" + "id": "test", + "single_end": false }, "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" ] ] ], - "timestamp": "2023-11-15T15:17:37.30801" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:41:38.446424" }, "bai": { "content": [ [ [ { - "id": "test" + "id": "test", + "single_end": false }, "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" ] ] ], - "timestamp": "2023-11-15T15:17:30.869234" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:40:46.579747" + }, + "bai_versions": { + "content": [ + [ + "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:11:51.641425452" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index 508659f02..4d898e486 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.17 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 60f0c634d..fc374f980 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -4,15 +4,18 @@ process SAMTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: - tuple val(meta), path(bam) + tuple val(meta) , path(bam) + tuple val(meta2), path(fasta) output: - tuple val(meta), path("*.bam"), emit: bam - tuple val(meta), path("*.csi"), emit: csi, optional: true + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true path "versions.yml" , emit: versions when: @@ -21,14 +24,24 @@ process SAMTOOLS_SORT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + def reference = fasta ? "--reference ${fasta}" : "" if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + samtools cat \\ + --threads $task.cpus \\ + ${bam} \\ + | \\ samtools sort \\ $args \\ - -@ $task.cpus \\ - -o ${prefix}.bam \\ - -T $prefix \\ - $bam + -T ${prefix} \\ + --threads $task.cpus \\ + ${reference} \\ + -o ${prefix}.${extension} \\ + - cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -40,6 +53,7 @@ process SAMTOOLS_SORT { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.bam + touch ${prefix}.bam.csi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 2200de72f..341a7d0eb 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -23,8 +23,18 @@ input: e.g. [ id:'test', single_end:false ] - bam: type: file - description: BAM/CRAM/SAM file + description: BAM/CRAM/SAM file(s) pattern: "*.{bam,cram,sam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + optional: true output: - meta: type: map @@ -33,19 +43,29 @@ output: e.g. [ id:'test', single_end:false ] - bam: type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - versions: + description: Sorted BAM file + pattern: "*.{bam}" + - cram: type: file - description: File containing software versions - pattern: "versions.yml" + description: Sorted CRAM file + pattern: "*.{cram}" + - crai: + type: file + description: CRAM index file (optional) + pattern: "*.crai" - csi: type: file description: BAM index file (optional) pattern: "*.csi" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" + - "@matthdsm" maintainers: - "@drpatelh" - "@ewels" + - "@matthdsm" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index 1f72f3b96..8360e2b1f 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -8,22 +8,21 @@ nextflow_process { tag "samtools" tag "samtools/sort" - test("test_samtools_sort") { + test("bam") { config "./nextflow.config" when { - params { - outdir = "$outputDir" - } process { """ - input[0] = [ - [ id:'test', single_end:false ], - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) """ } } @@ -34,13 +33,39 @@ nextflow_process { { assert snapshot(process.out).match() } ) } + } + + test("cram") { + + config "./nextflow.config" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } } - test("test_samtools_sort_stub") { + test("bam_stub") { config "./nextflow.config" - options "-stub-run" + options "-stub" when { params { @@ -48,12 +73,14 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test', single_end:false ], - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) """ } } @@ -61,10 +88,9 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, + { assert snapshot(process.out.versions).match("bam_stub_versions") } ) } - } - } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index a43566dab..384776564 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "test_samtools_sort": { + "cram": { "content": [ { "0": [ @@ -8,14 +8,26 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,a29570e7607d217c2fa4d75829e09cd7" + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" ] ], "1": [ ], "2": [ - "versions.yml:md5,46f7a36082fa1f68285fe30d689244e8" + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] + ], + "4": [ + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" ], "bam": [ [ @@ -23,17 +35,120 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,a29570e7607d217c2fa4d75829e09cd7" + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" ] + ], + "crai": [ + + ], + "cram": [ + ], "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] + ], + "versions": [ + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-04T15:08:00.830294" + }, + "bam_stub_bam": { + "content": [ + "test.sorted.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:21:04.364044" + }, + "bam_stub_versions": { + "content": [ + [ + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:15:00.20800281" + }, + "bam": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + ] + ], + "1": [ + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] + ], + "4": [ + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] ], "versions": [ - "versions.yml:md5,46f7a36082fa1f68285fe30d689244e8" + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" ] } ], - "timestamp": "2023-10-17T17:21:46.5427968" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-04T15:07:48.773803" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config index d0f350868..f642771f5 100644 --- a/modules/nf-core/samtools/sort/tests/nextflow.config +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -1,7 +1,8 @@ process { withName: SAMTOOLS_SORT { - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index" } } diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index 141e7bd82..b0676f338 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.17 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index ddf3f88ae..5a8989d69 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(input), path(index) @@ -53,10 +53,19 @@ process SAMTOOLS_VIEW { """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + + def index = args.contains("--write-index") ? "touch ${prefix}.csi" : "" + """ - touch ${prefix}.bam - touch ${prefix}.cram + touch ${prefix}.${file_type} + ${index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/view/tests/bam.config b/modules/nf-core/samtools/view/tests/bam.config new file mode 100644 index 000000000..c10d10811 --- /dev/null +++ b/modules/nf-core/samtools/view/tests/bam.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-fmt bam" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/bam_index.config b/modules/nf-core/samtools/view/tests/bam_index.config new file mode 100644 index 000000000..771ae033a --- /dev/null +++ b/modules/nf-core/samtools/view/tests/bam_index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-fmt bam --write-index" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test new file mode 100644 index 000000000..45a0defba --- /dev/null +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -0,0 +1,212 @@ +nextflow_process { + + name "Test Process SAMTOOLS_VIEW" + script "../main.nf" + process "SAMTOOLS_VIEW" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/view" + + test("bam") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + [] + ]) + input[1] = [[],[]] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, + { assert snapshot(process.out.bai).match("bam_bai") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.cram).match("bam_cram") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.sam).match("bam_sam") }, + { assert snapshot(process.out.versions).match("bam_versions") } + ) + } + } + + test("cram") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.cram[0][1]).name).match("cram_cram") }, + { assert snapshot(process.out.bai).match("cram_bai") }, + { assert snapshot(process.out.bam).match("cram_bam") }, + { assert snapshot(process.out.crai).match("cram_crai") }, + { assert snapshot(process.out.csi).match("cram_csi") }, + { assert snapshot(process.out.sam).match("cram_sam") }, + { assert snapshot(process.out.versions).match("cram_versions") } + ) + } + } + + test("cram_to_bam") { + + config "./bam.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + [] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_bam") }, + { assert snapshot(process.out.bai).match("cram_to_bam_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_cram") }, + { assert snapshot(process.out.csi).match("cram_to_bam_csi") }, + { assert snapshot(process.out.sam).match("cram_to_bam_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_versions") } + ) + } + } + + test("cram_to_bam_index") { + + config "./bam_index.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + [] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_csi") }, + { assert snapshot(process.out.bai).match("cram_to_bam_index_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_index_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_index_cram") }, + { assert snapshot(process.out.sam).match("cram_to_bam_index_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_index_versions") } + ) + } + } + + test("cram_to_bam_index_qname") { + + config "./bam_index.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + [] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of("testN:2817", "testN:2814").collectFile(name: "readnames.list", newLine: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_qname_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_qname_csi") }, + { assert snapshot(process.out.bai).match("cram_to_bam_index_qname_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_index_qname_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_index_qname_cram") }, + { assert snapshot(process.out.sam).match("cram_to_bam_index_qname_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_index_qname_versions") } + ) + } + } + + test("bam_stub") { + + options "-stub" + config "./bam_index.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + [] + ]) + input[1] = [[],[]] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bam_stub_csi") }, + { assert snapshot(process.out.bai).match("bam_stub_bai") }, + { assert snapshot(process.out.crai).match("bam_stub_crai") }, + { assert snapshot(process.out.cram).match("bam_stub_cram") }, + { assert snapshot(process.out.sam).match("bam_stub_sam") }, + { assert snapshot(process.out.versions).match("bam_stub_versions") } + ) + } + } +} diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap new file mode 100644 index 000000000..f55943a7a --- /dev/null +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -0,0 +1,488 @@ +{ + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.256068" + }, + "cram_to_bam_index_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.958617" + }, + "bam_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.065301" + }, + "bam_bai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.258578" + }, + "bam_stub_bai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.071284" + }, + "bam_stub_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:13:09.713353823" + }, + "cram_to_bam_index_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.972288" + }, + "cram_to_bam_sam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.999247" + }, + "cram_to_bam_index_sam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.976457" + }, + "cram_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.497581" + }, + "cram_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.50038" + }, + "cram_to_bam_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.992239" + }, + "cram_to_bam_index_qname_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.325496" + }, + "bam_stub_sam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.079529" + }, + "cram_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.490286" + }, + "bam_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.262882" + }, + "cram_to_bam_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.989247" + }, + "cram_to_bam_index_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.967681" + }, + "cram_to_bam_index_qname_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:13:03.935041046" + }, + "cram_to_bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.982361" + }, + "cram_to_bam_index_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.95456" + }, + "cram_to_bam_index_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:55.910685496" + }, + "cram_to_bam_bai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.98601" + }, + "cram_to_bam_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:47.715221169" + }, + "cram_bam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.495512" + }, + "bam_stub_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.076908" + }, + "cram_to_bam_index_qname_bai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, + "cram_to_bam_index_qname_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.330789" + }, + "cram_bai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.493129" + }, + "bam_stub_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.074313" + }, + "cram_to_bam_index_qname_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:31.692607421" + }, + "cram_to_bam_index_qname_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.333248" + }, + "bam_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.259774" + }, + "bam_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.261287" + }, + "cram_to_bam_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.995454" + }, + "cram_sam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.502625" + }, + "cram_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:39.913411036" + }, + "bam_sam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.264651" + }, + "cram_to_bam_index_bai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.962863" + }, + "cram_to_bam_index_qname_sam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.337634" + }, + "bam_stub_csi": { + "content": [ + "test.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.068596" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/tags.yml b/modules/nf-core/samtools/view/tests/tags.yml new file mode 100644 index 000000000..4fdf1dd12 --- /dev/null +++ b/modules/nf-core/samtools/view/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/view: + - "modules/nf-core/samtools/view/**" diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml index 6db209884..8bd58cff5 100644 --- a/modules/nf-core/star/align/environment.yml +++ b/modules/nf-core/star/align/environment.yml @@ -5,5 +5,6 @@ channels: - defaults dependencies: - bioconda::star=2.7.10a - - bioconda::samtools=1.16.1 + - bioconda::samtools=1.18 + - bioconda::htslib=1.18 - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index cc4f5af52..8e9c48b1c 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -4,8 +4,8 @@ process STAR_ALIGN { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:019f262d90511939dce2dca4b7c868fc108f73db-0' : - 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:019f262d90511939dce2dca4b7c868fc108f73db-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : + 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" input: tuple val(meta), path(reads, stageAs: "input*/*") diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test index 4c8784741..6ecd77863 100644 --- a/modules/nf-core/star/align/tests/main.nf.test +++ b/modules/nf-core/star/align/tests/main.nf.test @@ -7,39 +7,40 @@ nextflow_process { tag "modules_nfcore" tag "star" tag "star/align" + tag "star/genomegenerate" - test("homo_sapiens - single_end") { - config "./nextflow.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] - ]) - """ - } + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ } } + } + + test("homo_sapiens - single_end") { + config "./nextflow.config" when { process { """ input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_1_fastq_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] ]) input[1] = STAR_GENOMEGENERATE.out.index input[2] = Channel.of([ [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false input[4] = 'illumina' @@ -74,38 +75,20 @@ nextflow_process { test("homo_sapiens - paired_end") { config "./nextflow.config" - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) ] ]) input[1] = STAR_GENOMEGENERATE.out.index input[2] = Channel.of([ [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false input[4] = 'illumina' @@ -140,38 +123,20 @@ nextflow_process { test("homo_sapiens - paired_end - arriba") { config "./nextflow.arriba.config" - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) ] ]) input[1] = STAR_GENOMEGENERATE.out.index input[2] = Channel.of([ [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false input[4] = 'illumina' @@ -206,38 +171,20 @@ nextflow_process { test("homo_sapiens - paired_end - starfusion") { config "./nextflow.starfusion.config" - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) ] ]) input[1] = STAR_GENOMEGENERATE.out.index input[2] = Channel.of([ [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false input[4] = 'illumina' @@ -272,40 +219,22 @@ nextflow_process { test("homo_sapiens - paired_end - multiple") { config "./nextflow.config" - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_2_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) ] ]) input[1] = STAR_GENOMEGENERATE.out.index input[2] = Channel.of([ [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false input[4] = 'illumina' diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap index 59b735d44..08edb914b 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -11,7 +11,7 @@ ] ] ], - "timestamp": "2023-11-23T13:29:01.19639" + "timestamp": "2023-12-04T18:01:19.968225733" }, "homo_sapiens - paired_end - multiple - wig": { "content": [ @@ -33,7 +33,7 @@ ] ] ], - "timestamp": "2023-11-23T13:25:07.396223" + "timestamp": "2023-12-04T17:56:12.347549723" }, "homo_sapiens - single_end - wig": { "content": [ @@ -54,10 +54,10 @@ "homo_sapiens - paired_end - arriba - versions": { "content": [ [ - "versions.yml:md5,452ef035aacbc68d47041e86279a9333" + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:25:07.494015" + "timestamp": "2023-12-04T17:56:12.431212643" }, "homo_sapiens - paired_end - multiple - bedgraph": { "content": [ @@ -74,7 +74,7 @@ ] ] ], - "timestamp": "2023-11-23T13:29:01.396383" + "timestamp": "2023-12-04T18:01:20.07119229" }, "homo_sapiens - paired_end - read_per_gene_tab": { "content": [ @@ -112,7 +112,7 @@ ] ] ], - "timestamp": "2023-11-23T13:25:07.348239" + "timestamp": "2023-12-04T17:56:12.268388251" }, "homo_sapiens - single_end - sam": { "content": [ @@ -133,10 +133,10 @@ "homo_sapiens - single_end - versions": { "content": [ [ - "versions.yml:md5,452ef035aacbc68d47041e86279a9333" + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:22:55.259282" + "timestamp": "2023-12-04T17:53:26.664210196" }, "homo_sapiens - paired_end - multiple - log_out": { "content": [ @@ -172,7 +172,7 @@ ] ] ], - "timestamp": "2023-11-23T13:29:01.729175" + "timestamp": "2023-12-04T18:01:20.189486201" }, "homo_sapiens - paired_end - starfusion - log_final": { "content": [ @@ -214,7 +214,7 @@ ] ] ], - "timestamp": "2023-11-23T13:27:56.003675" + "timestamp": "2023-12-04T17:59:58.53235164" }, "homo_sapiens - paired_end - arriba - junction": { "content": [ @@ -239,7 +239,7 @@ ] ] ], - "timestamp": "2023-11-23T13:22:55.163495" + "timestamp": "2023-12-04T17:53:26.394863748" }, "homo_sapiens - paired_end - arriba - read_per_gene_tab": { "content": [ @@ -277,7 +277,7 @@ ] ] ], - "timestamp": "2023-11-23T13:23:33.265265" + "timestamp": "2023-12-04T17:54:11.934832258" }, "homo_sapiens - paired_end - arriba - bam_transcript": { "content": [ @@ -302,10 +302,10 @@ "homo_sapiens - paired_end - multiple - versions": { "content": [ [ - "versions.yml:md5,452ef035aacbc68d47041e86279a9333" + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:29:01.937182" + "timestamp": "2023-12-04T18:01:20.393705142" }, "homo_sapiens - paired_end - starfusion - bam_transcript": { "content": [ @@ -327,7 +327,7 @@ ] ] ], - "timestamp": "2023-11-23T13:27:56.379367" + "timestamp": "2023-12-04T17:59:58.818041322" }, "homo_sapiens - single_end - fastq": { "content": [ @@ -349,7 +349,7 @@ ] ] ], - "timestamp": "2023-11-23T13:23:33.413683" + "timestamp": "2023-12-04T17:54:12.255481058" }, "homo_sapiens - paired_end - starfusion - bedgraph": { "content": [ @@ -370,10 +370,10 @@ "homo_sapiens - paired_end - versions": { "content": [ [ - "versions.yml:md5,452ef035aacbc68d47041e86279a9333" + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:23:33.445323" + "timestamp": "2023-12-04T17:54:12.343840482" }, "homo_sapiens - paired_end - multiple - tab": { "content": [ @@ -387,7 +387,7 @@ ] ] ], - "timestamp": "2023-11-23T13:29:01.793129" + "timestamp": "2023-12-04T18:01:20.291692062" }, "homo_sapiens - single_end - bam": { "content": [ @@ -401,7 +401,7 @@ ] ] ], - "timestamp": "2023-11-23T13:22:55.128568" + "timestamp": "2023-12-04T17:53:26.265642675" }, "homo_sapiens - paired_end - arriba - wig": { "content": [ @@ -423,7 +423,7 @@ ] ] ], - "timestamp": "2023-11-23T13:23:33.354416" + "timestamp": "2023-12-04T17:54:12.126063825" }, "homo_sapiens - paired_end - arriba - log_final": { "content": [ @@ -459,7 +459,7 @@ ] ] ], - "timestamp": "2023-11-23T13:29:01.13168" + "timestamp": "2023-12-04T18:01:19.851247126" }, "homo_sapiens - paired_end - multiple - fastq": { "content": [ @@ -481,7 +481,7 @@ ] ] ], - "timestamp": "2023-11-23T13:22:55.134799" + "timestamp": "2023-12-04T17:53:26.335457371" }, "homo_sapiens - paired_end - arriba - bam_sorted": { "content": [ @@ -503,7 +503,7 @@ ] ] ], - "timestamp": "2023-11-23T13:27:56.228327" + "timestamp": "2023-12-04T17:59:58.641115828" }, "homo_sapiens - single_end - tab": { "content": [ @@ -517,15 +517,15 @@ ] ] ], - "timestamp": "2023-11-23T13:22:55.236346" + "timestamp": "2023-12-04T17:53:26.580593434" }, "homo_sapiens - paired_end - starfusion - versions": { "content": [ [ - "versions.yml:md5,452ef035aacbc68d47041e86279a9333" + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:27:56.460903" + "timestamp": "2023-12-04T17:59:58.907317103" }, "homo_sapiens - paired_end - multiple - bam_unsorted": { "content": [ @@ -556,7 +556,7 @@ ] ] ], - "timestamp": "2023-11-23T13:23:33.313258" + "timestamp": "2023-12-04T17:54:12.064121304" }, "homo_sapiens - paired_end - starfusion - bam_unsorted": { "content": [ @@ -600,7 +600,7 @@ ] ] ], - "timestamp": "2023-11-23T13:23:33.274809" + "timestamp": "2023-12-04T17:54:12.002180537" }, "homo_sapiens - single_end - spl_junc_tab": { "content": [ @@ -614,7 +614,7 @@ ] ] ], - "timestamp": "2023-11-23T13:22:55.226143" + "timestamp": "2023-12-04T17:53:26.50932751" }, "homo_sapiens - paired_end - starfusion - spl_junc_tab": { "content": [ @@ -628,7 +628,7 @@ ] ] ], - "timestamp": "2023-11-23T13:27:56.337072" + "timestamp": "2023-12-04T17:59:58.731699486" }, "homo_sapiens - single_end - log_out": { "content": [ @@ -706,7 +706,7 @@ ] ] ], - "timestamp": "2023-11-23T13:23:33.398603" + "timestamp": "2023-12-04T17:54:12.185730856" }, "homo_sapiens - paired_end - starfusion - sam": { "content": [ @@ -728,7 +728,7 @@ ] ] ], - "timestamp": "2023-11-23T13:25:06.887604" + "timestamp": "2023-12-04T17:56:12.190560178" }, "homo_sapiens - single_end - log_progress": { "content": [ @@ -742,7 +742,7 @@ ] ] ], - "timestamp": "2023-11-23T13:22:55.195544" + "timestamp": "2023-12-04T17:53:26.450352138" }, "homo_sapiens - paired_end - starfusion - wig": { "content": [ diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml index 0b35ff518..791f255e5 100644 --- a/modules/nf-core/star/genomegenerate/environment.yml +++ b/modules/nf-core/star/genomegenerate/environment.yml @@ -4,6 +4,7 @@ channels: - bioconda - defaults dependencies: + - bioconda::samtools=1.18 + - bioconda::htslib=1.18 - bioconda::star=2.7.10a - - bioconda::samtools=1.16.1 - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf index d20618443..b8855715b 100644 --- a/modules/nf-core/star/genomegenerate/main.nf +++ b/modules/nf-core/star/genomegenerate/main.nf @@ -4,8 +4,8 @@ process STAR_GENOMEGENERATE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:019f262d90511939dce2dca4b7c868fc108f73db-0' : - 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:019f262d90511939dce2dca4b7c868fc108f73db-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : + 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" input: tuple val(meta), path(fasta) @@ -19,9 +19,10 @@ process STAR_GENOMEGENERATE { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def args_list = args.tokenize() - def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' + def args = task.ext.args ?: '' + def args_list = args.tokenize() + def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' + def include_gtf = gtf ? "--sjdbGTFfile $gtf" : '' if (args_list.contains('--genomeSAindexNbases')) { """ mkdir star @@ -29,7 +30,7 @@ process STAR_GENOMEGENERATE { --runMode genomeGenerate \\ --genomeDir star/ \\ --genomeFastaFiles $fasta \\ - --sjdbGTFfile $gtf \\ + $include_gtf \\ --runThreadN $task.cpus \\ $memory \\ $args @@ -51,7 +52,7 @@ process STAR_GENOMEGENERATE { --runMode genomeGenerate \\ --genomeDir star/ \\ --genomeFastaFiles $fasta \\ - --sjdbGTFfile $gtf \\ + $include_gtf \\ --runThreadN $task.cpus \\ --genomeSAindexNbases \$NUM_BASES \\ $memory \\ @@ -67,30 +68,52 @@ process STAR_GENOMEGENERATE { } stub: - """ - mkdir star - touch star/Genome - touch star/Log.out - touch star/SA - touch star/SAindex - touch star/chrLength.txt - touch star/chrName.txt - touch star/chrNameLength.txt - touch star/chrStart.txt - touch star/exonGeTrInfo.tab - touch star/exonInfo.tab - touch star/geneInfo.tab - touch star/genomeParameters.txt - touch star/sjdbInfo.txt - touch star/sjdbList.fromGTF.out.tab - touch star/sjdbList.out.tab - touch star/transcriptInfo.tab + if (gtf) { + """ + mkdir star + touch star/Genome + touch star/Log.out + touch star/SA + touch star/SAindex + touch star/chrLength.txt + touch star/chrName.txt + touch star/chrNameLength.txt + touch star/chrStart.txt + touch star/exonGeTrInfo.tab + touch star/exonInfo.tab + touch star/geneInfo.tab + touch star/genomeParameters.txt + touch star/sjdbInfo.txt + touch star/sjdbList.fromGTF.out.tab + touch star/sjdbList.out.tab + touch star/transcriptInfo.tab - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') - END_VERSIONS - """ + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ + } else { + """ + mkdir star + touch star/Genome + touch star/Log.out + touch star/SA + touch star/SAindex + touch star/chrLength.txt + touch star/chrName.txt + touch star/chrNameLength.txt + touch star/chrStart.txt + touch star/genomeParameters.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ + } } diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test b/modules/nf-core/star/genomegenerate/tests/main.nf.test index eed82926f..c17c8ba45 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test @@ -8,18 +8,18 @@ nextflow_process { tag "star" tag "star/genomegenerate" - test("homo_sapiens") { + test("fasta_gtf") { when { process { """ input[0] = Channel.of([ [ id:'test_fasta' ], - [file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) input[1] = Channel.of([ [ id:'test_gtf' ], - [file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) """ } @@ -28,11 +28,88 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).name).match("index") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_gtf_index") }, + { assert snapshot(process.out.versions).match("fasta_gtf_versions") } + ) + } + } + + test("fasta_gtf_stub") { + + options '-stub' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_gtf_stub_index") }, + { assert snapshot(process.out.versions).match("fasta_gtf_stub_versions") } + ) + } + } + + test("fasta") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ [], [] ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_index") }, + { assert snapshot(process.out.versions).match("fasta_versions") } + ) + } + + } + + test("fasta_stub") { + + options '-stub' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ [], [] ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_stub_index") }, + { assert snapshot(process.out.versions).match("fasta_stub_versions") } ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap index bd4e0caa6..5653d6e6c 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap @@ -1,16 +1,90 @@ { - "versions": { + "fasta_gtf_versions": { "content": [ [ - "versions.yml:md5,9c11319b80fdedc90dadce4e0fb42ded" + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" ] ], - "timestamp": "2023-11-23T11:18:14.835118" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:54:31.798555" }, - "index": { + "fasta_stub_versions": { "content": [ - "star" + [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:55:07.521209" + }, + "fasta_gtf_stub_index": { + "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:54:46.478098" + }, + "fasta_gtf_stub_versions": { + "content": [ + [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:54:46.491657" + }, + "fasta_index": { + "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:54:57.552329" + }, + "fasta_versions": { + "content": [ + [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:54:57.560541" + }, + "fasta_gtf_index": { + "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:54:31.786814" + }, + "fasta_stub_index": { + "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]" ], - "timestamp": "2023-11-23T11:31:47.560528" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-01T15:55:07.517472" } } \ No newline at end of file diff --git a/modules/nf-core/stringtie/merge/tests/main.nf.test b/modules/nf-core/stringtie/merge/tests/main.nf.test index 90368134b..358c561a0 100644 --- a/modules/nf-core/stringtie/merge/tests/main.nf.test +++ b/modules/nf-core/stringtie/merge/tests/main.nf.test @@ -7,30 +7,30 @@ nextflow_process { tag "modules_nfcore" tag "stringtie" tag "stringtie/merge" + tag "stringtie/stringtie" - test("homo_sapiens - forward strandedness") { - - setup { - run("STRINGTIE_STRINGTIE") { - script "../../stringtie/main.nf" - process { - """ - input[0] = [ - [ id:'test', strandedness:'forward' ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] - input[1] = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) - """ - } + setup { + run("STRINGTIE_STRINGTIE") { + script "../../stringtie/main.nf" + process { + """ + input[0] = [ + [ id:'test', strandedness:'reverse' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) + """ } - } + } + + test("homo_sapiens - forward strandedness") { when { process { """ input[0] = STRINGTIE_STRINGTIE.out.transcript_gtf.map { it -> it[1] } - input[1] = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) """ } } @@ -46,22 +46,6 @@ nextflow_process { test("homo_sapiens - reverse strandedness") { - setup { - run("STRINGTIE_STRINGTIE") { - script "../../stringtie/main.nf" - process { - """ - input[0] = [ - [ id:'test', strandedness:'reverse' ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] - input[1] = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) - """ - } - } - - } - when { process { """ diff --git a/modules/nf-core/stringtie/merge/tests/main.nf.test.snap b/modules/nf-core/stringtie/merge/tests/main.nf.test.snap index 3e4bc68f6..e10406964 100644 --- a/modules/nf-core/stringtie/merge/tests/main.nf.test.snap +++ b/modules/nf-core/stringtie/merge/tests/main.nf.test.snap @@ -5,6 +5,10 @@ "versions.yml:md5,b73d45fdebf4c8c446bb01817db1665d" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-11-23T14:14:39.697712988" }, "rs_gtf": { @@ -13,15 +17,23 @@ "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-11-23T14:14:39.691894799" }, "fs_gtf": { "content": [ [ - "stringtie.merged.gtf:md5,d959eb2fab0db48ded7275e0a2e83c05" + "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" ] ], - "timestamp": "2023-11-23T14:14:20.872841278" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-07T16:43:48.130184" }, "fs_versions": { "content": [ @@ -29,6 +41,10 @@ "versions.yml:md5,b73d45fdebf4c8c446bb01817db1665d" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-11-23T14:14:20.883140097" } } \ No newline at end of file diff --git a/modules/nf-core/stringtie/stringtie/tests/main.nf.test b/modules/nf-core/stringtie/stringtie/tests/main.nf.test index 68786b745..00efe8f1a 100644 --- a/modules/nf-core/stringtie/stringtie/tests/main.nf.test +++ b/modules/nf-core/stringtie/stringtie/tests/main.nf.test @@ -10,13 +10,15 @@ nextflow_process { test("sarscov2 [bam] - forward strandedness") { + config "./nextflow.config" + when { process { """ input[0] = [ [ id:'test', strandedness:'forward' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] input[1] = [] """ } @@ -24,24 +26,26 @@ nextflow_process { then { assertAll( - { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("fs_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("fs_abundance") }, - { assert snapshot(process.out.versions).match("fs_versions") } + { assert process.success }, + { assert snapshot(process.out.transcript_gtf).match("fs_transcript_gtf") }, + { assert snapshot(process.out.abundance).match("fs_abundance") }, + { assert snapshot(process.out.versions).match("fs_versions") } ) } } test("sarscov2 [bam] - forward strandedness + reference annotation") { + config "./nextflow.config" + when { process { """ input[0] = [ - [ id:'test', strandedness:'forward' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] - input[1] = file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + [ id:'test', strandedness:'forward' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) """ } } @@ -49,23 +53,25 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("fs_gtf_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("fs_gtf_abundance") }, - { assert snapshot(process.out.ballgown).match("fs_gtf_ballgown") }, - { assert snapshot(process.out.versions).match("fs_gtf_versions") } + { assert snapshot(process.out.transcript_gtf).match("fs_gtf_transcript_gtf") }, + { assert snapshot(process.out.abundance).match("fs_gtf_abundance") }, + { assert snapshot(process.out.ballgown).match("fs_gtf_ballgown") }, + { assert snapshot(process.out.versions).match("fs_gtf_versions") } ) } } test("sarscov2 [bam] - reverse strandedness") { + config "./nextflow.config" + when { process { """ input[0] = [ [ id:'test', strandedness:'reverse' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] input[1] = [] """ } @@ -73,35 +79,37 @@ nextflow_process { then { assertAll( - { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("rs_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("rs_abundance") }, - { assert snapshot(process.out.versions).match("rs_versions") } + { assert process.success }, + { assert snapshot(process.out.transcript_gtf).match("rs_transcript_gtf") }, + { assert snapshot(process.out.abundance).match("rs_abundance") }, + { assert snapshot(process.out.versions).match("rs_versions") } ) } } test("sarscov2 [bam] - reverse strandedness + reference annotation") { + config "./nextflow.config" + when { process { """ input[0] = [ [ id:'test', strandedness:'reverse' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] - input[1] = file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) """ } } then { assertAll( - { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("rs_gtf_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("rs_gtf_abundance") }, - { assert snapshot(process.out.ballgown).match("rs_gtf_ballgown") }, - { assert snapshot(process.out.versions).match("rs_gtf_versions") } + { assert process.success }, + { assert snapshot(process.out.transcript_gtf).match("rs_gtf_transcript_gtf") }, + { assert snapshot(process.out.abundance).match("rs_gtf_abundance") }, + { assert snapshot(process.out.ballgown).match("rs_gtf_ballgown") }, + { assert snapshot(process.out.versions).match("rs_gtf_versions") } ) } } diff --git a/modules/nf-core/stringtie/stringtie/tests/nextflow.config b/modules/nf-core/stringtie/stringtie/tests/nextflow.config new file mode 100644 index 000000000..e3aaa0999 --- /dev/null +++ b/modules/nf-core/stringtie/stringtie/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'STRINGTIE_STRINGTIE' { + ext.args = '' + } +} diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index f59018dc9..3cb8d6ac4 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -1,4 +1,4 @@ -include { ARRIBA } from '../../modules/nf-core/arriba/main' +include { ARRIBA_ARRIBA } from '../../modules/nf-core/arriba/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_ARRIBA} from '../../modules/nf-core/samtools/index/main' include { SAMTOOLS_SORT as SAMTOOLS_SORT_FOR_ARRIBA} from '../../modules/nf-core/samtools/sort/main' include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_ARRIBA} from '../../modules/nf-core/samtools/view/main' @@ -28,16 +28,16 @@ workflow ARRIBA_WORKFLOW { .map { meta, reads, fusions -> [ meta, fusions ] } ch_arriba_fusion_fail = ch_dummy_file } else { - ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, [[],[]], [[],[]], ch_arriba_ref_protein_domains ) - ch_versions = ch_versions.mix(ARRIBA.out.versions) + ARRIBA_ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, [[],[]], [[],[]], ch_arriba_ref_protein_domains ) + ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) - ch_arriba_fusions = ARRIBA.out.fusions - ch_arriba_fusion_fail = ARRIBA.out.fusions_fail.map{ meta, file -> return file} + ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions + ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ meta, file -> return file} } if (params.cram.contains('arriba') ){ - SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam) + SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam, ch_fasta) ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions ) SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 7847dd055..bd985e4fb 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -4,7 +4,7 @@ ======================================================================================== */ -include { ARRIBA_DOWNLOAD } from '../modules/local/arriba/download/main' +include { ARRIBA_DOWNLOAD } from '../modules/nf-core/arriba/download/main' include { ENSEMBL_DOWNLOAD } from '../modules/local/ensembl/main' include { FUSIONCATCHER_DOWNLOAD } from '../modules/local/fusioncatcher/download/main' include { FUSIONREPORT_DOWNLOAD } from '../modules/local/fusionreport/download/main' From 213382715db3a90bdab4b9a9c736e29150f1ba17 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:00:08 +0200 Subject: [PATCH 003/887] fix path --- subworkflows/local/arriba_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 3cb8d6ac4..ce142a749 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -1,4 +1,4 @@ -include { ARRIBA_ARRIBA } from '../../modules/nf-core/arriba/main' +include { ARRIBA_ARRIBA } from '../../modules/nf-core/arriba/arriba/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_ARRIBA} from '../../modules/nf-core/samtools/index/main' include { SAMTOOLS_SORT as SAMTOOLS_SORT_FOR_ARRIBA} from '../../modules/nf-core/samtools/sort/main' include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_ARRIBA} from '../../modules/nf-core/samtools/view/main' From a8f87e7fcf812780646e26b14703cff5e777bf1f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:07:05 +0200 Subject: [PATCH 004/887] add latest zenodo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 58189dc64..b418192ac 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml) -[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) +[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.2565517-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.2565517) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) [![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) From 6c0645a2c121dd96e86e8bc745ab8b78c724a1c0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:21:01 +0200 Subject: [PATCH 005/887] remove TODOs --- subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 3a02b058b..3aee5fc24 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -183,7 +183,6 @@ def genomeExistsError() { // Generate methods description for MultiQC // def toolCitationText() { - // TODO nf-core: Optionally add in-text citation tools to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ @@ -197,7 +196,6 @@ def toolCitationText() { } def toolBibliographyText() { - // TODO nf-core: Optionally add bibliographic entries to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ @@ -222,7 +220,7 @@ def methodsDescriptionText(mqc_methods_yaml) { meta["tool_citations"] = "" meta["tool_bibliography"] = "" - // TODO nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! + // nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") // meta["tool_bibliography"] = toolBibliographyText() From 0443c44576219718c3474711ff83db4081233185 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:28:56 +0200 Subject: [PATCH 006/887] update starfusion --- modules/local/fusioninspector/main.nf | 4 ++-- modules/local/starfusion/build/main.nf | 4 ++-- modules/local/starfusion/detect/main.nf | 4 ++-- modules/local/starfusion/download/main.nf | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index c7fcd3f04..2f99c7111 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -2,8 +2,8 @@ process FUSIONINSPECTOR { tag "$meta.id" label 'process_high' - conda "bioconda::dfam=3.3 bioconda::hmmer=3.3.2 bioconda::star-fusion=1.12.0 bioconda::samtools=1.9 bioconda::star=2.7.8a" - container 'docker.io/trinityctat/starfusion:1.12.0' + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" + container 'docker.io/trinityctat/starfusion:1.13.0' input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index e2bd7879f..a768cc5c9 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -1,8 +1,8 @@ process STARFUSION_BUILD { tag 'star-fusion' - conda "bioconda::dfam=3.3 bioconda::hmmer=3.3.2 bioconda::star-fusion=1.12.0 bioconda::trinity=2.13.2 bioconda::samtools=1.9 bioconda::star=2.7.8a" - container "docker.io/trinityctat/starfusion:1.12.0" + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" + container "docker.io/trinityctat/starfusion:1.13.0" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 1994d5551..9a46cc00d 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -2,8 +2,8 @@ process STARFUSION { tag "$meta.id" label 'process_high' - conda "bioconda::dfam=3.3 bioconda::hmmer=3.3.2 bioconda::star-fusion=1.12.0 bioconda::trinity=2.13.2 bioconda::samtools=1.9 bioconda::star=2.7.8a" - container 'docker.io/trinityctat/starfusion:1.12.0' + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" + container 'docker.io/trinityctat/starfusion:1.13.0' input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 9c9b14827..221d12dd9 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -1,8 +1,8 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' - conda "bioconda::dfam=3.3 bioconda::hmmer=3.3.2 bioconda::star-fusion=1.12.0 bioconda::trinity=2.13.2 bioconda::samtools=1.9 bioconda::star=2.7.8a" - container 'docker.io/trinityctat/starfusion:1.12.0' + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" + container 'docker.io/trinityctat/starfusion:1.13.0' output: path "ctat_genome_lib_build_dir/*" , emit: reference From 2c35b26ca16f88c5ad8ab79e2d5bf2c9442ec9c1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 12 Apr 2024 10:27:09 +0200 Subject: [PATCH 007/887] picard collectrnaseqmetrics to nf-core --- modules.json | 14 +-- .../local/picard/collectrnaseqmetrics/main.nf | 68 ----------- .../picard/collectrnaseqmetrics/meta.yml | 53 --------- modules/nf-core/agat/convertspgff2tsv/main.nf | 13 +- .../agat/convertspgff2tsv/tests/main.nf.test | 61 ++++++++++ .../convertspgff2tsv/tests/main.nf.test.snap | 40 +++++++ .../agat/convertspgff2tsv/tests/tags.yml | 2 + modules/nf-core/arriba/arriba/main.nf | 6 +- modules/nf-core/arriba/main.nf | 66 ----------- modules/nf-core/arriba/meta.yml | 111 ------------------ .../collectrnaseqmetrics/environment.yml | 7 ++ .../picard/collectrnaseqmetrics/main.nf | 62 ++++++++++ .../picard/collectrnaseqmetrics/meta.yml | 61 ++++++++++ subworkflows/local/qc_workflow.nf | 5 +- workflows/rnafusion.nf | 1 - 15 files changed, 258 insertions(+), 312 deletions(-) delete mode 100644 modules/local/picard/collectrnaseqmetrics/main.nf delete mode 100644 modules/local/picard/collectrnaseqmetrics/meta.yml create mode 100644 modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test create mode 100644 modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap create mode 100644 modules/nf-core/agat/convertspgff2tsv/tests/tags.yml delete mode 100644 modules/nf-core/arriba/main.nf delete mode 100644 modules/nf-core/arriba/meta.yml create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/environment.yml create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/main.nf create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/meta.yml diff --git a/modules.json b/modules.json index f14cf897a..1b751b9e8 100644 --- a/modules.json +++ b/modules.json @@ -7,17 +7,12 @@ "nf-core": { "agat/convertspgff2tsv": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "arriba": { - "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "9198082dcec6d8374c0bf3d7e38dd1f79d4601a7", "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "bbaeb3a3149def237b9d0acb9ab749ae98088e29", "installed_by": ["modules"] }, "arriba/download": { @@ -70,6 +65,11 @@ "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, + "picard/collectrnaseqmetrics": { + "branch": "master", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "installed_by": ["modules"] + }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", diff --git a/modules/local/picard/collectrnaseqmetrics/main.nf b/modules/local/picard/collectrnaseqmetrics/main.nf deleted file mode 100644 index ede593e0e..000000000 --- a/modules/local/picard/collectrnaseqmetrics/main.nf +++ /dev/null @@ -1,68 +0,0 @@ -process PICARD_COLLECTRNASEQMETRICS { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::picard=3.1.0" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.0--hdfd78af_0' : - 'biocontainers/picard:3.1.0--hdfd78af_0' }" - - input: - tuple val(meta), path(bam), path(bai) - tuple val(meta2), path(refflat) - tuple val(meta3), path(rrna_intervals) - - output: - tuple val(meta), path("*rna_metrics.txt") , emit: metrics - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def strandedness = '' - // def strandedness = '--STRAND_SPECIFICITY FIRST_READ_TRANSCRIPTION_STRAND' - if ("${meta.strandedness}" == 'forward') { - strandedness = '--STRAND_SPECIFICITY FIRST_READ_TRANSCRIPTION_STRAND' - } else if ("${meta.strandedness}" == 'reverse') { - strandedness = '--STRAND_SPECIFICITY SECOND_READ_TRANSCRIPTION_STRAND' - } else { - strandedness = '--STRAND_SPECIFICITY NONE' - } - - def rrna = rrna_intervals == [] ? '' : "--RIBOSOMAL_INTERVALS ${rrna_intervals}" - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3072 - if (!task.memory) { - log.info '[Picard CollectRnaMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() - } - """ - picard \\ - -Xmx${avail_mem}M \\ - CollectRnaSeqMetrics \\ - --TMP_DIR ./tmp \\ - ${strandedness} \\ - ${rrna} \\ - --REF_FLAT ${refflat} \\ - --INPUT ${bam} \\ - --OUTPUT ${prefix}_rna_metrics.txt \\ - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(picard CollectRnaMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}_rna_metrics.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(picard CollectRnaMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) - END_VERSIONS - """ -} diff --git a/modules/local/picard/collectrnaseqmetrics/meta.yml b/modules/local/picard/collectrnaseqmetrics/meta.yml deleted file mode 100644 index 0cae7d07a..000000000 --- a/modules/local/picard/collectrnaseqmetrics/meta.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: picard_collectrnaseqmetrics -description: Produces RNA alignment metrics for a SAM or BAM file. -keywords: - - alignment - - metrics - - statistics - - quality - - bam - - RNA -tools: - - picard: - description: | - A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) - data and formats such as SAM/BAM/CRAM and VCF. - homepage: https://broadinstitute.github.io/picard/ - documentation: https://broadinstitute.github.io/picard/ - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" - - bai: - type: file - description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag - pattern: "*.{bai}" - - refflat: - type: file - description: Gene annotations in refFlat form - - rrna_intervals: - type: file - description: Location of rRNA sequences in genome, in interval_list format -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - metrics: - type: file - description: Alignment metrics files generated by picard - pattern: "*_{metrics}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@rannick" diff --git a/modules/nf-core/agat/convertspgff2tsv/main.nf b/modules/nf-core/agat/convertspgff2tsv/main.nf index cef483600..5cded33ef 100644 --- a/modules/nf-core/agat/convertspgff2tsv/main.nf +++ b/modules/nf-core/agat/convertspgff2tsv/main.nf @@ -20,7 +20,6 @@ process AGAT_CONVERTSPGFF2TSV { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - """ agat_convert_sp_gff2tsv.pl \\ --gff $gff \\ @@ -32,4 +31,16 @@ process AGAT_CONVERTSPGFF2TSV { agat: \$(agat_convert_sp_gff2tsv.pl --help | sed '3!d; s/.*v//' | sed 's/ .*//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_convert_sp_gff2tsv.pl --help | sed '3!d; s/.*v//' | sed 's/ .*//') + END_VERSIONS + """ } diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test new file mode 100644 index 000000000..41239a588 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test @@ -0,0 +1,61 @@ +nextflow_process { + + name "Test Process AGAT_CONVERTSPGFF2TSV" + script "../main.nf" + process "AGAT_CONVERTSPGFF2TSV" + + tag "modules" + tag "modules_nfcore" + tag "agat" + tag "agat/convertspgff2tsv" + + test("sarscov2 - genome [gff3]") { + + when { + process { + """ + // TODO nf-core: define inputs of the process here. Example: + + input[0] = [ + [ id: 'test' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - genome [gff3] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.tsv.collect { file(it[1]).getName() } + + process.out.versions).match() } + ) + } + + } + +} diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap new file mode 100644 index 000000000..cf21cd659 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap @@ -0,0 +1,40 @@ +{ + "sarscov2 - genome [gff3] - stub": { + "content": [ + [ + "test.tsv", + "versions.yml:md5,07ae8e1f648a67237a7efeafb551f01c" + ] + ], + "timestamp": "2023-12-24T23:55:30.786170144" + }, + "sarscov2 - genome [gff3]": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,e565b8ee5bc69b0625046a8036fda552" + ] + ], + "1": [ + "versions.yml:md5,07ae8e1f648a67237a7efeafb551f01c" + ], + "tsv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,e565b8ee5bc69b0625046a8036fda552" + ] + ], + "versions": [ + "versions.yml:md5,07ae8e1f648a67237a7efeafb551f01c" + ] + } + ], + "timestamp": "2023-12-24T23:55:20.642366893" + } +} \ No newline at end of file diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/tags.yml b/modules/nf-core/agat/convertspgff2tsv/tests/tags.yml new file mode 100644 index 000000000..d2ee37213 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2tsv/tests/tags.yml @@ -0,0 +1,2 @@ +agat/convertspgff2tsv: + - "modules/nf-core/agat/convertspgff2tsv/**" diff --git a/modules/nf-core/arriba/arriba/main.nf b/modules/nf-core/arriba/arriba/main.nf index a29a8d140..761d0bf35 100644 --- a/modules/nf-core/arriba/arriba/main.nf +++ b/modules/nf-core/arriba/arriba/main.nf @@ -60,7 +60,9 @@ process ARRIBA_ARRIBA { echo stub > ${prefix}.fusions.tsv echo stub > ${prefix}.fusions.discarded.tsv - echo "${task.process}:" > versions.yml - echo ' arriba: 2.2.1' >> versions.yml + cat <<-END_VERSIONS > versions.yml + "${task.process}": + arriba: \$(arriba -h | grep 'Version:' 2>&1 | sed 's/Version:\s//') + END_VERSIONS """ } diff --git a/modules/nf-core/arriba/main.nf b/modules/nf-core/arriba/main.nf deleted file mode 100644 index 2537d05b8..000000000 --- a/modules/nf-core/arriba/main.nf +++ /dev/null @@ -1,66 +0,0 @@ -process ARRIBA { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::arriba=2.4.0" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/arriba:2.4.0--h0033a41_2' : - 'biocontainers/arriba:2.4.0--h0033a41_2' }" - - input: - tuple val(meta), path(bam) - tuple val(meta2), path(fasta) - tuple val(meta3), path(gtf) - tuple val(meta4), path(blacklist) - tuple val(meta5), path(known_fusions) - tuple val(meta6), path(structural_variants) - tuple val(meta7), path(tags) - tuple val(meta8), path(protein_domains) - - output: - tuple val(meta), path("*.fusions.tsv") , emit: fusions - tuple val(meta), path("*.fusions.discarded.tsv"), emit: fusions_fail - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def blacklist = blacklist ? "-b $blacklist" : "-f blacklist" - def known_fusions = known_fusions ? "-k $known_fusions" : "" - def structural_variants = structural_variants ? "-d $structual_variants" : "" - def tags = tags ? "-t $tags" : "" - def protein_domains = protein_domains ? "-p $protein_domains" : "" - - """ - arriba \\ - -x $bam \\ - -a $fasta \\ - -g $gtf \\ - -o ${prefix}.fusions.tsv \\ - -O ${prefix}.fusions.discarded.tsv \\ - $blacklist \\ - $known_fusions \\ - $structural_variants \\ - $tags \\ - $protein_domains \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - arriba: \$(arriba -h | grep 'Version:' 2>&1 | sed 's/Version:\s//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - echo stub > ${prefix}.fusions.tsv - echo stub > ${prefix}.fusions.discarded.tsv - - echo "${task.process}:" > versions.yml - echo ' arriba: 2.2.1' >> versions.yml - """ -} diff --git a/modules/nf-core/arriba/meta.yml b/modules/nf-core/arriba/meta.yml deleted file mode 100644 index 85b3a30b5..000000000 --- a/modules/nf-core/arriba/meta.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: arriba -description: Arriba is a command-line tool for the detection of gene fusions from RNA-Seq data. -keywords: - - fusion - - arriba - - detection - - RNA-Seq -tools: - - arriba: - description: Fast and accurate gene fusion detection from RNA-Seq data - homepage: https://github.com/suhrig/arriba - documentation: https://arriba.readthedocs.io/en/latest/ - tool_dev_url: https://github.com/suhrig/arriba - doi: "10.1101/gr.257246.119" - licence: ["MIT"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Assembly FASTA file - pattern: "*.{fasta}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - gtf: - type: file - description: Annotation GTF file - pattern: "*.{gtf}" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - blacklist: - type: file - description: Blacklist file - pattern: "*.{tsv}" - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - known_fusions: - type: file - description: Known fusions file - pattern: "*.{tsv}" - - meta6: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - structural_variants: - type: file - description: Structural variants file - pattern: "*.{tsv}" - - meta7: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - tags: - type: file - description: Tags file - pattern: "*.{tsv}" - - meta8: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - protein_domains: - type: file - description: Protein domains file - pattern: "*.{gff3}" - -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" - - fusions: - type: file - description: File contains fusions which pass all of Arriba's filters. - pattern: "*.{fusions.tsv}" - - fusions_fail: - type: file - description: File contains fusions that Arriba classified as an artifact or that are also observed in healthy tissue. - pattern: "*.{fusions.discarded.tsv}" - -authors: - - "@praveenraj2018,@rannick" diff --git a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml new file mode 100644 index 000000000..542b2e823 --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml @@ -0,0 +1,7 @@ +name: picard_collectrnaseqmetrics +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/collectrnaseqmetrics/main.nf b/modules/nf-core/picard/collectrnaseqmetrics/main.nf new file mode 100644 index 000000000..f833a105c --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/main.nf @@ -0,0 +1,62 @@ +process PICARD_COLLECTRNASEQMETRICS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + path ref_flat + path fasta + path rrna_intervals + + output: + tuple val(meta), path("*.rna_metrics") , emit: metrics + tuple val(meta), path("*.pdf") , emit: pdf, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" + def rrna = rrna_intervals ? "--RIBOSOMAL_INTERVALS ${rrna_intervals}" : "" + def avail_mem = 3072 + if (!task.memory) { + log.info '[Picard CollectRnaSeqMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + picard \\ + -Xmx${avail_mem}M \\ + CollectRnaSeqMetrics \\ + $args \\ + $reference \\ + $rrna \\ + --REF_FLAT $ref_flat \\ + --INPUT $bam \\ + --OUTPUT ${prefix}.rna_metrics + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard CollectRnaSeqMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.rna_metrics + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard CollectRnaSeqMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/picard/collectrnaseqmetrics/meta.yml b/modules/nf-core/picard/collectrnaseqmetrics/meta.yml new file mode 100644 index 000000000..8a7bd2346 --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/meta.yml @@ -0,0 +1,61 @@ +name: "picard_collectrnaseqmetrics" +description: Collect metrics from a RNAseq BAM file +keywords: + - rna + - bam + - metrics + - alignment + - statistics + - quality +tools: + - "picard": + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: "https://broadinstitute.github.io/picard/" + documentation: "https://broadinstitute.github.io/picard/" + tool_dev_url: "https://github.com/broadinstitute/picard" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false, strandedness:true ] + - bam: + type: file + description: BAM/SAM file + pattern: "*.{bam,sam}" + - ref_flat: + type: file + description: Genome ref_flat file + - gene_pred: + type: file + description: genome gene_pred file as an alternative to the ref_flat file + - fasta: + type: file + description: Genome fasta file + - rrna_intervals: + type: file + description: Interval file of ribosomal RNA regions +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - metrics: + type: file + description: RNA alignment metrics files generated by picard + pattern: "*.rna_metrics" + - pdf: + type: file + description: Plot normalized position vs. coverage in a pdf file generated by picard + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@anoronh4" +maintainers: + - "@anoronh4" diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index 6b53358ad..689314671 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -2,14 +2,13 @@ // Check input samplesheet and get read channels // -include { PICARD_COLLECTRNASEQMETRICS } from '../../modules/local/picard/collectrnaseqmetrics/main' +include { PICARD_COLLECTRNASEQMETRICS } from '../../modules/nf-core/picard/collectrnaseqmetrics/main' include { GATK4_MARKDUPLICATES } from '../../modules/nf-core/gatk4/markduplicates/main' include { PICARD_COLLECTINSERTSIZEMETRICS } from '../../modules/nf-core/picard/collectinsertsizemetrics/main' workflow QC_WORKFLOW { take: ch_bam_sorted - ch_bam_sorted_indexed ch_chrgtf ch_refflat ch_fasta @@ -19,7 +18,7 @@ workflow QC_WORKFLOW { main: ch_versions = Channel.empty() - PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted_indexed, ch_refflat, ch_rrna_interval) + PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted, ch_refflat.map { meta, refflat -> [refflat]}, ch_rrna_interval.map { meta, rrna_interval -> [rrna_interval]}) ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = Channel.empty().mix(PICARD_COLLECTRNASEQMETRICS.out.metrics) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 7483f1be5..400df71aa 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -200,7 +200,6 @@ workflow RNAFUSION { //QC QC_WORKFLOW ( STARFUSION_WORKFLOW.out.ch_bam_sorted, - STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, ch_chrgtf, ch_refflat, ch_fasta, From 20b8b1b9bd46555f0117585d516965c1a2d1d184 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 12 Apr 2024 10:34:36 +0200 Subject: [PATCH 008/887] fix channels --- subworkflows/local/qc_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index 689314671..c13fd4940 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -18,7 +18,7 @@ workflow QC_WORKFLOW { main: ch_versions = Channel.empty() - PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted, ch_refflat.map { meta, refflat -> [refflat]}, ch_rrna_interval.map { meta, rrna_interval -> [rrna_interval]}) + PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted, ch_refflat.map { meta, refflat -> [refflat]}, ch_fasta.map { meta, fasta -> [fasta]}, ch_rrna_interval.map { meta, rrna_interval -> [rrna_interval]}) ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = Channel.empty().mix(PICARD_COLLECTRNASEQMETRICS.out.metrics) From ba4396b045140592dfa5cb01235a7bc751cbcc99 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 12 Apr 2024 11:05:49 +0200 Subject: [PATCH 009/887] use ucsc gtftogenepred from nf-core --- conf/modules.config | 17 +++--- modules.json | 5 ++ .../local/uscs/custom_gtftogenepred/main.nf | 37 ------------- .../local/uscs/custom_gtftogenepred/meta.yml | 34 ------------ .../ucsc/gtftogenepred/environment.yml | 7 +++ modules/nf-core/ucsc/gtftogenepred/main.nf | 54 +++++++++++++++++++ modules/nf-core/ucsc/gtftogenepred/meta.yml | 47 ++++++++++++++++ workflows/build_references.nf | 6 +-- workflows/rnafusion.nf | 2 +- 9 files changed, 126 insertions(+), 83 deletions(-) delete mode 100644 modules/local/uscs/custom_gtftogenepred/main.nf delete mode 100644 modules/local/uscs/custom_gtftogenepred/meta.yml create mode 100644 modules/nf-core/ucsc/gtftogenepred/environment.yml create mode 100644 modules/nf-core/ucsc/gtftogenepred/main.nf create mode 100644 modules/nf-core/ucsc/gtftogenepred/meta.yml diff --git a/conf/modules.config b/conf/modules.config index dfb660787..850703297 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -122,14 +122,6 @@ process { ] } - withName: 'GTF_TO_REFFLAT' { - publishDir = [ - path: { "${params.genomes_base}/ensembl" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - withName: 'HGNC_DOWNLOAD' { publishDir = [ path: { "${params.genomes_base}/hgnc" }, @@ -341,6 +333,15 @@ process { ] } + withName: 'UCSC_GTFTOGENEPRED' { + ext.args = "-genePredExt -geneNameAsName2" + publishDir = [ + path: { "${params.genomes_base}/ensembl" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: 'VCF_COLLECT' { ext.when = {!params.fusioninspector_only} } diff --git a/modules.json b/modules.json index 1b751b9e8..21254e699 100644 --- a/modules.json +++ b/modules.json @@ -114,6 +114,11 @@ "branch": "master", "git_sha": "b1b959609bda44341120aed1766329909f54b8d0", "installed_by": ["modules"] + }, + "ucsc/gtftogenepred": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": ["modules"] } } }, diff --git a/modules/local/uscs/custom_gtftogenepred/main.nf b/modules/local/uscs/custom_gtftogenepred/main.nf deleted file mode 100644 index 78fcbd296..000000000 --- a/modules/local/uscs/custom_gtftogenepred/main.nf +++ /dev/null @@ -1,37 +0,0 @@ -process GTF_TO_REFFLAT { - label 'process_low' - - conda "bioconda::ucsc-gtftogenepred=377" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ucsc-gtftogenepred:377--ha8a8165_5' : - 'quay.io/biocontainers/ucsc-gtftogenepred:377--ha8a8165_5' }" - - input: - tuple val(meta), path (gtf) - - output: - path('*.refflat'), emit: refflat - - script: - def genepred = gtf + '.genepred' - def refflat = gtf + '.refflat' - """ - gtfToGenePred -genePredExt -geneNameAsName2 ${gtf} ${genepred} - paste ${genepred} ${genepred} | cut -f12,16-25 > ${refflat} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gtfToGenePred: 377 - END_VERSIONS - """ - - stub: - def refflat = gtf + '.refflat' - """ - touch ${refflat} - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gtfToGenePred: 377 - END_VERSIONS - """ -} diff --git a/modules/local/uscs/custom_gtftogenepred/meta.yml b/modules/local/uscs/custom_gtftogenepred/meta.yml deleted file mode 100644 index 09711f438..000000000 --- a/modules/local/uscs/custom_gtftogenepred/meta.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: gtf_to_refflat -description: generate gene annotations in refFlat form - - gtftorefflat -tools: - - gtf_to_refflat: - description: generate gene annotations in refFlat form - homepage: https://pachterlab.github.io/kallisto/ - documentation: https://pachterlab.github.io/kallisto/manual - tool_dev_url: https://github.com/pachterlab/kallisto - doi: "" - licence: ["BSD-2-Clause"] - -input: - - fasta: - type: file - description: genome fasta file - pattern: "*.{fasta*}" - - reference: - type: directory - description: Path to kallisto index - pattern: "*" - -output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - fusions: - type: file - description: fusions - pattern: "*.txt" - -authors: - - "@rannick" diff --git a/modules/nf-core/ucsc/gtftogenepred/environment.yml b/modules/nf-core/ucsc/gtftogenepred/environment.yml new file mode 100644 index 000000000..5216fc8ff --- /dev/null +++ b/modules/nf-core/ucsc/gtftogenepred/environment.yml @@ -0,0 +1,7 @@ +name: ucsc_gtftogenepred +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::ucsc-gtftogenepred=447 diff --git a/modules/nf-core/ucsc/gtftogenepred/main.nf b/modules/nf-core/ucsc/gtftogenepred/main.nf new file mode 100644 index 000000000..88aace26b --- /dev/null +++ b/modules/nf-core/ucsc/gtftogenepred/main.nf @@ -0,0 +1,54 @@ +process UCSC_GTFTOGENEPRED { + 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/ucsc-gtftogenepred:447--h954228d_0': + 'biocontainers/ucsc-gtftogenepred:447--h954228d_0' }" + + input: + tuple val(meta), path(gtf) + + output: + tuple val(meta), path("*.genepred"), emit: genepred + tuple val(meta), path("*.refflat") , emit: refflat , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def gen_refflat = args.contains("-genePredExt") && args.contains("-geneNameAsName2") ? "true" : "false" + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = '447' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + gtfToGenePred \\ + $args \\ + $gtf \\ + ${prefix}.genepred + + if [ "${gen_refflat}" == "true" ] ; then + awk 'BEGIN { OFS="\\t"} {print \$12, \$1, \$2, \$3, \$4, \$5, \$6, \$7, \$8, \$9, \$10}' ${prefix}.genepred > ${prefix}.refflat + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ucsc: $VERSION + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = '447' + """ + touch ${prefix}.genepred + touch ${prefix}.refflat + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ucsc: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/ucsc/gtftogenepred/meta.yml b/modules/nf-core/ucsc/gtftogenepred/meta.yml new file mode 100644 index 000000000..02122e410 --- /dev/null +++ b/modules/nf-core/ucsc/gtftogenepred/meta.yml @@ -0,0 +1,47 @@ +name: ucsc_gtftogenepred +description: compute average score of bigwig over bed file +keywords: + - gtf + - genepred + - refflat + - ucsc + - gtftogenepred +tools: + - ucsc: + description: Convert GTF files to GenePred format + homepage: http://hgdownload.cse.ucsc.edu/admin/exe/ + licence: ["varies; see http://genome.ucsc.edu/license"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gtf: + type: file + description: GTF file + pattern: "*.{gtf}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - genepred: + type: file + description: genepred file + pattern: "*.{genepred}" + - refflat: + type: file + description: refflat file + pattern: "*.{refflat}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@BarryDigby" + - "@anoronh4" +maintainers: + - "@BarryDigby" + - "@anoronh4" diff --git a/workflows/build_references.nf b/workflows/build_references.nf index bd985e4fb..7e8c984ea 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -11,7 +11,7 @@ include { FUSIONREPORT_DOWNLOAD } from '../modules/local/fusionreport/ include { HGNC_DOWNLOAD } from '../modules/local/hgnc/main' include { STARFUSION_BUILD } from '../modules/local/starfusion/build/main' include { STARFUSION_DOWNLOAD } from '../modules/local/starfusion/download/main' -include { GTF_TO_REFFLAT } from '../modules/local/uscs/custom_gtftogenepred/main' +include { UCSC_GTFTOGENEPRED } from '../modules/nf-core/ucsc/gtftogenepred/main' include { RRNA_TRANSCRIPTS } from '../modules/local/rrnatranscripts/main' include { CONVERT2BED } from '../modules/local/convert2bed/main' /* @@ -69,9 +69,9 @@ workflow BUILD_REFERENCES { } if (params.starfusion_build){ - GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.chrgtf) + UCSC_GTFTOGENEPRED(ENSEMBL_DOWNLOAD.out.chrgtf) } else { - GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.chrgtf) + UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.chrgtf) } if (params.fusionreport || params.all) { diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 400df71aa..e9152c4ba 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -25,7 +25,7 @@ ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] } ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() -ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() +// ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() From 91a2af2b4bced2a5762a4ef4f760e6f9832f1064 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Apr 2024 10:26:05 +0200 Subject: [PATCH 010/887] bedops convert2bed from nf-core --- modules.json | 5 ++ modules/local/convert2bed/main.nf | 36 ---------- modules/local/convert2bed/meta.yml | 30 -------- modules/local/rrnatranscripts/main.nf | 7 +- .../bedops/convert2bed/environment.yml | 7 ++ modules/nf-core/bedops/convert2bed/main.nf | 48 +++++++++++++ modules/nf-core/bedops/convert2bed/meta.yml | 48 +++++++++++++ .../bedops/convert2bed/tests/main.nf.test | 59 ++++++++++++++++ .../convert2bed/tests/main.nf.test.snap | 68 +++++++++++++++++++ .../nf-core/bedops/convert2bed/tests/tags.yml | 2 + workflows/build_references.nf | 14 ++-- 11 files changed, 247 insertions(+), 77 deletions(-) delete mode 100644 modules/local/convert2bed/main.nf delete mode 100644 modules/local/convert2bed/meta.yml create mode 100644 modules/nf-core/bedops/convert2bed/environment.yml create mode 100644 modules/nf-core/bedops/convert2bed/main.nf create mode 100644 modules/nf-core/bedops/convert2bed/meta.yml create mode 100644 modules/nf-core/bedops/convert2bed/tests/main.nf.test create mode 100644 modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap create mode 100644 modules/nf-core/bedops/convert2bed/tests/tags.yml diff --git a/modules.json b/modules.json index 21254e699..41cd9acd9 100644 --- a/modules.json +++ b/modules.json @@ -20,6 +20,11 @@ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, + "bedops/convert2bed": { + "branch": "master", + "git_sha": "bbd685cd308e4d8bcf0c2caf82da3ee3c9e24157", + "installed_by": ["modules"] + }, "cat/cat": { "branch": "master", "git_sha": "9437e6053dccf4aafa022bfd6e7e9de67e625af8", diff --git a/modules/local/convert2bed/main.nf b/modules/local/convert2bed/main.nf deleted file mode 100644 index c4313f0a7..000000000 --- a/modules/local/convert2bed/main.nf +++ /dev/null @@ -1,36 +0,0 @@ -process CONVERT2BED { - tag "$meta.id" - label 'process_single' - - conda "bioconda::bedops=2.4.41" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bedops:2.4.41--h9f5acd7_0' : - 'quay.io/biocontainers/bedops:2.4.41--h9f5acd7_0' }" - - input: - tuple val(meta), path(gtf) - - output: - tuple val(meta), path("*.bed") , emit: bed - - script: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - convert2bed -i gtf < $gtf > ${prefix}.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - convert2bed: \$(convert2bed --version | grep vers | sed 's/^.*.version: //') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bed - cat <<-END_VERSIONS > versions.yml - "${task.process}": - convert2bed: \$(convert2bed --version | grep vers | sed 's/^.*.version: //') - END_VERSIONS - """ -} diff --git a/modules/local/convert2bed/meta.yml b/modules/local/convert2bed/meta.yml deleted file mode 100644 index 31ff3649a..000000000 --- a/modules/local/convert2bed/meta.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: -description: convert from GTF to BED format - - convert2bed -tools: - - convert2bed: - description: convert from GTF to BED format - homepage: https://github.com/bedops/bedops - documentation: https://bedops.readthedocs.io/en/latest/index.html - tool_dev_url: https://github.com/bedops/bedops - doi: "" - licence: ["GNU GENERAL PUBLIC LICENSE"] - -input: - - gtf: - type: file - description: Path to GTF file - pattern: "*.{gtf*}" - -output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bed: - type: file - description: bed file - pattern: "*.bed" - -authors: - - "@rannick" diff --git a/modules/local/rrnatranscripts/main.nf b/modules/local/rrnatranscripts/main.nf index e4afc2845..c31de7076 100644 --- a/modules/local/rrnatranscripts/main.nf +++ b/modules/local/rrnatranscripts/main.nf @@ -2,12 +2,11 @@ process RRNA_TRANSCRIPTS { tag "$meta.id" label 'process_single' - conda "conda-forge::python=3.8.3" + conda "conda-forge::python=3.12.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.9--1' : - 'quay.io/biocontainers/python:3.9--1' }" - + 'https://depot.galaxyproject.org/singularity/python:3.12' : + 'quay.io/biocontainers/python:3.12' }" input: tuple val(meta), path(gtf) diff --git a/modules/nf-core/bedops/convert2bed/environment.yml b/modules/nf-core/bedops/convert2bed/environment.yml new file mode 100644 index 000000000..049b29e9b --- /dev/null +++ b/modules/nf-core/bedops/convert2bed/environment.yml @@ -0,0 +1,7 @@ +name: "bedops_convert2bed" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::bedops=2.4.41" diff --git a/modules/nf-core/bedops/convert2bed/main.nf b/modules/nf-core/bedops/convert2bed/main.nf new file mode 100644 index 000000000..a23efbd56 --- /dev/null +++ b/modules/nf-core/bedops/convert2bed/main.nf @@ -0,0 +1,48 @@ +process BEDOPS_CONVERT2BED { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bedops:2.4.41--h4ac6f70_2': + 'biocontainers/bedops:2.4.41--h4ac6f70_2' }" + + input: + tuple val(meta), path(in_file) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def format = in_file.getExtension() + """ + convert2bed \\ + $args \\ + -i $format \\ + < $in_file \\ + > ${prefix}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bedops/convert2bed: \$(convert2bed --version | grep vers | sed 's/^.*.version: //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bedops/convert2bed: \$(convert2bed --version | grep vers | sed 's/^.*.version: //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bedops/convert2bed/meta.yml b/modules/nf-core/bedops/convert2bed/meta.yml new file mode 100644 index 000000000..eea919650 --- /dev/null +++ b/modules/nf-core/bedops/convert2bed/meta.yml @@ -0,0 +1,48 @@ +name: "bedops_convert2bed" +description: Convert BAM/GFF/GTF/GVF/PSL files to bed +keywords: + - convert + - bed + - genomics +tools: + - "bedops": + description: "High-performance genomic feature operations." + homepage: "https://bedops.readthedocs.io/en/latest/content/reference/file-management/conversion/convert2bed.html#convert2bed" + documentation: "https://bedops.readthedocs.io/en/latest/" + tool_dev_url: "https://github.com/bedops" + doi: "10.1093/bioinformatics/bts277" + licence: ["GNU v2"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + + - input: + type: file + description: Sorted BAM/GFF/GTF/GVF/PSL file + pattern: "*.{bam,gff,gtf,gvf,psl}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + + - bed: + type: file + description: Sorted BED file + pattern: "*.{bed}" + +authors: + - "@rannick" +maintainers: + - "@rannick" diff --git a/modules/nf-core/bedops/convert2bed/tests/main.nf.test b/modules/nf-core/bedops/convert2bed/tests/main.nf.test new file mode 100644 index 000000000..183f8de6c --- /dev/null +++ b/modules/nf-core/bedops/convert2bed/tests/main.nf.test @@ -0,0 +1,59 @@ +// nf-core modules test bedops/convert2bed +nextflow_process { + + name "Test Process BEDOPS_CONVERT2BED" + script "../main.nf" + process "BEDOPS_CONVERT2BED" + + tag "modules" + tag "modules_nfcore" + tag "bedops" + tag "bedops/convert2bed" + + test("sarscov2 - gtf") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - gtf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap b/modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap new file mode 100644 index 000000000..e2482924d --- /dev/null +++ b/modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "sarscov2 - gtf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" + ], + "bed": [ + [ + { + "id": "test" + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-11T12:06:14.755423333" + }, + "sarscov2 - gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed:md5,adfdd36e848a62f4b0ea8a694abe9659" + ] + ], + "1": [ + "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" + ], + "bed": [ + [ + { + "id": "test" + }, + "test.bed:md5,adfdd36e848a62f4b0ea8a694abe9659" + ] + ], + "versions": [ + "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-11T12:06:08.876003152" + } +} \ No newline at end of file diff --git a/modules/nf-core/bedops/convert2bed/tests/tags.yml b/modules/nf-core/bedops/convert2bed/tests/tags.yml new file mode 100644 index 000000000..fd2c29935 --- /dev/null +++ b/modules/nf-core/bedops/convert2bed/tests/tags.yml @@ -0,0 +1,2 @@ +bedops/convert2bed: + - "modules/nf-core/bedops/convert2bed/**" diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 7e8c984ea..b1ea6d70c 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -4,26 +4,26 @@ ======================================================================================== */ -include { ARRIBA_DOWNLOAD } from '../modules/nf-core/arriba/download/main' include { ENSEMBL_DOWNLOAD } from '../modules/local/ensembl/main' include { FUSIONCATCHER_DOWNLOAD } from '../modules/local/fusioncatcher/download/main' include { FUSIONREPORT_DOWNLOAD } from '../modules/local/fusionreport/download/main' include { HGNC_DOWNLOAD } from '../modules/local/hgnc/main' include { STARFUSION_BUILD } from '../modules/local/starfusion/build/main' include { STARFUSION_DOWNLOAD } from '../modules/local/starfusion/download/main' -include { UCSC_GTFTOGENEPRED } from '../modules/nf-core/ucsc/gtftogenepred/main' include { RRNA_TRANSCRIPTS } from '../modules/local/rrnatranscripts/main' -include { CONVERT2BED } from '../modules/local/convert2bed/main' /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS ======================================================================================== */ +include { ARRIBA_DOWNLOAD } from '../modules/nf-core/arriba/download/main' +include { BEDOPS_CONVERT2BED } from '../modules/nf-core/bedops/convert2bed/main' +include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' +include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' include { SAMTOOLS_FAIDX } from '../modules/nf-core/samtools/faidx/main' include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genomegenerate/main' -include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' -include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' +include { UCSC_GTFTOGENEPRED } from '../modules/nf-core/ucsc/gtftogenepred/main' /* ======================================================================================== @@ -43,9 +43,9 @@ workflow BUILD_REFERENCES { GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) - CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) + BEDOPS_CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) - GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) + GATK4_BEDTOINTERVALLIST(BEDOPS_CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) if (params.starindex || params.all || params.starfusion || params.arriba) { From b493b90162d65a55f232c759c3bbac8e64b76848 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 8 May 2024 14:01:06 +0000 Subject: [PATCH 011/887] Template update for nf-core/tools version 2.14.0 --- .editorconfig | 6 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/awsfulltest.yml | 10 +- .github/workflows/awstest.yml | 12 +- .github/workflows/ci.yml | 4 +- .github/workflows/download_pipeline.yml | 22 ++- .github/workflows/fix-linting.yml | 6 +- .github/workflows/linting.yml | 18 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 6 +- .nf-core.yml | 1 + .pre-commit-config.yaml | 3 + CHANGELOG.md | 2 +- README.md | 2 +- conf/base.config | 3 - conf/modules.config | 8 - conf/test.config | 2 +- conf/test_full.config | 2 +- docs/usage.md | 2 + modules.json | 4 +- modules/nf-core/fastqc/main.nf | 6 + nextflow.config | 178 +++++++++--------- nextflow_schema.json | 7 + pyproject.toml | 15 -- .../utils_nfcore_rnafusion_pipeline/main.nf | 16 +- .../nf-core/utils_nfcore_pipeline/main.nf | 8 +- workflows/rnafusion.nf | 46 +++-- 27 files changed, 222 insertions(+), 171 deletions(-) delete mode 100644 pyproject.toml diff --git a/.editorconfig b/.editorconfig index dd9ffa538..72dda289a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -28,10 +28,6 @@ indent_style = unset [/assets/email*] indent_size = unset -# ignore Readme -[README.md] -indent_style = unset - -# ignore python +# ignore python and markdown [*.{py,md}] indent_style = unset diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8b85a0aae..ed1d027be 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,7 +18,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rnaf - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/rnafusion/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/rnafusion _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). -- [ ] Ensure the test suite passes (`nf-test test main.nf.test -profile test,docker`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index a4b6b4d35..3c5e4c8ac 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -8,12 +8,12 @@ on: types: [published] workflow_dispatch: jobs: - run-tower: + run-platform: name: Run AWS full tests if: github.repository == 'nf-core/rnafusion' runs-on: ubuntu-latest steps: - - name: Launch workflow via tower + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required # Add full size test data (but still relatively small datasets for few samples) @@ -33,7 +33,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: Tower debug log file + name: Seqera Platform debug log file path: | - tower_action_*.log - tower_action_*.json + seqera_platform_action_*.log + seqera_platform_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index cf29b8fdd..d3448f1be 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -5,13 +5,13 @@ name: nf-core AWS test on: workflow_dispatch: jobs: - run-tower: + run-platform: name: Run AWS tests if: github.repository == 'nf-core/rnafusion' runs-on: ubuntu-latest steps: - # Launch workflow using Tower CLI tool action - - name: Launch workflow via tower + # Launch workflow using Seqera Platform CLI tool action + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} @@ -27,7 +27,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: Tower debug log file + name: Seqera Platform debug log file path: | - tower_action_*.log - tower_action_*.json + seqera_platform_action_*.log + seqera_platform_action_*.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3390bf1ac..a776bde84 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,10 +28,10 @@ jobs: - "latest-everything" steps: - name: Check out pipeline code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + uses: nf-core/setup-nextflow@v2 with: version: "${{ matrix.NXF_VER }}" diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 08622fd51..2d20d6442 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -14,6 +14,8 @@ on: pull_request: types: - opened + - edited + - synchronize branches: - master pull_request_target: @@ -28,11 +30,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - name: Disk space cleanup + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: - python-version: "3.11" + python-version: "3.12" architecture: "x64" - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 with: @@ -65,8 +70,17 @@ jobs: - name: Inspect download run: tree ./${{ env.REPOTITLE_LOWERCASE }} - - name: Run the downloaded pipeline + - name: Run the downloaded pipeline (stub) + id: stub_run_pipeline + continue-on-error: true env: NXF_SINGULARITY_CACHEDIR: ./ NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + - name: Run the downloaded pipeline (stub run not supported) + id: run_pipeline + if: ${{ job.steps.stub_run_pipeline.status == failure() }} + env: + NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_HOME_MOUNT: true + run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index 36ecd2076..df750880c 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix-linting.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 with: token: ${{ secrets.nf_core_bot_auth_token }} @@ -32,9 +32,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: - python-version: 3.11 + python-version: "3.12" - name: Install pre-commit run: pip install pre-commit diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 073e18767..a3fb25414 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,12 +14,12 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - name: Set up Python 3.11 - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - name: Set up Python 3.12 + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: - python-version: 3.11 + python-version: "3.12" cache: "pip" - name: Install pre-commit @@ -32,14 +32,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: - python-version: "3.11" + python-version: "3.12" architecture: "x64" - name: Install dependencies @@ -60,7 +60,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index b706875fc..40acc23f5 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@f6b0bace624032e30a85a8fd9c1a7f8f611f5737 # v3 + uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index d468aeaae..03ecfcf72 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,7 +12,7 @@ jobs: - name: get topics and convert to hashtags id: get_topics run: | - curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ' >> $GITHUB_OUTPUT + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT - uses: rzr/fediverse-action@master with: @@ -25,13 +25,13 @@ jobs: Please see the changelog: ${{ github.event.release.html_url }} - ${{ steps.get_topics.outputs.GITHUB_OUTPUT }} #nfcore #openscience #nextflow #bioinformatics + ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics send-tweet: runs-on: ubuntu-latest steps: - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: python-version: "3.10" - name: Install dependencies diff --git a/.nf-core.yml b/.nf-core.yml index 3805dc81c..d6daa4034 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1 +1,2 @@ repository_type: pipeline +nf_core_version: "2.14.0" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index af57081f6..4dc0f1dcd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,6 +3,9 @@ repos: rev: "v3.1.0" hooks: - id: prettier + additional_dependencies: + - prettier@3.2.5 + - repo: https://github.com/editorconfig-checker/editorconfig-checker.python rev: "2.7.3" hooks: diff --git a/CHANGELOG.md b/CHANGELOG.md index a01e6117e..9b6d5e6a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v3.0.2dev - [date] +## v4.0.0dev - [date] Initial release of nf-core/rnafusion, created with the [nf-core](https://nf-co.re/) template. diff --git a/README.md b/README.md index 805de70e0..5075b862d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) -[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/nf-core/rnafusion) +[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion) [![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) diff --git a/conf/base.config b/conf/base.config index 51042a029..0af2fc0da 100644 --- a/conf/base.config +++ b/conf/base.config @@ -59,7 +59,4 @@ process { errorStrategy = 'retry' maxRetries = 2 } - withName:CUSTOM_DUMPSOFTWAREVERSIONS { - cache = false - } } diff --git a/conf/modules.config b/conf/modules.config index e3ea8fa6c..d203d2b6e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -22,14 +22,6 @@ process { ext.args = '--quiet' } - withName: CUSTOM_DUMPSOFTWAREVERSIONS { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - pattern: '*_versions.yml' - ] - } - withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/conf/test.config b/conf/test.config index 796db260d..d54c7159b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -22,7 +22,7 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' + input = params.pipelines_testdata_base_path + '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 e2522d720..7662ac58d 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -17,7 +17,7 @@ params { // Input data for full size test // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' + input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' // Genome references genome = 'R64-1-1' diff --git a/docs/usage.md b/docs/usage.md index a39d7dc4b..612cb410f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -156,6 +156,8 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) +- `wave` + - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). - `conda` - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. diff --git a/modules.json b/modules.json index 5002e3469..c253f7934 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c", + "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", "installed_by": ["modules"] }, "multiqc": { @@ -26,7 +26,7 @@ }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", "installed_by": ["subworkflows"] }, "utils_nfvalidation_plugin": { diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 9e19a74c5..d79f1c862 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -25,6 +25,11 @@ process FASTQC { def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') + + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // FastQC memory value allowed range (100 - 10000) + def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) + """ printf "%s %s\\n" $rename_to | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name @@ -33,6 +38,7 @@ process FASTQC { fastqc \\ $args \\ --threads $task.cpus \\ + --memory $fastqc_memory \\ $renamed_files cat <<-END_VERSIONS > versions.yml diff --git a/nextflow.config b/nextflow.config index fc563542d..172afb674 100644 --- a/nextflow.config +++ b/nextflow.config @@ -16,7 +16,8 @@ params { genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false - fasta = null// MultiQC options + + // MultiQC options multiqc_config = null multiqc_title = null multiqc_logo = null @@ -24,15 +25,16 @@ params { multiqc_methods_description = null // Boilerplate options - outdir = null - publish_dir_mode = 'copy' - email = null - email_on_fail = null - plaintext_email = false - monochrome_logs = false - hook_url = null - help = false - version = false + outdir = null + publish_dir_mode = 'copy' + email = null + email_on_fail = null + plaintext_email = false + monochrome_logs = false + hook_url = null + help = false + version = false + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' // Config options config_profile_name = null @@ -68,103 +70,109 @@ try { } // Load nf-core/rnafusion custom profiles from different institutions. -// Warning: Uncomment only if a pipeline-specific institutional config already exists on nf-core/configs! -// try { -// includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" -// } catch (Exception e) { -// System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") -// } +try { + includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" +} catch (Exception e) { + System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") +} profiles { debug { - dumpHashes = true - process.beforeScript = 'echo $HOSTNAME' - cleanup = false + dumpHashes = true + process.beforeScript = 'echo $HOSTNAME' + cleanup = false nextflow.enable.configProcessNamesValidation = true } conda { - conda.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - channels = ['conda-forge', 'bioconda', 'defaults'] - apptainer.enabled = false + conda.enabled = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + conda.channels = ['conda-forge', 'bioconda', 'defaults'] + apptainer.enabled = false } mamba { - conda.enabled = true - conda.useMamba = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + conda.enabled = true + conda.useMamba = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } docker { - docker.enabled = true - conda.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false - docker.runOptions = '-u $(id -u):$(id -g)' + docker.enabled = true + conda.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + docker.runOptions = '-u $(id -u):$(id -g)' } arm { - docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' + docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { - singularity.enabled = true - singularity.autoMounts = true - conda.enabled = false - docker.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + singularity.enabled = true + singularity.autoMounts = true + conda.enabled = false + docker.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } podman { - podman.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + podman.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } shifter { - shifter.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + shifter.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } charliecloud { - charliecloud.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - apptainer.enabled = false + charliecloud.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + apptainer.enabled = false } apptainer { - apptainer.enabled = true - apptainer.autoMounts = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false + apptainer.enabled = true + apptainer.autoMounts = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + wave { + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' } gitpod { - executor.name = 'local' - executor.cpus = 4 - executor.memory = 8.GB + executor.name = 'local' + executor.cpus = 4 + executor.memory = 8.GB } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } @@ -231,7 +239,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '3.0.2dev' + version = '4.0.0dev' doi = '' } diff --git a/nextflow_schema.json b/nextflow_schema.json index 025bd65df..91bbdef8c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -265,6 +265,13 @@ "description": "Validation of parameters in lenient more.", "hidden": true, "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." + }, + "pipelines_testdata_base_path": { + "type": "string", + "fa_icon": "far fa-check-circle", + "description": "Base URL or local path to location of pipeline test dataset files", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", + "hidden": true } } } diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 56110621e..000000000 --- a/pyproject.toml +++ /dev/null @@ -1,15 +0,0 @@ -# Config file for Python. Mostly used to configure linting of bin/*.py with Ruff. -# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. -[tool.ruff] -line-length = 120 -target-version = "py38" -cache-dir = "~/.cache/ruff" - -[tool.ruff.lint] -select = ["I", "E1", "E4", "E7", "E9", "F", "UP", "N"] - -[tool.ruff.lint.isort] -known-first-party = ["nf_core"] - -[tool.ruff.lint.per-file-ignores] -"__init__.py" = ["E402", "F401"] diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index c24a3741a..8d187230d 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -140,6 +140,10 @@ workflow PIPELINE_COMPLETION { imNotification(summary_params, hook_url) } } + + workflow.onError { + log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting" + } } /* @@ -230,8 +234,16 @@ def methodsDescriptionText(mqc_methods_yaml) { meta["manifest_map"] = workflow.manifest.toMap() // Pipeline DOI - meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : "" - meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " + if (meta.manifest_map.doi) { + // Using a loop to handle multiple DOIs + // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers + // Removing ` ` since the manifest.doi is a string and not a proper list + def temp_doi_ref = "" + String[] manifest_doi = meta.manifest_map.doi.tokenize(",") + for (String doi_ref: manifest_doi) temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) + } else meta["doi_text"] = "" + meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " // Tool references meta["tool_citations"] = "" diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index a8b55d6fe..14558c392 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -65,9 +65,15 @@ def checkProfileProvided(nextflow_cli_args) { // Citation string for pipeline // def workflowCitation() { + def temp_doi_ref = "" + String[] manifest_doi = workflow.manifest.doi.tokenize(",") + // Using a loop to handle multiple DOIs + // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers + // Removing ` ` since the manifest.doi is a string and not a proper list + for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + - " ${workflow.manifest.doi}\n\n" + + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 62c2cf15c..2b01b6da0 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -40,22 +40,44 @@ workflow RNAFUSION { // Collate and save software versions // softwareVersionsToYAML(ch_versions) - .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_pipeline_software_mqc_versions.yml', sort: true, newLine: true) - .set { ch_collated_versions } + .collectFile( + storeDir: "${params.outdir}/pipeline_info", + name: 'nf_core_pipeline_software_mqc_versions.yml', + sort: true, + newLine: true + ).set { ch_collated_versions } // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description)) - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: false)) + ch_multiqc_config = Channel.fromPath( + "$projectDir/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? + Channel.fromPath(params.multiqc_config, checkIfExists: true) : + Channel.empty() + ch_multiqc_logo = params.multiqc_logo ? + Channel.fromPath(params.multiqc_logo, checkIfExists: true) : + Channel.empty() + + summary_params = paramsSummaryMap( + workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? + file(params.multiqc_methods_description, checkIfExists: true) : + file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description)) + + ch_multiqc_files = ch_multiqc_files.mix( + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) + ch_multiqc_files = ch_multiqc_files.mix( + ch_methods_description.collectFile( + name: 'methods_description_mqc.yaml', + sort: true + ) + ) MULTIQC ( ch_multiqc_files.collect(), From aeca9e2ebe9f9ec7eb0dd84b3907eaf7bf58cb6a Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Thu, 9 May 2024 11:43:56 +0000 Subject: [PATCH 012/887] Template update for nf-core/tools version 2.14.1 --- .github/workflows/linting.yml | 1 - .nf-core.yml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index a3fb25414..1fcafe880 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -20,7 +20,6 @@ jobs: uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 with: python-version: "3.12" - cache: "pip" - name: Install pre-commit run: pip install pre-commit diff --git a/.nf-core.yml b/.nf-core.yml index d6daa4034..e0b85a77f 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,2 +1,2 @@ repository_type: pipeline -nf_core_version: "2.14.0" +nf_core_version: "2.14.1" From 2da759096716c8d2a9e46d200dd5c9ba697c126c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 14 May 2024 10:59:56 +0200 Subject: [PATCH 013/887] add salmon first steps --- modules.json | 10 ++ modules/nf-core/salmon/index/environment.yml | 7 + modules/nf-core/salmon/index/main.nf | 47 +++++ modules/nf-core/salmon/index/meta.yml | 37 ++++ .../nf-core/salmon/index/tests/main.nf.test | 35 ++++ .../salmon/index/tests/main.nf.test.snap | 14 ++ modules/nf-core/salmon/index/tests/tags.yml | 2 + modules/nf-core/salmon/quant/environment.yml | 7 + modules/nf-core/salmon/quant/main.nf | 79 +++++++++ modules/nf-core/salmon/quant/meta.yml | 62 +++++++ .../nf-core/salmon/quant/tests/main.nf.test | 160 ++++++++++++++++++ .../salmon/quant/tests/main.nf.test.snap | 50 ++++++ .../salmon/quant/tests/nextflow.config | 7 + modules/nf-core/salmon/quant/tests/tags.yml | 2 + subworkflows/local/qc_workflow.nf | 5 +- workflows/build_references.nf | 2 + workflows/rnafusion.nf | 1 + 17 files changed, 526 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/salmon/index/environment.yml create mode 100644 modules/nf-core/salmon/index/main.nf create mode 100644 modules/nf-core/salmon/index/meta.yml create mode 100644 modules/nf-core/salmon/index/tests/main.nf.test create mode 100644 modules/nf-core/salmon/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/salmon/index/tests/tags.yml create mode 100644 modules/nf-core/salmon/quant/environment.yml create mode 100644 modules/nf-core/salmon/quant/main.nf create mode 100644 modules/nf-core/salmon/quant/meta.yml create mode 100644 modules/nf-core/salmon/quant/tests/main.nf.test create mode 100644 modules/nf-core/salmon/quant/tests/main.nf.test.snap create mode 100644 modules/nf-core/salmon/quant/tests/nextflow.config create mode 100644 modules/nf-core/salmon/quant/tests/tags.yml diff --git a/modules.json b/modules.json index 23a6ce29f..384c60a53 100644 --- a/modules.json +++ b/modules.json @@ -65,6 +65,16 @@ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, + "salmon/index": { + "branch": "master", + "git_sha": "ffc101e1b84ef3df2e4e4a966e84b3c513ae5693", + "installed_by": ["modules"] + }, + "salmon/quant": { + "branch": "master", + "git_sha": "03a8562231d575c313266c193a980594b941e3ea", + "installed_by": ["modules"] + }, "samtools/faidx": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", diff --git a/modules/nf-core/salmon/index/environment.yml b/modules/nf-core/salmon/index/environment.yml new file mode 100644 index 000000000..a6607d964 --- /dev/null +++ b/modules/nf-core/salmon/index/environment.yml @@ -0,0 +1,7 @@ +name: salmon_index +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::salmon=1.10.1 diff --git a/modules/nf-core/salmon/index/main.nf b/modules/nf-core/salmon/index/main.nf new file mode 100644 index 000000000..88d9cf14a --- /dev/null +++ b/modules/nf-core/salmon/index/main.nf @@ -0,0 +1,47 @@ +process SALMON_INDEX { + tag "$transcript_fasta" + label "process_medium" + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/salmon:1.10.1--h7e5ed60_0' : + 'biocontainers/salmon:1.10.1--h7e5ed60_0' }" + + input: + path genome_fasta + path transcript_fasta + + output: + path "salmon" , emit: index + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def get_decoy_ids = "grep '^>' $genome_fasta | cut -d ' ' -f 1 | cut -d \$'\\t' -f 1 > decoys.txt" + def gentrome = "gentrome.fa" + if (genome_fasta.endsWith('.gz')) { + get_decoy_ids = "grep '^>' <(gunzip -c $genome_fasta) | cut -d ' ' -f 1 | cut -d \$'\\t' -f 1 > decoys.txt" + gentrome = "gentrome.fa.gz" + } + """ + $get_decoy_ids + sed -i.bak -e 's/>//g' decoys.txt + cat $transcript_fasta $genome_fasta > $gentrome + + salmon \\ + index \\ + --threads $task.cpus \\ + -t $gentrome \\ + -d decoys.txt \\ + $args \\ + -i salmon + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/salmon/index/meta.yml b/modules/nf-core/salmon/index/meta.yml new file mode 100644 index 000000000..fd94dd274 --- /dev/null +++ b/modules/nf-core/salmon/index/meta.yml @@ -0,0 +1,37 @@ +name: salmon_index +description: Create index for salmon +keywords: + - index + - fasta + - genome + - reference +tools: + - salmon: + description: | + Salmon is a tool for wicked-fast transcript quantification from RNA-seq data + homepage: https://salmon.readthedocs.io/en/latest/salmon.html + manual: https://salmon.readthedocs.io/en/latest/salmon.html + doi: 10.1038/nmeth.4197 + licence: ["GPL-3.0-or-later"] +input: + - genome_fasta: + type: file + description: Fasta file of the reference genome + - transcriptome_fasta: + type: file + description: Fasta file of the reference transcriptome +output: + - index: + type: directory + description: Folder containing the star index files + pattern: "salmon" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" + - "@drpatelh" +maintainers: + - "@kevinmenden" + - "@drpatelh" diff --git a/modules/nf-core/salmon/index/tests/main.nf.test b/modules/nf-core/salmon/index/tests/main.nf.test new file mode 100644 index 000000000..538b231b4 --- /dev/null +++ b/modules/nf-core/salmon/index/tests/main.nf.test @@ -0,0 +1,35 @@ +nextflow_process { + + name "Test Process SALMON_INDEX" + script "../main.nf" + process "SALMON_INDEX" + tag "modules" + tag "modules_nfcore" + tag "salmon" + tag "salmon/index" + + test("sarscov2") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/genome.fasta", checkIfExists: true)]) + input[1] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.index.get(0)).exists() }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/salmon/index/tests/main.nf.test.snap b/modules/nf-core/salmon/index/tests/main.nf.test.snap new file mode 100644 index 000000000..94edf3903 --- /dev/null +++ b/modules/nf-core/salmon/index/tests/main.nf.test.snap @@ -0,0 +1,14 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,563eeafb4577be0b13801d7021c0bf42" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-11-22T14:26:33.32036" + } +} \ No newline at end of file diff --git a/modules/nf-core/salmon/index/tests/tags.yml b/modules/nf-core/salmon/index/tests/tags.yml new file mode 100644 index 000000000..02997890f --- /dev/null +++ b/modules/nf-core/salmon/index/tests/tags.yml @@ -0,0 +1,2 @@ +salmon/index: + - modules/nf-core/salmon/index/** diff --git a/modules/nf-core/salmon/quant/environment.yml b/modules/nf-core/salmon/quant/environment.yml new file mode 100644 index 000000000..862667241 --- /dev/null +++ b/modules/nf-core/salmon/quant/environment.yml @@ -0,0 +1,7 @@ +name: salmon_quant +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::salmon=1.10.1 diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf new file mode 100644 index 000000000..e115d39cf --- /dev/null +++ b/modules/nf-core/salmon/quant/main.nf @@ -0,0 +1,79 @@ +process SALMON_QUANT { + 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/salmon:1.10.1--h7e5ed60_0' : + 'biocontainers/salmon:1.10.1--h7e5ed60_0' }" + + input: + tuple val(meta), path(reads) + path index + path gtf + path transcript_fasta + val alignment_mode + val lib_type + + output: + tuple val(meta), path("${prefix}") , emit: results + tuple val(meta), path("*info.json"), emit: json_info, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + + def reference = "--index $index" + def reads1 = [], reads2 = [] + meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } + def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" + if (alignment_mode) { + reference = "-t $transcript_fasta" + input_reads = "-a $reads" + } + + def strandedness_opts = [ + 'A', 'U', 'SF', 'SR', + 'IS', 'IU' , 'ISF', 'ISR', + 'OS', 'OU' , 'OSF', 'OSR', + 'MS', 'MU' , 'MSF', 'MSR' + ] + def strandedness = 'A' + if (lib_type) { + if (strandedness_opts.contains(lib_type)) { + strandedness = lib_type + } else { + log.info "[Salmon Quant] Invalid library type specified '--libType=${lib_type}', defaulting to auto-detection with '--libType=A'." + } + } else { + strandedness = meta.single_end ? 'U' : 'IU' + if (meta.strandedness == 'forward') { + strandedness = meta.single_end ? 'SF' : 'ISF' + } else if (meta.strandedness == 'reverse') { + strandedness = meta.single_end ? 'SR' : 'ISR' + } + } + """ + salmon quant \\ + --geneMap $gtf \\ + --threads $task.cpus \\ + --libType=$strandedness \\ + $reference \\ + $input_reads \\ + $args \\ + -o $prefix + + if [ -f $prefix/aux_info/meta_info.json ]; then + cp $prefix/aux_info/meta_info.json "${prefix}_meta_info.json" + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/salmon/quant/meta.yml b/modules/nf-core/salmon/quant/meta.yml new file mode 100644 index 000000000..a2faf589a --- /dev/null +++ b/modules/nf-core/salmon/quant/meta.yml @@ -0,0 +1,62 @@ +name: salmon_quant +description: gene/transcript quantification with Salmon +keywords: + - index + - fasta + - genome + - reference +tools: + - salmon: + description: | + Salmon is a tool for wicked-fast transcript quantification from RNA-seq data + homepage: https://salmon.readthedocs.io/en/latest/salmon.html + manual: https://salmon.readthedocs.io/en/latest/salmon.html + doi: 10.1038/nmeth.4197 + licence: ["GPL-3.0-or-later"] +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 for single-end or paired-end data. + Multiple single-end fastqs or pairs of paired-end fastqs are + handled. + - index: + type: directory + description: Folder containing the star index files + - gtf: + type: file + description: GTF of the reference transcriptome + - transcript_fasta: + type: file + description: Fasta file of the reference transcriptome + - alignment_mode: + type: boolean + description: whether to run salmon in alignment mode + - lib_type: + type: string + description: | + Override library type inferred based on strandedness defined in meta object +output: + - results: + type: directory + description: Folder containing the quantification results for a specific sample + pattern: "${prefix}" + - json_info: + type: file + description: File containing meta information from Salmon quant + pattern: "*info.json" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" + - "@drpatelh" +maintainers: + - "@kevinmenden" + - "@drpatelh" diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test b/modules/nf-core/salmon/quant/tests/main.nf.test new file mode 100644 index 000000000..04e61e2b3 --- /dev/null +++ b/modules/nf-core/salmon/quant/tests/main.nf.test @@ -0,0 +1,160 @@ +nextflow_process { + + name "Test Process SALMON_QUANT" + script "../main.nf" + process "SALMON_QUANT" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "salmon" + tag "salmon/quant" + tag "salmon/index" + + setup { + run("SALMON_INDEX") { + script "../../../salmon/index/main.nf" + process { + """ + input[0] = Channel.of([file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/genome.fasta", checkIfExists: true)]) + input[1] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + """ + } + } + } + + test("sarscov2 - single_end") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end: true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = '' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_single_end") } + ) + } + + } + + test("sarscov2 - single_end lib type A") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end: true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = 'A' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_single_end_lib_type_a") } + ) + } + + } + + test("sarscov2 - pair_end") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end: true ], // meta map + [ + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) + ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = '' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_pair_end") } + ) + } + + } + + test("sarscov2 - pair_end multiple") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test2_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test2_2.fastq.gz", checkIfExists: true) + ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = '' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_pair_end_multiple") } + ) + } + + } +} diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test.snap b/modules/nf-core/salmon/quant/tests/main.nf.test.snap new file mode 100644 index 000000000..a1ec792e0 --- /dev/null +++ b/modules/nf-core/salmon/quant/tests/main.nf.test.snap @@ -0,0 +1,50 @@ +{ + "versions_single_end": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:51:01.865730832" + }, + "versions_pair_end": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-06T17:10:56.121713" + }, + "versions_single_end_lib_type_a": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-06T17:09:14.898351" + }, + "versions_pair_end_multiple": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-06T17:11:07.846643" + } +} \ No newline at end of file diff --git a/modules/nf-core/salmon/quant/tests/nextflow.config b/modules/nf-core/salmon/quant/tests/nextflow.config new file mode 100644 index 000000000..37c082129 --- /dev/null +++ b/modules/nf-core/salmon/quant/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SALMON_QUANT { + ext.args = '--minAssignedFrags 1' + } + +} diff --git a/modules/nf-core/salmon/quant/tests/tags.yml b/modules/nf-core/salmon/quant/tests/tags.yml new file mode 100644 index 000000000..048d81642 --- /dev/null +++ b/modules/nf-core/salmon/quant/tests/tags.yml @@ -0,0 +1,2 @@ +salmon/quant: + - modules/nf-core/salmon/quant/** diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index 6b53358ad..0bc37a601 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -5,9 +5,10 @@ include { PICARD_COLLECTRNASEQMETRICS } from '../../modules/local/picard/collectrnaseqmetrics/main' include { GATK4_MARKDUPLICATES } from '../../modules/nf-core/gatk4/markduplicates/main' include { PICARD_COLLECTINSERTSIZEMETRICS } from '../../modules/nf-core/picard/collectinsertsizemetrics/main' - + include { SALMON_QUANT } from '../../modules/nf-core/salmon/quant/main' workflow QC_WORKFLOW { take: + ch_reads_all ch_bam_sorted ch_bam_sorted_indexed ch_chrgtf @@ -31,6 +32,8 @@ workflow QC_WORKFLOW { ch_versions = ch_versions.mix(PICARD_COLLECTINSERTSIZEMETRICS.out.versions) ch_insertsize_metrics = Channel.empty().mix(PICARD_COLLECTINSERTSIZEMETRICS.out.metrics) + SALMON_QUANT(ch_reads_all, salmon_index, ch_chrgtf.map { meta, gtf -> [ gtf ]}, transcript_fasta, true, '') + emit: versions = ch_versions diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 7847dd055..151849820 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -24,6 +24,7 @@ include { SAMTOOLS_FAIDX } from '../modules/nf-core/samtools/fa include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genomegenerate/main' include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' +include { SALMON_INDEX } from '../modules/nf-core/salmon/index/main' /* ======================================================================================== @@ -47,6 +48,7 @@ workflow BUILD_REFERENCES { GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) + SALMON_INDEX(ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf) if (params.starindex || params.all || params.starfusion || params.arriba) { STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf ) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 7483f1be5..0c23a15c1 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -199,6 +199,7 @@ workflow RNAFUSION { //QC QC_WORKFLOW ( + ch_reads_all, STARFUSION_WORKFLOW.out.ch_bam_sorted, STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, ch_chrgtf, From 89ade662e07eb87a3e27fcc008cfbc8693ff79c0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 14 May 2024 11:16:24 +0200 Subject: [PATCH 014/887] remove samplesheet check conf --- conf/modules.config | 8 -------- 1 file changed, 8 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9d4ca62b1..965b31335 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -172,14 +172,6 @@ process { ] } - withName: 'SAMPLESHEET_CHECK' { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: 'SAMTOOLS_FAIDX' { publishDir = [ path: { "${params.genomes_base}/ensembl" }, From 71f8caf804f757b73523a30ef44c558fef5d26a7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 10:37:47 +0200 Subject: [PATCH 015/887] tests --- conf/modules.config | 9 +++ modules.json | 10 +++ modules/local/ensembl/main.nf | 10 ++- modules/local/gffread.nf | 50 +++++++++++++ modules/nf-core/gunzip/environment.yml | 7 ++ modules/nf-core/gunzip/main.nf | 48 +++++++++++++ modules/nf-core/gunzip/meta.yml | 39 ++++++++++ modules/nf-core/gunzip/tests/main.nf.test | 36 ++++++++++ .../nf-core/gunzip/tests/main.nf.test.snap | 31 ++++++++ modules/nf-core/gunzip/tests/tags.yml | 2 + .../rsem/preparereference/environment.yml | 8 +++ modules/nf-core/rsem/preparereference/main.nf | 72 +++++++++++++++++++ .../nf-core/rsem/preparereference/meta.yml | 42 +++++++++++ .../rsem/preparereference/tests/main.nf.test | 32 +++++++++ .../preparereference/tests/main.nf.test.snap | 35 +++++++++ workflows/build_references.nf | 72 ++++++++++--------- 16 files changed, 468 insertions(+), 35 deletions(-) create mode 100644 modules/local/gffread.nf create mode 100644 modules/nf-core/gunzip/environment.yml create mode 100644 modules/nf-core/gunzip/main.nf create mode 100644 modules/nf-core/gunzip/meta.yml create mode 100644 modules/nf-core/gunzip/tests/main.nf.test create mode 100644 modules/nf-core/gunzip/tests/main.nf.test.snap create mode 100644 modules/nf-core/gunzip/tests/tags.yml create mode 100644 modules/nf-core/rsem/preparereference/environment.yml create mode 100644 modules/nf-core/rsem/preparereference/main.nf create mode 100644 modules/nf-core/rsem/preparereference/meta.yml create mode 100644 modules/nf-core/rsem/preparereference/tests/main.nf.test create mode 100644 modules/nf-core/rsem/preparereference/tests/main.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index 9d4ca62b1..bef67c2ca 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -122,6 +122,15 @@ process { ] } + withName: 'GFFREAD' { + ext.args = { '-w' } + publishDir = [ + path: { "${params.genomes_base}/gffread" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: 'GTF_TO_REFFLAT' { publishDir = [ path: { "${params.genomes_base}/ensembl" }, diff --git a/modules.json b/modules.json index 384c60a53..cb364b688 100644 --- a/modules.json +++ b/modules.json @@ -50,6 +50,11 @@ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, + "gunzip": { + "branch": "master", + "git_sha": "3a5fef109d113b4997c9822198664ca5f2716208", + "installed_by": ["modules"] + }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", @@ -65,6 +70,11 @@ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, + "rsem/preparereference": { + "branch": "master", + "git_sha": "301b088c7e9e00c4c80686411383f07173b54d69", + "installed_by": ["modules"] + }, "salmon/index": { "branch": "master", "git_sha": "ffc101e1b84ef3df2e4e4a966e84b3c513ae5693", diff --git a/modules/local/ensembl/main.nf b/modules/local/ensembl/main.nf index 4a782c0df..90ef0e470 100644 --- a/modules/local/ensembl/main.nf +++ b/modules/local/ensembl/main.nf @@ -17,7 +17,10 @@ process ENSEMBL_DOWNLOAD { tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.gtf") , emit: gtf tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.chr.gtf") , emit: chrgtf tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.cdna.all.fa.gz"), emit: transcript - path "versions.yml" , emit: versions + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz"), emit: primary_assembly + tuple val(meta), path("gencode.v37.primary_assembly.annotation.gtf"), emit: primary_assembly_gtf + + path "versions.yml" , emit: versions script: @@ -28,12 +31,13 @@ process ENSEMBL_DOWNLOAD { wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${params.genome}.${ensembl_version}.gtf.gz wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf.gz wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/cdna/Homo_sapiens.${params.genome}.cdna.all.fa.gz -O Homo_sapiens.${params.genome}.${ensembl_version}.cdna.all.fa.gz - + wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${params.genome}.dna.primary_assembly.fa.gz -O Homo_sapiens.${params.genome}.${ensembl_version}.dna.primary_assembly.fa.gz + wget https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_37/gencode.v37.primary_assembly.annotation.gtf.gz gunzip -c Homo_sapiens.${params.genome}.dna.chromosome.* > Homo_sapiens.${params.genome}.${ensembl_version}.all.fa gunzip Homo_sapiens.${params.genome}.${ensembl_version}.gtf.gz gunzip Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf.gz - + gunzip gencode.v37.primary_assembly.annotation.gtf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/gffread.nf b/modules/local/gffread.nf new file mode 100644 index 000000000..98863efa5 --- /dev/null +++ b/modules/local/gffread.nf @@ -0,0 +1,50 @@ +process GFFREAD { + tag "$gff" + label 'process_low' + + conda "bioconda::gffread=0.12.1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gffread:0.12.1--h8b12597_0' : + 'biocontainers/gffread:0.12.1--h8b12597_0' }" + + input: + tuple val(meta), path(gff) + tuple val(meta2), path(fasta), path(fai) + + output: + path "*_gffread_output.gtf", emit: gtf, optional: true + path "*_gffread_output.fa" , emit: tr_fasta, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def genome = fasta ? "-g ${fasta}" : '' + def prefix = task.ext.prefix ?: "${meta.id}" + def outp = args.contains("-w") ? "-w ${prefix}_gffread_output.fa" : "-o ${prefix}_gffread_output.gtf" + + """ + gffread \\ + $gff \\ + $genome \\ + $outp + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}_gffread" + """ + touch ${prefix}_gffread_output.gtf + touch ${prefix}_gffread_output.fa + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ +} diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml new file mode 100644 index 000000000..25910b340 --- /dev/null +++ b/modules/nf-core/gunzip/environment.yml @@ -0,0 +1,7 @@ +name: gunzip +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - conda-forge::sed=4.7 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf new file mode 100644 index 000000000..468a6f287 --- /dev/null +++ b/modules/nf-core/gunzip/main.nf @@ -0,0 +1,48 @@ +process GUNZIP { + tag "$archive" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : + 'nf-core/ubuntu:20.04' }" + + input: + tuple val(meta), path(archive) + + output: + tuple val(meta), path("$gunzip"), emit: gunzip + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + gunzip = archive.toString() - '.gz' + """ + # Not calling gunzip itself because it creates files + # with the original group ownership rather than the + # default one for that user / the work directory + gzip \\ + -cd \\ + $args \\ + $archive \\ + > $gunzip + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ + + stub: + gunzip = archive.toString() - '.gz' + """ + touch $gunzip + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml new file mode 100644 index 000000000..231034f2f --- /dev/null +++ b/modules/nf-core/gunzip/meta.yml @@ -0,0 +1,39 @@ +name: gunzip +description: Compresses and decompresses files. +keywords: + - gunzip + - compression + - decompression +tools: + - gunzip: + description: | + gzip is a file format and a software application used for file compression and decompression. + documentation: https://www.gnu.org/software/gzip/manual/gzip.html + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Optional groovy Map containing meta information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" +output: + - gunzip: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test new file mode 100644 index 000000000..6406008ef --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -0,0 +1,36 @@ +nextflow_process { + + name "Test Process GUNZIP" + script "../main.nf" + process "GUNZIP" + tag "gunzip" + tag "modules_nfcore" + tag "modules" + + test("Should run without failures") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap new file mode 100644 index 000000000..720fd9ff4 --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -0,0 +1,31 @@ +{ + "Should run without failures": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "timestamp": "2023-10-17T15:35:37.690477896" + } +} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml new file mode 100644 index 000000000..fd3f69154 --- /dev/null +++ b/modules/nf-core/gunzip/tests/tags.yml @@ -0,0 +1,2 @@ +gunzip: + - modules/nf-core/gunzip/** diff --git a/modules/nf-core/rsem/preparereference/environment.yml b/modules/nf-core/rsem/preparereference/environment.yml new file mode 100644 index 000000000..c80e69106 --- /dev/null +++ b/modules/nf-core/rsem/preparereference/environment.yml @@ -0,0 +1,8 @@ +name: rsem_preparereference +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::rsem=1.3.3 + - bioconda::star=2.7.10a diff --git a/modules/nf-core/rsem/preparereference/main.nf b/modules/nf-core/rsem/preparereference/main.nf new file mode 100644 index 000000000..44f76ebd6 --- /dev/null +++ b/modules/nf-core/rsem/preparereference/main.nf @@ -0,0 +1,72 @@ +process RSEM_PREPAREREFERENCE { + tag "$fasta" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-cf0123ef83b3c38c13e3b0696a3f285d3f20f15b:64aad4a4e144878400649e71f42105311be7ed87-0' : + 'biocontainers/mulled-v2-cf0123ef83b3c38c13e3b0696a3f285d3f20f15b:64aad4a4e144878400649e71f42105311be7ed87-0' }" + + input: + path fasta, stageAs: "rsem/*" + path gtf + + output: + path "rsem" , emit: index + path "*transcripts.fa", emit: transcript_fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def args_list = args.tokenize() + if (args_list.contains('--star')) { + args_list.removeIf { it.contains('--star') } + def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' + """ + STAR \\ + --runMode genomeGenerate \\ + --genomeDir rsem/ \\ + --genomeFastaFiles $fasta \\ + --sjdbGTFfile $gtf \\ + --runThreadN $task.cpus \\ + $memory \\ + $args2 + + rsem-prepare-reference \\ + --gtf $gtf \\ + --num-threads $task.cpus \\ + ${args_list.join(' ')} \\ + $fasta \\ + rsem/genome + + cp rsem/genome.transcripts.fa . + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") + star: \$(STAR --version | sed -e "s/STAR_//g") + END_VERSIONS + """ + } else { + """ + rsem-prepare-reference \\ + --gtf $gtf \\ + --num-threads $task.cpus \\ + $args \\ + $fasta \\ + rsem/genome + + cp rsem/genome.transcripts.fa . + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") + star: \$(STAR --version | sed -e "s/STAR_//g") + END_VERSIONS + """ + } +} diff --git a/modules/nf-core/rsem/preparereference/meta.yml b/modules/nf-core/rsem/preparereference/meta.yml new file mode 100644 index 000000000..05aa44fe6 --- /dev/null +++ b/modules/nf-core/rsem/preparereference/meta.yml @@ -0,0 +1,42 @@ +name: rsem_preparereference +description: Prepare a reference genome for RSEM +keywords: + - rsem + - genome + - index +tools: + - rseqc: + description: | + RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome + homepage: https://github.com/deweylab/RSEM + documentation: https://github.com/deweylab/RSEM + doi: 10.1186/1471-2105-12-323 + licence: ["GPL-3.0-or-later"] +input: + - fasta: + type: file + description: The Fasta file of the reference genome + pattern: "*.{fasta,fa}" + - gtf: + type: file + description: The GTF file of the reference genome + pattern: "*.gtf" +output: + - rsem: + type: directory + description: RSEM index directory + pattern: "rsem" + - transcript_fasta: + type: file + description: Fasta file of transcripts + pattern: "rsem/*transcripts.fa" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@kevinmenden" +maintainers: + - "@drpatelh" + - "@kevinmenden" diff --git a/modules/nf-core/rsem/preparereference/tests/main.nf.test b/modules/nf-core/rsem/preparereference/tests/main.nf.test new file mode 100644 index 000000000..4353d4d9b --- /dev/null +++ b/modules/nf-core/rsem/preparereference/tests/main.nf.test @@ -0,0 +1,32 @@ +nextflow_process { + + name "Test Process RSEM_PREPAREREFERENCE" + script "../main.nf" + process "RSEM_PREPAREREFERENCE" + + test("homo_sapiens") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.index).match("index")}, + { assert snapshot(process.out.transcript_fasta).match("transcript_fasta")}, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + +} diff --git a/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap b/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap new file mode 100644 index 000000000..02510659a --- /dev/null +++ b/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,517611c42f6354d3609db1b35fffa397" + ] + ], + "timestamp": "2023-11-22T13:16:49.170587" + }, + "index": { + "content": [ + [ + [ + "genome.chrlist:md5,b190587cae0531f3cf25552d8aa674db", + "genome.fasta:md5,f315020d899597c1b57e5fe9f60f4c3e", + "genome.grp:md5,c2848a8b6d495956c11ec53efc1de67e", + "genome.idx.fa:md5,050c521a2719c2ae48267c1e65218f29", + "genome.n2g.idx.fa:md5,050c521a2719c2ae48267c1e65218f29", + "genome.seq:md5,94da0c6b88c33e63c9a052a11f4f57c1", + "genome.ti:md5,c9e4ae8d4d13a504eec2acf1b8589a66", + "genome.transcripts.fa:md5,050c521a2719c2ae48267c1e65218f29" + ] + ] + ], + "timestamp": "2023-11-22T13:16:49.140398" + }, + "transcript_fasta": { + "content": [ + [ + "genome.transcripts.fa:md5,050c521a2719c2ae48267c1e65218f29" + ] + ], + "timestamp": "2023-11-22T13:16:49.159946" + } +} \ No newline at end of file diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 151849820..293f00482 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -25,7 +25,9 @@ include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genome include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' include { SALMON_INDEX } from '../modules/nf-core/salmon/index/main' - +include { RSEM_PREPAREREFERENCE } from '../modules/nf-core/rsem/preparereference' +include { GFFREAD } from '../modules/local/gffread' + include { GUNZIP } from '../modules/nf-core/gunzip/main' /* ======================================================================================== RUN MAIN WORKFLOW @@ -37,48 +39,54 @@ workflow BUILD_REFERENCES { def fake_meta = [:] fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" ENSEMBL_DOWNLOAD( params.ensembl_version, params.genome, fake_meta ) - HGNC_DOWNLOAD( ) + // HGNC_DOWNLOAD( ) + GUNZIP(ENSEMBL_DOWNLOAD.out.primary_assembly) + + + SAMTOOLS_FAIDX(GUNZIP.out.gunzip, [[],[]]) + // GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) + // RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) + // CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) - SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.fasta, [[],[]]) - GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) + // GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) - RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) - CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) + ch_fasta_fai =(GUNZIP.out.gunzip).join(SAMTOOLS_FAIDX.out.fai) + GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ch_fasta_fai) + SALMON_INDEX(GUNZIP.out.gunzip.map { meta, fasta -> [ fasta ] }, GFFREAD.out.tr_fasta) - GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) + // RSEM_PREPAREREFERENCE(ENSEMBL_DOWNLOAD.out.fasta.map { meta, fasta -> [ fasta ] }, ENSEMBL_DOWNLOAD.out.gtf.map { meta, gtf -> [ gtf ] }) - SALMON_INDEX(ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf) - if (params.starindex || params.all || params.starfusion || params.arriba) { - STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf ) - } + // if (params.starindex || params.all || params.starfusion || params.arriba) { + // STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf ) + // } - if (params.arriba || params.all) { - ARRIBA_DOWNLOAD() - } + // if (params.arriba || params.all) { + // ARRIBA_DOWNLOAD() + // } - if (params.fusioncatcher || params.all) { - FUSIONCATCHER_DOWNLOAD() - } + // if (params.fusioncatcher || params.all) { + // FUSIONCATCHER_DOWNLOAD() + // } - if (params.starfusion || params.all) { - if (params.starfusion_build){ - STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.chrgtf ) - } else { - STARFUSION_DOWNLOAD() - } - } + // if (params.starfusion || params.all) { + // if (params.starfusion_build){ + // STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.chrgtf ) + // } else { + // STARFUSION_DOWNLOAD() + // } + // } - if (params.starfusion_build){ - GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.chrgtf) - } else { - GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.chrgtf) - } + // if (params.starfusion_build){ + // GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.chrgtf) + // } else { + // GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.chrgtf) + // } - if (params.fusionreport || params.all) { - FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) - } + // if (params.fusionreport || params.all) { + // FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) + // } } From 0a87206220786b38cf712d32af3e82f07145cbd5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 11:08:05 +0200 Subject: [PATCH 016/887] update --- modules.json | 118 +++++--- modules/nf-core/gffread/environment.yml | 7 + modules/nf-core/gffread/main.nf | 60 ++++ modules/nf-core/gffread/meta.yml | 55 ++++ modules/nf-core/gffread/tests/main.nf.test | 223 ++++++++++++++ .../nf-core/gffread/tests/main.nf.test.snap | 272 ++++++++++++++++++ .../gffread/tests/nextflow-fasta.config | 5 + .../gffread/tests/nextflow-gff3.config | 5 + modules/nf-core/gffread/tests/nextflow.config | 5 + modules/nf-core/gffread/tests/tags.yml | 2 + .../rsem/preparereference/environment.yml | 8 - modules/nf-core/rsem/preparereference/main.nf | 72 ----- .../nf-core/rsem/preparereference/meta.yml | 42 --- .../rsem/preparereference/tests/main.nf.test | 32 --- .../preparereference/tests/main.nf.test.snap | 35 --- workflows/build_references.nf | 3 +- 16 files changed, 721 insertions(+), 223 deletions(-) create mode 100644 modules/nf-core/gffread/environment.yml create mode 100644 modules/nf-core/gffread/main.nf create mode 100644 modules/nf-core/gffread/meta.yml create mode 100644 modules/nf-core/gffread/tests/main.nf.test create mode 100644 modules/nf-core/gffread/tests/main.nf.test.snap create mode 100644 modules/nf-core/gffread/tests/nextflow-fasta.config create mode 100644 modules/nf-core/gffread/tests/nextflow-gff3.config create mode 100644 modules/nf-core/gffread/tests/nextflow.config create mode 100644 modules/nf-core/gffread/tests/tags.yml delete mode 100644 modules/nf-core/rsem/preparereference/environment.yml delete mode 100644 modules/nf-core/rsem/preparereference/main.nf delete mode 100644 modules/nf-core/rsem/preparereference/meta.yml delete mode 100644 modules/nf-core/rsem/preparereference/tests/main.nf.test delete mode 100644 modules/nf-core/rsem/preparereference/tests/main.nf.test.snap diff --git a/modules.json b/modules.json index cb364b688..4aa2ebe57 100644 --- a/modules.json +++ b/modules.json @@ -8,122 +8,170 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba": { "branch": "master", "git_sha": "ea9e2892a9d12e8769402f12096219942bcf6536", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/fastq": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastp": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "gffread": { + "branch": "master", + "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", + "installed_by": [ + "modules" + ] }, "gunzip": { "branch": "master", "git_sha": "3a5fef109d113b4997c9822198664ca5f2716208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "rsem/preparereference": { - "branch": "master", - "git_sha": "301b088c7e9e00c4c80686411383f07173b54d69", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/index": { "branch": "master", "git_sha": "ffc101e1b84ef3df2e4e4a966e84b3c513ae5693", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/quant": { "branch": "master", "git_sha": "03a8562231d575c313266c193a980594b941e3ea", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "5394565c5fe4c760e5b35977ec7607c62e81d1f8", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/align": { "branch": "master", "git_sha": "9f6b233518f7d9ecdcf24b798b7e491db5424273", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/genomegenerate": { "branch": "master", "git_sha": "0e98289b5bec6e3f8f588a8a9d05e8aacc1179a0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/merge": { "branch": "master", "git_sha": "b0dcb44b018d9b2bcb35b1abb7bcd34061bc5a6d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/stringtie": { "branch": "master", "git_sha": "b0dcb44b018d9b2bcb35b1abb7bcd34061bc5a6d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -132,20 +180,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "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/gffread/environment.yml b/modules/nf-core/gffread/environment.yml new file mode 100644 index 000000000..c6df58ad0 --- /dev/null +++ b/modules/nf-core/gffread/environment.yml @@ -0,0 +1,7 @@ +name: gffread +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gffread=0.12.7 diff --git a/modules/nf-core/gffread/main.nf b/modules/nf-core/gffread/main.nf new file mode 100644 index 000000000..da55cbab7 --- /dev/null +++ b/modules/nf-core/gffread/main.nf @@ -0,0 +1,60 @@ +process GFFREAD { + 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/gffread:0.12.7--hdcf5f25_4' : + 'biocontainers/gffread:0.12.7--hdcf5f25_4' }" + + input: + tuple val(meta), path(gff) + path fasta + + output: + tuple val(meta), path("*.gtf") , emit: gtf , optional: true + tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true + tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def fasta_arg = fasta ? "-g $fasta" : '' + def output_name = "${prefix}.${extension}" + def output = extension == "fasta" ? "$output_name" : "-o $output_name" + def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() + // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + gffread \\ + $gff \\ + $fasta_arg \\ + $args_sorted \\ + $output + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def output_name = "${prefix}.${extension}" + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch $output_name + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ +} diff --git a/modules/nf-core/gffread/meta.yml b/modules/nf-core/gffread/meta.yml new file mode 100644 index 000000000..c06028208 --- /dev/null +++ b/modules/nf-core/gffread/meta.yml @@ -0,0 +1,55 @@ +name: gffread +description: Validate, filter, convert and perform various other operations on GFF files +keywords: + - gff + - conversion + - validation +tools: + - gffread: + description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. + homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + tool_dev_url: https://github.com/gpertea/gffread + doi: 10.12688/f1000research.23297.1 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gff: + type: file + description: A reference file in either the GFF3, GFF2 or GTF format. + pattern: "*.{gff, gtf}" + - fasta: + type: file + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" +output: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gtf: + type: file + description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present + pattern: "*.{gtf}" + - gffread_gff: + type: file + description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent + pattern: "*.gff3" + - gffread_fasta: + type: file + description: Fasta file produced when either of '-w', '-x', '-y' parameters is present + pattern: "*.fasta" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@edmundmiller" +maintainers: + - "@edmundmiller" + - "@gallvp" diff --git a/modules/nf-core/gffread/tests/main.nf.test b/modules/nf-core/gffread/tests/main.nf.test new file mode 100644 index 000000000..4cd13dcd3 --- /dev/null +++ b/modules/nf-core/gffread/tests/main.nf.test @@ -0,0 +1,223 @@ +nextflow_process { + + name "Test Process GFFREAD" + script "../main.nf" + process "GFFREAD" + + tag "gffread" + tag "modules_nfcore" + tag "modules" + + test("sarscov2-gff3-gtf") { + + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gtf-stub") { + + options '-stub' + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3") { + + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3-stub") { + + options '-stub' + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-fasta") { + + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-stub") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-fail-catch") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'genome'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert ! process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/nf-core/gffread/tests/main.nf.test.snap b/modules/nf-core/gffread/tests/main.nf.test.snap new file mode 100644 index 000000000..15262320d --- /dev/null +++ b/modules/nf-core/gffread/tests/main.nf.test.snap @@ -0,0 +1,272 @@ +{ + "sarscov2-gff3-gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:48:56.496187" + }, + "sarscov2-gff3-gff3": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:49:00.892782" + }, + "sarscov2-gff3-gtf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:26.975666" + }, + "sarscov2-gff3-fasta-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:44.34792" + }, + "sarscov2-gff3-gff3-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:35.221671" + }, + "sarscov2-gff3-fasta": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:54:02.88143" + } +} \ No newline at end of file diff --git a/modules/nf-core/gffread/tests/nextflow-fasta.config b/modules/nf-core/gffread/tests/nextflow-fasta.config new file mode 100644 index 000000000..ac6cb1484 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow-fasta.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-w -S' + } +} diff --git a/modules/nf-core/gffread/tests/nextflow-gff3.config b/modules/nf-core/gffread/tests/nextflow-gff3.config new file mode 100644 index 000000000..afe0830e5 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow-gff3.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '' + } +} diff --git a/modules/nf-core/gffread/tests/nextflow.config b/modules/nf-core/gffread/tests/nextflow.config new file mode 100644 index 000000000..74b25094f --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-T' + } +} diff --git a/modules/nf-core/gffread/tests/tags.yml b/modules/nf-core/gffread/tests/tags.yml new file mode 100644 index 000000000..055760656 --- /dev/null +++ b/modules/nf-core/gffread/tests/tags.yml @@ -0,0 +1,2 @@ +gffread: + - modules/nf-core/gffread/** diff --git a/modules/nf-core/rsem/preparereference/environment.yml b/modules/nf-core/rsem/preparereference/environment.yml deleted file mode 100644 index c80e69106..000000000 --- a/modules/nf-core/rsem/preparereference/environment.yml +++ /dev/null @@ -1,8 +0,0 @@ -name: rsem_preparereference -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::rsem=1.3.3 - - bioconda::star=2.7.10a diff --git a/modules/nf-core/rsem/preparereference/main.nf b/modules/nf-core/rsem/preparereference/main.nf deleted file mode 100644 index 44f76ebd6..000000000 --- a/modules/nf-core/rsem/preparereference/main.nf +++ /dev/null @@ -1,72 +0,0 @@ -process RSEM_PREPAREREFERENCE { - tag "$fasta" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-cf0123ef83b3c38c13e3b0696a3f285d3f20f15b:64aad4a4e144878400649e71f42105311be7ed87-0' : - 'biocontainers/mulled-v2-cf0123ef83b3c38c13e3b0696a3f285d3f20f15b:64aad4a4e144878400649e71f42105311be7ed87-0' }" - - input: - path fasta, stageAs: "rsem/*" - path gtf - - output: - path "rsem" , emit: index - path "*transcripts.fa", emit: transcript_fasta - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - def args_list = args.tokenize() - if (args_list.contains('--star')) { - args_list.removeIf { it.contains('--star') } - def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' - """ - STAR \\ - --runMode genomeGenerate \\ - --genomeDir rsem/ \\ - --genomeFastaFiles $fasta \\ - --sjdbGTFfile $gtf \\ - --runThreadN $task.cpus \\ - $memory \\ - $args2 - - rsem-prepare-reference \\ - --gtf $gtf \\ - --num-threads $task.cpus \\ - ${args_list.join(' ')} \\ - $fasta \\ - rsem/genome - - cp rsem/genome.transcripts.fa . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS - """ - } else { - """ - rsem-prepare-reference \\ - --gtf $gtf \\ - --num-threads $task.cpus \\ - $args \\ - $fasta \\ - rsem/genome - - cp rsem/genome.transcripts.fa . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS - """ - } -} diff --git a/modules/nf-core/rsem/preparereference/meta.yml b/modules/nf-core/rsem/preparereference/meta.yml deleted file mode 100644 index 05aa44fe6..000000000 --- a/modules/nf-core/rsem/preparereference/meta.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: rsem_preparereference -description: Prepare a reference genome for RSEM -keywords: - - rsem - - genome - - index -tools: - - rseqc: - description: | - RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome - homepage: https://github.com/deweylab/RSEM - documentation: https://github.com/deweylab/RSEM - doi: 10.1186/1471-2105-12-323 - licence: ["GPL-3.0-or-later"] -input: - - fasta: - type: file - description: The Fasta file of the reference genome - pattern: "*.{fasta,fa}" - - gtf: - type: file - description: The GTF file of the reference genome - pattern: "*.gtf" -output: - - rsem: - type: directory - description: RSEM index directory - pattern: "rsem" - - transcript_fasta: - type: file - description: Fasta file of transcripts - pattern: "rsem/*transcripts.fa" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@kevinmenden" -maintainers: - - "@drpatelh" - - "@kevinmenden" diff --git a/modules/nf-core/rsem/preparereference/tests/main.nf.test b/modules/nf-core/rsem/preparereference/tests/main.nf.test deleted file mode 100644 index 4353d4d9b..000000000 --- a/modules/nf-core/rsem/preparereference/tests/main.nf.test +++ /dev/null @@ -1,32 +0,0 @@ -nextflow_process { - - name "Test Process RSEM_PREPAREREFERENCE" - script "../main.nf" - process "RSEM_PREPAREREFERENCE" - - test("homo_sapiens") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) - input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.index).match("index")}, - { assert snapshot(process.out.transcript_fasta).match("transcript_fasta")}, - { assert snapshot(process.out.versions).match("versions") } - ) - } - - } - -} diff --git a/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap b/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap deleted file mode 100644 index 02510659a..000000000 --- a/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap +++ /dev/null @@ -1,35 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,517611c42f6354d3609db1b35fffa397" - ] - ], - "timestamp": "2023-11-22T13:16:49.170587" - }, - "index": { - "content": [ - [ - [ - "genome.chrlist:md5,b190587cae0531f3cf25552d8aa674db", - "genome.fasta:md5,f315020d899597c1b57e5fe9f60f4c3e", - "genome.grp:md5,c2848a8b6d495956c11ec53efc1de67e", - "genome.idx.fa:md5,050c521a2719c2ae48267c1e65218f29", - "genome.n2g.idx.fa:md5,050c521a2719c2ae48267c1e65218f29", - "genome.seq:md5,94da0c6b88c33e63c9a052a11f4f57c1", - "genome.ti:md5,c9e4ae8d4d13a504eec2acf1b8589a66", - "genome.transcripts.fa:md5,050c521a2719c2ae48267c1e65218f29" - ] - ] - ], - "timestamp": "2023-11-22T13:16:49.140398" - }, - "transcript_fasta": { - "content": [ - [ - "genome.transcripts.fa:md5,050c521a2719c2ae48267c1e65218f29" - ] - ], - "timestamp": "2023-11-22T13:16:49.159946" - } -} \ No newline at end of file diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 293f00482..db28c2a8a 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -25,9 +25,8 @@ include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genome include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' include { SALMON_INDEX } from '../modules/nf-core/salmon/index/main' -include { RSEM_PREPAREREFERENCE } from '../modules/nf-core/rsem/preparereference' include { GFFREAD } from '../modules/local/gffread' - include { GUNZIP } from '../modules/nf-core/gunzip/main' +include { GUNZIP } from '../modules/nf-core/gunzip/main' /* ======================================================================================== RUN MAIN WORKFLOW From 3be24cb69c63573a922da61a49a7bc85dbbbe301 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 11:09:28 +0200 Subject: [PATCH 017/887] fix merge conflicts --- modules.json | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/modules.json b/modules.json index 52ca63ff1..b9ae28bac 100644 --- a/modules.json +++ b/modules.json @@ -42,15 +42,8 @@ }, "fastqc": { "branch": "master", -<<<<<<< HEAD - "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c", - "installed_by": [ - "modules" - ] -======= "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", "installed_by": ["modules"] ->>>>>>> 973ee3ba5bd0fa00178dcfb917bb8cfab36d0243 }, "gatk4/bedtointervallist": { "branch": "master", @@ -212,4 +205,4 @@ } } } -} \ No newline at end of file +} From 002b9288486488f19f15523b138757cda7eec1f5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 13:25:21 +0200 Subject: [PATCH 018/887] cleanup --- conf/modules.config | 16 +++ modules.json | 119 ++++----------- modules/local/ensembl/main.nf | 32 ++--- modules/nf-core/salmon/index/main.nf | 25 ++++ .../nf-core/salmon/index/tests/main.nf.test | 24 ++++ .../salmon/index/tests/main.nf.test.snap | 12 ++ modules/nf-core/salmon/quant/main.nf | 12 ++ .../nf-core/salmon/quant/tests/main.nf.test | 136 ++++++++++++++++++ .../salmon/quant/tests/main.nf.test.snap | 75 ++++++++++ nextflow.config | 1 + nextflow_schema.json | 5 + workflows/build_references.nf | 93 ++++++------ workflows/rnafusion.nf | 7 + 13 files changed, 399 insertions(+), 158 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 75b957ec8..696889c8e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -181,6 +181,22 @@ process { ] } + withName: 'SALMON_INDEX' { + publishDir = [ + path: { "${params.genomes_base}/salmon" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: 'SALMON_QUANT' { + publishDir = [ + path: { "${params.outdir}/salmon" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: 'SAMTOOLS_FAIDX' { publishDir = [ path: { "${params.genomes_base}/ensembl" }, diff --git a/modules.json b/modules.json index b9ae28bac..4157b3177 100644 --- a/modules.json +++ b/modules.json @@ -8,37 +8,27 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba": { "branch": "master", - "git_sha": "ea9e2892a9d12e8769402f12096219942bcf6536", - "installed_by": [ - "modules" - ] + "git_sha": "bbaeb3a3149def237b9d0acb9ab749ae98088e29", + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "git_sha": "02fd5bd7275abad27aad32d5c852e0a9b1b98882", + "installed_by": ["modules"] }, "fastp": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", @@ -48,128 +38,92 @@ "gatk4/bedtointervallist": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gffread": { "branch": "master", "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gunzip": { "branch": "master", "git_sha": "3a5fef109d113b4997c9822198664ca5f2716208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/index": { "branch": "master", - "git_sha": "ffc101e1b84ef3df2e4e4a966e84b3c513ae5693", - "installed_by": [ - "modules" - ] + "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", + "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", - "git_sha": "03a8562231d575c313266c193a980594b941e3ea", - "installed_by": [ - "modules" - ] + "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "5394565c5fe4c760e5b35977ec7607c62e81d1f8", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/align": { "branch": "master", "git_sha": "9f6b233518f7d9ecdcf24b798b7e491db5424273", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", "git_sha": "0e98289b5bec6e3f8f588a8a9d05e8aacc1179a0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", - "git_sha": "b0dcb44b018d9b2bcb35b1abb7bcd34061bc5a6d", - "installed_by": [ - "modules" - ] + "git_sha": "5756b12b1fab0c07f05b9ad2d5d5c262b1a2c1ef", + "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "b0dcb44b018d9b2bcb35b1abb7bcd34061bc5a6d", - "installed_by": [ - "modules" - ] + "git_sha": "b1b959609bda44341120aed1766329909f54b8d0", + "installed_by": ["modules"] } } }, @@ -178,28 +132,17 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", -<<<<<<< HEAD - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": [ - "subworkflows" - ] -======= "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", "installed_by": ["subworkflows"] ->>>>>>> 973ee3ba5bd0fa00178dcfb917bb8cfab36d0243 }, "utils_nfvalidation_plugin": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } diff --git a/modules/local/ensembl/main.nf b/modules/local/ensembl/main.nf index 90ef0e470..8297e2901 100644 --- a/modules/local/ensembl/main.nf +++ b/modules/local/ensembl/main.nf @@ -13,48 +13,40 @@ process ENSEMBL_DOWNLOAD { val meta output: - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.all.fa") , emit: fasta - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.gtf") , emit: gtf - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.chr.gtf") , emit: chrgtf - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.cdna.all.fa.gz"), emit: transcript - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz"), emit: primary_assembly - tuple val(meta), path("gencode.v37.primary_assembly.annotation.gtf"), emit: primary_assembly_gtf - - path "versions.yml" , emit: versions + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.gtf") , emit: gtf + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa") , emit: primary_assembly + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.chr.gtf") , emit: chrgtf + path "versions.yml" , emit: versions script: """ - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${params.genome}.dna.chromosome.{1..22}.fa.gz - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${params.genome}.dna.chromosome.{MT,X,Y}.fa.gz - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${params.genome}.${ensembl_version}.gtf.gz - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf.gz - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/cdna/Homo_sapiens.${params.genome}.cdna.all.fa.gz -O Homo_sapiens.${params.genome}.${ensembl_version}.cdna.all.fa.gz wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${params.genome}.dna.primary_assembly.fa.gz -O Homo_sapiens.${params.genome}.${ensembl_version}.dna.primary_assembly.fa.gz - wget https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_37/gencode.v37.primary_assembly.annotation.gtf.gz - gunzip -c Homo_sapiens.${params.genome}.dna.chromosome.* > Homo_sapiens.${params.genome}.${ensembl_version}.all.fa + wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf.gz + gunzip Homo_sapiens.${params.genome}.${ensembl_version}.gtf.gz + gunzip Homo_sapiens.${params.genome}.${ensembl_version}.dna.primary_assembly.fa.gz gunzip Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf.gz - gunzip gencode.v37.primary_assembly.annotation.gtf.gz - cat <<-END_VERSIONS > versions.yml "${task.process}": wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS """ stub: """ - touch "Homo_sapiens.${genome}.${ensembl_version}.all.fa" touch "Homo_sapiens.${genome}.${ensembl_version}.gtf" - touch "Homo_sapiens.${genome}.${ensembl_version}.chr.gtf" - touch "Homo_sapiens.${genome}.${ensembl_version}.cdna.all.fa.gz" + touch "Homo_sapiens.${params.genome}.${ensembl_version}.dna.primary_assembly.fa" + touch "Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf" cat <<-END_VERSIONS > versions.yml "${task.process}": wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') END_VERSIONS """ diff --git a/modules/nf-core/salmon/index/main.nf b/modules/nf-core/salmon/index/main.nf index 88d9cf14a..e755d9a34 100644 --- a/modules/nf-core/salmon/index/main.nf +++ b/modules/nf-core/salmon/index/main.nf @@ -44,4 +44,29 @@ process SALMON_INDEX { salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") END_VERSIONS """ + + stub: + """ + mkdir salmon + touch salmon/complete_ref_lens.bin + touch salmon/ctable.bin + touch salmon/ctg_offsets.bin + touch salmon/duplicate_clusters.tsv + touch salmon/info.json + touch salmon/mphf.bin + touch salmon/pos.bin + touch salmon/pre_indexing.log + touch salmon/rank.bin + touch salmon/refAccumLengths.bin + touch salmon/ref_indexing.log + touch salmon/reflengths.bin + touch salmon/refseq.bin + touch salmon/seq.bin + touch salmon/versionInfo.json + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") + END_VERSIONS + """ } diff --git a/modules/nf-core/salmon/index/tests/main.nf.test b/modules/nf-core/salmon/index/tests/main.nf.test index 538b231b4..16b3c1a79 100644 --- a/modules/nf-core/salmon/index/tests/main.nf.test +++ b/modules/nf-core/salmon/index/tests/main.nf.test @@ -32,4 +32,28 @@ nextflow_process { } + test("sarscov2 stub") { + options "-stub" + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/genome.fasta", checkIfExists: true)]) + input[1] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.index.get(0)).exists() }, + { assert snapshot(process.out.versions).match("versions stub") } + ) + } + + } + } \ No newline at end of file diff --git a/modules/nf-core/salmon/index/tests/main.nf.test.snap b/modules/nf-core/salmon/index/tests/main.nf.test.snap index 94edf3903..703e455c5 100644 --- a/modules/nf-core/salmon/index/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/index/tests/main.nf.test.snap @@ -10,5 +10,17 @@ "nextflow": "23.10.1" }, "timestamp": "2023-11-22T14:26:33.32036" + }, + "versions stub": { + "content": [ + [ + "versions.yml:md5,563eeafb4577be0b13801d7021c0bf42" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-23T09:47:58.828124" } } \ No newline at end of file diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index e115d39cf..e177b42ac 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -76,4 +76,16 @@ process SALMON_QUANT { salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") END_VERSIONS """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + touch ${prefix}_meta_info.json + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") + END_VERSIONS + """ } diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test b/modules/nf-core/salmon/quant/tests/main.nf.test index 04e61e2b3..b387fac2a 100644 --- a/modules/nf-core/salmon/quant/tests/main.nf.test +++ b/modules/nf-core/salmon/quant/tests/main.nf.test @@ -54,6 +54,38 @@ nextflow_process { } + test("sarscov2 - single_end stub") { + options "-stub" + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end: true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = '' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_single_end_stub") } + ) + } + + } + test("sarscov2 - single_end lib type A") { when { @@ -86,6 +118,38 @@ nextflow_process { } + test("sarscov2 - single_end lib type A stub") { + options "-stub" + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end: true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = 'A' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_single_end_lib_type_a_stub") } + ) + } + + } + test("sarscov2 - pair_end") { when { @@ -121,6 +185,41 @@ nextflow_process { } + test("sarscov2 - pair_end stub") { + options "-stub" + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end: true ], // meta map + [ + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) + ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = '' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_pair_end stub") } + ) + } + + } + test("sarscov2 - pair_end multiple") { when { @@ -157,4 +256,41 @@ nextflow_process { } } + + test("sarscov2 - pair_end multiple stub") { + options "-stub" + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test2_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test2_2.fastq.gz", checkIfExists: true) + ] + ]) + input[1] = SALMON_INDEX.out.index + input[2] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true)]) + input[3] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + input[4] = false + input[5] = '' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.json_info.get(0).get(1)).exists() }, + { assert path(process.out.results.get(0).get(1)).exists() }, + { assert snapshot(process.out.versions).match("versions_pair_end_multiple_stub") } + ) + } + + } } diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test.snap b/modules/nf-core/salmon/quant/tests/main.nf.test.snap index a1ec792e0..a80bc8aa8 100644 --- a/modules/nf-core/salmon/quant/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/quant/tests/main.nf.test.snap @@ -1,4 +1,43 @@ { + "versions_single_end_lib_type_a_stub": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-24T14:34:21.647863" + }, + "versions_pair_end_multiple_stub": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-24T14:34:48.03415" + }, + "sarscov2 - single_end stub": { + "content": [ + [ + + ], + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-23T09:34:16.444372" + }, "versions_single_end": { "content": [ [ @@ -23,6 +62,42 @@ }, "timestamp": "2024-02-06T17:10:56.121713" }, + "versions_pair_end_stub": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-23T08:38:01.276656" + }, + "versions_pair_end stub": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-24T14:34:36.570127" + }, + "versions_single_end_stub": { + "content": [ + [ + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-24T14:28:01.864343" + }, "versions_single_end_lib_type_a": { "content": [ [ diff --git a/nextflow.config b/nextflow.config index 871f543c7..14127c38f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -83,6 +83,7 @@ params { fusioncatcher_ref = "${params.genomes_base}/fusioncatcher/human_v102" hgnc_ref = "${params.genomes_base}/hgnc/hgnc_complete_set.txt" hgnc_date = "${params.genomes_base}/hgnc/HGNC-DB-timestamp.txt" + salmon_index = "${params.genomes_base}/salmon/salmon" starfusion_ref = "${params.genomes_base}/starfusion/ctat_genome_lib_build_dir" starindex_ref = "${params.genomes_base}/star" fusionreport_ref = "${params.genomes_base}/fusion_report_db" diff --git a/nextflow_schema.json b/nextflow_schema.json index 63c90c19d..69270631f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -200,6 +200,11 @@ "fa_icon": "far fa-file-code", "description": "Use QIAGEN instead of SANGER to download COSMIC database" }, + "salmon_index": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Path to salmon index" + }, "starfusion": { "type": "boolean", "fa_icon": "far fa-file-code", diff --git a/workflows/build_references.nf b/workflows/build_references.nf index db28c2a8a..038f460ae 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -25,8 +25,8 @@ include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genome include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' include { SALMON_INDEX } from '../modules/nf-core/salmon/index/main' -include { GFFREAD } from '../modules/local/gffread' -include { GUNZIP } from '../modules/nf-core/gunzip/main' +include { GFFREAD } from '../modules/nf-core/gffread/main' + /* ======================================================================================== RUN MAIN WORKFLOW @@ -38,54 +38,47 @@ workflow BUILD_REFERENCES { def fake_meta = [:] fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" ENSEMBL_DOWNLOAD( params.ensembl_version, params.genome, fake_meta ) - // HGNC_DOWNLOAD( ) - GUNZIP(ENSEMBL_DOWNLOAD.out.primary_assembly) - - - SAMTOOLS_FAIDX(GUNZIP.out.gunzip, [[],[]]) - // GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) - - // RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) - // CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) - - // GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) - - ch_fasta_fai =(GUNZIP.out.gunzip).join(SAMTOOLS_FAIDX.out.fai) - GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ch_fasta_fai) - SALMON_INDEX(GUNZIP.out.gunzip.map { meta, fasta -> [ fasta ] }, GFFREAD.out.tr_fasta) - - // RSEM_PREPAREREFERENCE(ENSEMBL_DOWNLOAD.out.fasta.map { meta, fasta -> [ fasta ] }, ENSEMBL_DOWNLOAD.out.gtf.map { meta, gtf -> [ gtf ] }) - - - // if (params.starindex || params.all || params.starfusion || params.arriba) { - // STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf ) - // } - - // if (params.arriba || params.all) { - // ARRIBA_DOWNLOAD() - // } - - // if (params.fusioncatcher || params.all) { - // FUSIONCATCHER_DOWNLOAD() - // } - - // if (params.starfusion || params.all) { - // if (params.starfusion_build){ - // STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.chrgtf ) - // } else { - // STARFUSION_DOWNLOAD() - // } - // } - - // if (params.starfusion_build){ - // GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.chrgtf) - // } else { - // GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.chrgtf) - // } - - // if (params.fusionreport || params.all) { - // FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) - // } + HGNC_DOWNLOAD( ) + SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.primary_assembly, [[],[]]) + GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.primary_assembly) + + RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) + CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) + + GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) + + GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ENSEMBL_DOWNLOAD.out.primary_assembly.map { meta, fasta -> [ fasta ] }) + SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + + if (params.starindex || params.all || params.starfusion || params.arriba) { + STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf ) + } + + if (params.arriba || params.all) { + ARRIBA_DOWNLOAD() + } + + if (params.fusioncatcher || params.all) { + FUSIONCATCHER_DOWNLOAD() + } + + if (params.starfusion || params.all) { + if (params.starfusion_build){ + STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.chrgtf ) + } else { + STARFUSION_DOWNLOAD() + } + } + + if (params.starfusion_build){ + GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.chrgtf) + } else { + GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.chrgtf) + } + + if (params.fusionreport || params.all) { + FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) + } } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 9837c7495..72c14ea1e 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -6,6 +6,7 @@ include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' @@ -25,6 +26,7 @@ ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] } ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() +ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() @@ -113,6 +115,7 @@ workflow RNAFUSION { .set { ch_cat_fastq } ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) + // // MODULE: Run FastQC // @@ -129,6 +132,10 @@ workflow RNAFUSION { ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + + SALMON_QUANT( ch_reads_all, ch_salmon_index, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + + // // SUBWORKFLOW: Run STAR alignment and Arriba // From 0999af252b16a8714a78b5d650d103f688a0e967 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 13:27:15 +0200 Subject: [PATCH 019/887] cleanup --- subworkflows/local/qc_workflow.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index 0bc37a601..d7958fecc 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -5,7 +5,7 @@ include { PICARD_COLLECTRNASEQMETRICS } from '../../modules/local/picard/collectrnaseqmetrics/main' include { GATK4_MARKDUPLICATES } from '../../modules/nf-core/gatk4/markduplicates/main' include { PICARD_COLLECTINSERTSIZEMETRICS } from '../../modules/nf-core/picard/collectinsertsizemetrics/main' - include { SALMON_QUANT } from '../../modules/nf-core/salmon/quant/main' + workflow QC_WORKFLOW { take: ch_reads_all @@ -32,7 +32,6 @@ workflow QC_WORKFLOW { ch_versions = ch_versions.mix(PICARD_COLLECTINSERTSIZEMETRICS.out.versions) ch_insertsize_metrics = Channel.empty().mix(PICARD_COLLECTINSERTSIZEMETRICS.out.metrics) - SALMON_QUANT(ch_reads_all, salmon_index, ch_chrgtf.map { meta, gtf -> [ gtf ]}, transcript_fasta, true, '') emit: From 3f47ecdc693f1e47185be055a02558fceb7eae96 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 16:18:28 +0200 Subject: [PATCH 020/887] remove local gffread --- modules/local/gffread.nf | 50 ---------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 modules/local/gffread.nf diff --git a/modules/local/gffread.nf b/modules/local/gffread.nf deleted file mode 100644 index 98863efa5..000000000 --- a/modules/local/gffread.nf +++ /dev/null @@ -1,50 +0,0 @@ -process GFFREAD { - tag "$gff" - label 'process_low' - - conda "bioconda::gffread=0.12.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gffread:0.12.1--h8b12597_0' : - 'biocontainers/gffread:0.12.1--h8b12597_0' }" - - input: - tuple val(meta), path(gff) - tuple val(meta2), path(fasta), path(fai) - - output: - path "*_gffread_output.gtf", emit: gtf, optional: true - path "*_gffread_output.fa" , emit: tr_fasta, optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def genome = fasta ? "-g ${fasta}" : '' - def prefix = task.ext.prefix ?: "${meta.id}" - def outp = args.contains("-w") ? "-w ${prefix}_gffread_output.fa" : "-o ${prefix}_gffread_output.gtf" - - """ - gffread \\ - $gff \\ - $genome \\ - $outp - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}_gffread" - """ - touch ${prefix}_gffread_output.gtf - touch ${prefix}_gffread_output.fa - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - END_VERSIONS - """ -} From 7f1065afe127e69db33fe13a34179e263c14235c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 16:21:53 +0200 Subject: [PATCH 021/887] use primary assembly as main fasta and gtf instead of chr --- workflows/build_references.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 038f460ae..5b523db3f 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -51,7 +51,7 @@ workflow BUILD_REFERENCES { SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) if (params.starindex || params.all || params.starfusion || params.arriba) { - STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.gtf ) + STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) } if (params.arriba || params.all) { @@ -64,16 +64,16 @@ workflow BUILD_REFERENCES { if (params.starfusion || params.all) { if (params.starfusion_build){ - STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.fasta, ENSEMBL_DOWNLOAD.out.chrgtf ) + STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) } else { STARFUSION_DOWNLOAD() } } if (params.starfusion_build){ - GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.chrgtf) + GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.gtf) } else { - GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.chrgtf) + GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.gtf) } if (params.fusionreport || params.all) { From e98df822b6b970ea7f964156f6ccd7adbcfbc5cd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 16:24:05 +0200 Subject: [PATCH 022/887] fix channel io --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 72c14ea1e..45fd77eb0 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -133,7 +133,7 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - SALMON_QUANT( ch_reads_all, ch_salmon_index, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') // From 8b599637cf4e9dd8a2300d166d1ae29db0d3f054 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 May 2024 17:19:29 +0200 Subject: [PATCH 023/887] update changelog and output --- CHANGELOG.md | 18 +++++++++++------- docs/output.md | 13 +++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18fabee33..5effdca59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Normalized gene expression calculated [#488](https://github.com/nf-core/rnafusion/pull/488) +- Primary assembly now used as main reference genome FASTA file, as recommended by the STAR manual [#488](https://github.com/nf-core/rnafusion/pull/488) +- Use of only ensembl GTF file, not chr.gtf file as GTF reference file [#488](https://github.com/nf-core/rnafusion/pull/488) + ### Changed ### Fixed @@ -24,12 +28,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- fix bug when using parameter "whitelist" [#466](https://github.com/nf-core/rnafusion/pull/466) -- fix VCF_COLLECT handling when a tool is absent from FUSIONREPORT report [#458](https://github.com/nf-core/rnafusion/pull/458) -- fix VCF_COLLECT when fusioninspector output is empty but fusionreport is not [#465](https://github.com/nf-core/rnafusion/pull/465) -- fix VCF_COLLECT bug [#481](https://github.com/nf-core/rnafusion/pull/481) -- fix conda package for starfusion/detect[#482](https://github.com/nf-core/rnafusion/pull/482) -- fix logical gate so when stringtie should run but not starfusion, starfusion will not run[#482](https://github.com/nf-core/rnafusion/pull/482) +- Fix bug when using parameter "whitelist" [#466](https://github.com/nf-core/rnafusion/pull/466) +- Fix VCF_COLLECT handling when a tool is absent from FUSIONREPORT report [#458](https://github.com/nf-core/rnafusion/pull/458) +- Fix VCF_COLLECT when fusioninspector output is empty but fusionreport is not [#465](https://github.com/nf-core/rnafusion/pull/465) +- Fix VCF_COLLECT bug [#481](https://github.com/nf-core/rnafusion/pull/481) +- Fix conda package for starfusion/detect[#482](https://github.com/nf-core/rnafusion/pull/482) +- Fix logical gate so when stringtie should run but not starfusion, starfusion will not run[#482](https://github.com/nf-core/rnafusion/pull/482) ### Removed @@ -39,7 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- python3 explicit in vcf_collect [#452](https://github.com/nf-core/rnafusion/pull/452) +- Python3 explicit in vcf_collect [#452](https://github.com/nf-core/rnafusion/pull/452) ### Fixed diff --git a/docs/output.md b/docs/output.md index dede2c87b..128a2f365 100644 --- a/docs/output.md +++ b/docs/output.md @@ -23,6 +23,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Arriba visualisation](#arriba-visualisation) - Arriba visualisation report for FusionInspector fusions - [Picard](#picard) - Collect QC metrics - [FastQC](#fastqc) - Raw read quality control +- [Salmon](#salmon) - Normalized gene expression calculation - [MultiQC](#multiqc) - Aggregate reports describing QC results from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution @@ -234,6 +235,18 @@ $$ All tools have the same weight. +### Salmon + +
    +Output files + +- `salmon` + - `` + +
    + +Folder containing the quantification results + ### Kallisto
    From 83e820a6524e3ac709f921ef922a25830296766e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 22 May 2024 10:45:34 +0200 Subject: [PATCH 024/887] Update conf/modules.config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Lucía Peña-Pérez --- conf/modules.config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 696889c8e..a1fe17026 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -190,6 +190,10 @@ process { } withName: 'SALMON_QUANT' { + ext.args = { [ + '--gcBias', + '--validateMappings' + ].join(' ') } publishDir = [ path: { "${params.outdir}/salmon" }, mode: params.publish_dir_mode, From 7a2aca5d42e0df71d2ffa65f8160d10ced94cb44 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 22 May 2024 11:48:17 +0200 Subject: [PATCH 025/887] update modules and use rrnatranscript from nf-core --- modules.json | 13 ++- .../agat/convertspgff2tsv/environment.yml | 2 +- modules/nf-core/agat/convertspgff2tsv/main.nf | 8 +- .../nf-core/agat/convertspgff2tsv/meta.yml | 2 + .../agat/convertspgff2tsv/tests/main.nf.test | 2 - .../convertspgff2tsv/tests/main.nf.test.snap | 22 +++-- modules/nf-core/cat/fastq/tests/main.nf.test | 2 + .../tests/main.nf.test | 56 ++++++++++++ .../tests/main.nf.test.snap | 68 +++++++++++++++ .../createsequencedictionary/tests/tags.yml | 2 + .../nf-core/rrnatranscripts/environment.yml | 9 ++ modules/nf-core/rrnatranscripts/main.nf | 43 ++++++++++ modules/nf-core/rrnatranscripts/meta.yml | 31 +++++++ .../templates/get_rrna_transcripts.py | 85 +++++++++++++++++++ .../rrnatranscripts/tests/main.nf.test | 53 ++++++++++++ .../rrnatranscripts/tests/main.nf.test.snap | 40 +++++++++ .../nf-core/rrnatranscripts/tests/tags.yml | 2 + modules/nf-core/ucsc/gtftogenepred/main.nf | 2 +- workflows/build_references.nf | 11 +-- 19 files changed, 429 insertions(+), 24 deletions(-) create mode 100644 modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml create mode 100644 modules/nf-core/rrnatranscripts/environment.yml create mode 100644 modules/nf-core/rrnatranscripts/main.nf create mode 100644 modules/nf-core/rrnatranscripts/meta.yml create mode 100644 modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py create mode 100644 modules/nf-core/rrnatranscripts/tests/main.nf.test create mode 100644 modules/nf-core/rrnatranscripts/tests/main.nf.test.snap create mode 100644 modules/nf-core/rrnatranscripts/tests/tags.yml diff --git a/modules.json b/modules.json index eb75243ad..d8fe40315 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "agat/convertspgff2tsv": { "branch": "master", - "git_sha": "9198082dcec6d8374c0bf3d7e38dd1f79d4601a7", + "git_sha": "b1d41826971b91f9649b46a8f3ccb226ee150c85", "installed_by": ["modules"] }, "arriba/arriba": { @@ -32,7 +32,7 @@ }, "cat/fastq": { "branch": "master", - "git_sha": "0997b47c93c06b49aa7b3fefda87e728312cf2ca", + "git_sha": "4fc983ad0b30e6e32696fa7d980c76c7bfe1c03e", "installed_by": ["modules"] }, "fastp": { @@ -52,7 +52,7 @@ }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "e6fe277739f5894711405af3e717b2470bd956b5", "installed_by": ["modules"] }, "gatk4/markduplicates": { @@ -80,6 +80,11 @@ "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, + "rrnatranscripts": { + "branch": "master", + "git_sha": "7b17de553ee27a17478f6bf9df15acd26b1ef377", + "installed_by": ["modules"] + }, "samtools/faidx": { "branch": "master", "git_sha": "f153f1f10e1083c49935565844cccb7453021682", @@ -122,7 +127,7 @@ }, "ucsc/gtftogenepred": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "acb0880789a6ebc2168d3b2d3d42b5bce6a62431", "installed_by": ["modules"] } } diff --git a/modules/nf-core/agat/convertspgff2tsv/environment.yml b/modules/nf-core/agat/convertspgff2tsv/environment.yml index b5fdf3dbb..690f50ae5 100644 --- a/modules/nf-core/agat/convertspgff2tsv/environment.yml +++ b/modules/nf-core/agat/convertspgff2tsv/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::agat=1.2.0 + - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgff2tsv/main.nf b/modules/nf-core/agat/convertspgff2tsv/main.nf index 5cded33ef..a6f73b6c1 100644 --- a/modules/nf-core/agat/convertspgff2tsv/main.nf +++ b/modules/nf-core/agat/convertspgff2tsv/main.nf @@ -4,8 +4,8 @@ process AGAT_CONVERTSPGFF2TSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.2.0--pl5321hdfd78af_0' : - 'biocontainers/agat:1.2.0--pl5321hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" input: tuple val(meta), path(gff) @@ -28,7 +28,7 @@ process AGAT_CONVERTSPGFF2TSV { cat <<-END_VERSIONS > versions.yml "${task.process}": - agat: \$(agat_convert_sp_gff2tsv.pl --help | sed '3!d; s/.*v//' | sed 's/ .*//') + agat: \$(agat_convert_sp_gff2tsv.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') END_VERSIONS """ @@ -40,7 +40,7 @@ process AGAT_CONVERTSPGFF2TSV { cat <<-END_VERSIONS > versions.yml "${task.process}": - agat: \$(agat_convert_sp_gff2tsv.pl --help | sed '3!d; s/.*v//' | sed 's/ .*//') + agat: \$(agat_convert_sp_gff2tsv.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') END_VERSIONS """ } diff --git a/modules/nf-core/agat/convertspgff2tsv/meta.yml b/modules/nf-core/agat/convertspgff2tsv/meta.yml index f5865dfe7..83078787b 100644 --- a/modules/nf-core/agat/convertspgff2tsv/meta.yml +++ b/modules/nf-core/agat/convertspgff2tsv/meta.yml @@ -36,3 +36,5 @@ output: pattern: "versions.yml" authors: - "@rannick" +maintainers: + - "@gallvp" diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test index 41239a588..4898a4a9b 100644 --- a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test +++ b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test @@ -14,8 +14,6 @@ nextflow_process { when { process { """ - // TODO nf-core: define inputs of the process here. Example: - input[0] = [ [ id: 'test' ], // meta map file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap index cf21cd659..71ed6205c 100644 --- a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap +++ b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap @@ -3,10 +3,14 @@ "content": [ [ "test.tsv", - "versions.yml:md5,07ae8e1f648a67237a7efeafb551f01c" + "versions.yml:md5,b81565a6ff8911848806128b3bec8508" ] ], - "timestamp": "2023-12-24T23:55:30.786170144" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T10:06:55.853319" }, "sarscov2 - genome [gff3]": { "content": [ @@ -16,25 +20,29 @@ { "id": "test" }, - "test.tsv:md5,e565b8ee5bc69b0625046a8036fda552" + "test.tsv:md5,8373d2035689d23694f87606116cdccd" ] ], "1": [ - "versions.yml:md5,07ae8e1f648a67237a7efeafb551f01c" + "versions.yml:md5,b81565a6ff8911848806128b3bec8508" ], "tsv": [ [ { "id": "test" }, - "test.tsv:md5,e565b8ee5bc69b0625046a8036fda552" + "test.tsv:md5,8373d2035689d23694f87606116cdccd" ] ], "versions": [ - "versions.yml:md5,07ae8e1f648a67237a7efeafb551f01c" + "versions.yml:md5,b81565a6ff8911848806128b3bec8508" ] } ], - "timestamp": "2023-12-24T23:55:20.642366893" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T10:06:51.415395" } } \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index dab2e14c0..a71dcb8df 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -1,3 +1,5 @@ +// NOTE The version snaps may not be consistant +// https://github.com/nf-core/modules/pull/4087#issuecomment-1767948035 nextflow_process { name "Test Process CAT_FASTQ" diff --git a/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test new file mode 100644 index 000000000..a8a9c6d2e --- /dev/null +++ b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process GATK4_CREATESEQUENCEDICTIONARY" + script "../main.nf" + process "GATK4_CREATESEQUENCEDICTIONARY" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/createsequencedictionary" + + test("sarscov2 - fasta") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - fasta - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test.snap b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test.snap new file mode 100644 index 000000000..16735f954 --- /dev/null +++ b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "sarscov2 - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.dict:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ], + "dict": [ + [ + { + "id": "test" + }, + "genome.dict:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-16T10:16:16.34453" + }, + "sarscov2 - fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.dict:md5,7362679f176e0f52add03c08f457f646" + ] + ], + "1": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ], + "dict": [ + [ + { + "id": "test" + }, + "genome.dict:md5,7362679f176e0f52add03c08f457f646" + ] + ], + "versions": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-16T13:58:25.822068" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml b/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml new file mode 100644 index 000000000..035c5e4c7 --- /dev/null +++ b/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/createsequencedictionary: + - "modules/nf-core/gatk4/createsequencedictionary/**" diff --git a/modules/nf-core/rrnatranscripts/environment.yml b/modules/nf-core/rrnatranscripts/environment.yml new file mode 100644 index 000000000..e812273bf --- /dev/null +++ b/modules/nf-core/rrnatranscripts/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "rrnatranscripts" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - python=3.12.2 diff --git a/modules/nf-core/rrnatranscripts/main.nf b/modules/nf-core/rrnatranscripts/main.nf new file mode 100644 index 000000000..50843c768 --- /dev/null +++ b/modules/nf-core/rrnatranscripts/main.nf @@ -0,0 +1,43 @@ +process RRNATRANSCRIPTS { + tag '$rrna' + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.12' : + 'biocontainers/python:3.12' }" + + input: + path(gtf) + + output: + path("*rrna_intervals.gtf") , emit: rrna_gtf, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${gtf.baseName}" + """ + grep -E '^#|rRNA' genome.gtf > ${prefix}_rrna_intervals.gtf || true + if [ ! -s ${prefix}_rrna_intervals.gtf ]; then + rm ${prefix}_rrna_intervals.gtf + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version | sed -e "s/Python //g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${gtf.baseName}" + """ + touch ${prefix}_rrna_intervals.gtf + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version | sed -e "s/Python //g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/rrnatranscripts/meta.yml b/modules/nf-core/rrnatranscripts/meta.yml new file mode 100644 index 000000000..145506011 --- /dev/null +++ b/modules/nf-core/rrnatranscripts/meta.yml @@ -0,0 +1,31 @@ +name: rrnatranscripts +description: Ribosomal RNA extraction from a GTF file. +keywords: + - ribosomal + - rna + - genomics +tools: + - rrnatranscripts: + description: | + Extraction of ribosomal RNA + homepage: https://github.com/nf-core/rnafusion + licence: ["GPL-3.0-or-later"] +input: + - gtf: + type: file + description: GTF file + pattern: "*.{gtf}" +output: + # + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - rrna_gtf: + type: file + description: GTF file with ribosomal RNA only + pattern: "*.{gtf}" +authors: + - "@rannick" +maintainers: + - "@rannick" diff --git a/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py b/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py new file mode 100644 index 000000000..2e320e7bd --- /dev/null +++ b/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +import logging +import platform +import sys +from pathlib import Path + +# Configure logging +logging.basicConfig(format="%(name)s - %(asctime)s %(levelname)s: %(message)s") +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + +def get_rrna_intervals(gtf: str, rrna_transcripts: str): + """ + Get lines containing ``#`` or ``gene_type rRNA`` or ```` or ``gene_type rRNA_pseudogene`` or ``gene_type MT_rRNA`` + Create output file + + Args: + file_in (pathlib.Path): The given GTF file. + file_out (pathlib.Path): Where the ribosomal RNA GTF file should + be created; always in GTF format. + """ + patterns = { + "#", + 'transcript_biotype "Mt_rRNA"', + 'transcript_biotype "rRNA"', + 'transcript_biotype "rRNA_pseudogene"', + } + line_starts = {"MT", "1", "2", "3", "4", "5", "6", "7", "8", "9"} + out_lines = [] + path_gtf = Path(gtf) + path_rrna_transcripts = Path(rrna_transcripts) + if not path_gtf.is_file(): + logger.error(f"The given input file {gtf} was not found!") + sys.exit(2) + with path_gtf.open() as f: + data = f.readlines() + for line in data: + for pattern in patterns: + if pattern in line: + for line_start in line_starts: + if line.startswith(line_start): + out_lines.append(line) + if out_lines != []: + with path_rrna_transcripts.open(mode="w") as out_file: + out_file.writelines(out_lines) + + +def format_yaml_like(data: dict, indent: int = 0) -> str: + """Formats a dictionary to a YAML-like string. + + Args: + data (dict): The dictionary to format. + indent (int): The current indentation level. + + Returns: + str: A string formatted as YAML. + """ + yaml_str = "" + for key, value in data.items(): + spaces = " " * indent + if isinstance(value, dict): + yaml_str += f"{spaces}{key}:\\n{format_yaml_like(value, indent + 1)}" + else: + yaml_str += f"{spaces}{key}: {value}\\n" + return yaml_str + + +if __name__ == "__main__": + if '${task.ext.prefix}' != "null": + prefix = "${task.ext.prefix}." + else: + prefix = "${task.ext.gtf}." + + if not get_rrna_intervals('$gtf', f"{prefix}_rrna_intervals.gtf"): + logging.error("Failed to extract rrna transcipts.") + + + + # Write the versions + versions_this_module = {} + versions_this_module["${task.process}"] = {"python": platform.python_version()} + with open("versions.yml", "w") as f: + f.write(format_yaml_like(versions_this_module)) + diff --git a/modules/nf-core/rrnatranscripts/tests/main.nf.test b/modules/nf-core/rrnatranscripts/tests/main.nf.test new file mode 100644 index 000000000..1c29522ad --- /dev/null +++ b/modules/nf-core/rrnatranscripts/tests/main.nf.test @@ -0,0 +1,53 @@ +nextflow_process { + + name "Test Process RRNATRANSCRIPTS" + script "../main.nf" + process "RRNATRANSCRIPTS" + + tag "modules" + tag "modules_nfcore" + tag "rrnatranscripts" + + test("homo_sapiens - gtf") { + + when { + process { + """ + input[0] = [ + file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + ] """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - gtf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + ] """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/rrnatranscripts/tests/main.nf.test.snap b/modules/nf-core/rrnatranscripts/tests/main.nf.test.snap new file mode 100644 index 000000000..a190ddcbf --- /dev/null +++ b/modules/nf-core/rrnatranscripts/tests/main.nf.test.snap @@ -0,0 +1,40 @@ +{ + "homo_sapiens - gtf": { + "content": [ + { + "0": [ + + ], + "1": [ + "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" + ], + "rrna_gtf": [ + + ], + "versions": [ + "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" + ] + } + ], + "timestamp": "2024-05-21T13:55:44.831609" + }, + "homo_sapiens - gtf - stub": { + "content": [ + { + "0": [ + "genome_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "1": [ + "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" + ], + "rrna_gtf": [ + "genome_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "versions": [ + "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" + ] + } + ], + "timestamp": "2024-05-21T13:55:56.134136" + } +} \ No newline at end of file diff --git a/modules/nf-core/rrnatranscripts/tests/tags.yml b/modules/nf-core/rrnatranscripts/tests/tags.yml new file mode 100644 index 000000000..ade15226a --- /dev/null +++ b/modules/nf-core/rrnatranscripts/tests/tags.yml @@ -0,0 +1,2 @@ +rrnatranscripts: + - "modules/nf-core/rrnatranscripts/**" diff --git a/modules/nf-core/ucsc/gtftogenepred/main.nf b/modules/nf-core/ucsc/gtftogenepred/main.nf index 88aace26b..afbb5f3f9 100644 --- a/modules/nf-core/ucsc/gtftogenepred/main.nf +++ b/modules/nf-core/ucsc/gtftogenepred/main.nf @@ -1,5 +1,5 @@ process UCSC_GTFTOGENEPRED { - tag '${meta.id}' + tag "${meta.id}" label 'process_low' conda "${moduleDir}/environment.yml" diff --git a/workflows/build_references.nf b/workflows/build_references.nf index b1ea6d70c..f492de601 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -10,7 +10,7 @@ include { FUSIONREPORT_DOWNLOAD } from '../modules/local/fusionreport/ include { HGNC_DOWNLOAD } from '../modules/local/hgnc/main' include { STARFUSION_BUILD } from '../modules/local/starfusion/build/main' include { STARFUSION_DOWNLOAD } from '../modules/local/starfusion/download/main' -include { RRNA_TRANSCRIPTS } from '../modules/local/rrnatranscripts/main' + /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -18,9 +18,10 @@ include { RRNA_TRANSCRIPTS } from '../modules/local/rrnatranscrip */ include { ARRIBA_DOWNLOAD } from '../modules/nf-core/arriba/download/main' -include { BEDOPS_CONVERT2BED } from '../modules/nf-core/bedops/convert2bed/main' +include { BEDOPS_CONVERT2BED } from '../modules/nf-core/bedops/convert2bed/main' include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' +include { RRNATRANSCRIPTS } from '../modules/nf-core/rrnatranscripts/main' include { SAMTOOLS_FAIDX } from '../modules/nf-core/samtools/faidx/main' include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genomegenerate/main' include { UCSC_GTFTOGENEPRED } from '../modules/nf-core/ucsc/gtftogenepred/main' @@ -36,14 +37,14 @@ workflow BUILD_REFERENCES { def fake_meta = [:] fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" ENSEMBL_DOWNLOAD( params.ensembl_version, params.genome, fake_meta ) - HGNC_DOWNLOAD( ) + HGNC_DOWNLOAD() SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.fasta, [[],[]]) GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) - RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) - BEDOPS_CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) + RRNATRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf.map{ meta, gtf -> [ gtf ] }) + BEDOPS_CONVERT2BED([fake_meta.mix(RRNATRANSCRIPTS.out.rrna_gtf)]) GATK4_BEDTOINTERVALLIST(BEDOPS_CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) From c8b33090e8ca3364ac80e8f690594978fd8bbb29 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 22 May 2024 12:50:20 +0200 Subject: [PATCH 026/887] fix channel io --- workflows/build_references.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/workflows/build_references.nf b/workflows/build_references.nf index f492de601..32bfdce53 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -44,8 +44,7 @@ workflow BUILD_REFERENCES { GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) RRNATRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf.map{ meta, gtf -> [ gtf ] }) - BEDOPS_CONVERT2BED([fake_meta.mix(RRNATRANSCRIPTS.out.rrna_gtf)]) - + BEDOPS_CONVERT2BED(RRNATRANSCRIPTS.out.rrna_gtf.map{ it -> [[id:it.Name], it] }) GATK4_BEDTOINTERVALLIST(BEDOPS_CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) From eeeb9aebacb895e6808f0eaf12765a80a35af79d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 22 May 2024 12:55:33 +0200 Subject: [PATCH 027/887] remove gunzip --- modules.json | 111 +++++++++++++----- modules/nf-core/gunzip/environment.yml | 7 -- modules/nf-core/gunzip/main.nf | 48 -------- modules/nf-core/gunzip/meta.yml | 39 ------ modules/nf-core/gunzip/tests/main.nf.test | 36 ------ .../nf-core/gunzip/tests/main.nf.test.snap | 31 ----- modules/nf-core/gunzip/tests/tags.yml | 2 - 7 files changed, 79 insertions(+), 195 deletions(-) delete mode 100644 modules/nf-core/gunzip/environment.yml delete mode 100644 modules/nf-core/gunzip/main.nf delete mode 100644 modules/nf-core/gunzip/meta.yml delete mode 100644 modules/nf-core/gunzip/tests/main.nf.test delete mode 100644 modules/nf-core/gunzip/tests/main.nf.test.snap delete mode 100644 modules/nf-core/gunzip/tests/tags.yml diff --git a/modules.json b/modules.json index 4157b3177..fded9d460 100644 --- a/modules.json +++ b/modules.json @@ -8,122 +8,163 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba": { "branch": "master", "git_sha": "bbaeb3a3149def237b9d0acb9ab749ae98088e29", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/fastq": { "branch": "master", "git_sha": "02fd5bd7275abad27aad32d5c852e0a9b1b98882", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastp": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gffread": { "branch": "master", "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", - "installed_by": ["modules"] - }, - "gunzip": { - "branch": "master", - "git_sha": "3a5fef109d113b4997c9822198664ca5f2716208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/index": { "branch": "master", "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/quant": { "branch": "master", "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "5394565c5fe4c760e5b35977ec7607c62e81d1f8", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/align": { "branch": "master", "git_sha": "9f6b233518f7d9ecdcf24b798b7e491db5424273", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/genomegenerate": { "branch": "master", "git_sha": "0e98289b5bec6e3f8f588a8a9d05e8aacc1179a0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/merge": { "branch": "master", "git_sha": "5756b12b1fab0c07f05b9ad2d5d5c262b1a2c1ef", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/stringtie": { "branch": "master", "git_sha": "b1b959609bda44341120aed1766329909f54b8d0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -132,20 +173,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/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml deleted file mode 100644 index 25910b340..000000000 --- a/modules/nf-core/gunzip/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: gunzip -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - conda-forge::sed=4.7 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf deleted file mode 100644 index 468a6f287..000000000 --- a/modules/nf-core/gunzip/main.nf +++ /dev/null @@ -1,48 +0,0 @@ -process GUNZIP { - tag "$archive" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" - - input: - tuple val(meta), path(archive) - - output: - tuple val(meta), path("$gunzip"), emit: gunzip - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - gunzip = archive.toString() - '.gz' - """ - # Not calling gunzip itself because it creates files - # with the original group ownership rather than the - # default one for that user / the work directory - gzip \\ - -cd \\ - $args \\ - $archive \\ - > $gunzip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS - """ - - stub: - gunzip = archive.toString() - '.gz' - """ - touch $gunzip - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml deleted file mode 100644 index 231034f2f..000000000 --- a/modules/nf-core/gunzip/meta.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: gunzip -description: Compresses and decompresses files. -keywords: - - gunzip - - compression - - decompression -tools: - - gunzip: - description: | - gzip is a file format and a software application used for file compression and decompression. - documentation: https://www.gnu.org/software/gzip/manual/gzip.html - licence: ["GPL-3.0-or-later"] -input: - - meta: - type: map - description: | - Optional groovy Map containing meta information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be compressed/uncompressed - pattern: "*.*" -output: - - gunzip: - type: file - description: Compressed/uncompressed file - pattern: "*.*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@joseespinosa" - - "@drpatelh" - - "@jfy133" -maintainers: - - "@joseespinosa" - - "@drpatelh" - - "@jfy133" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test deleted file mode 100644 index 6406008ef..000000000 --- a/modules/nf-core/gunzip/tests/main.nf.test +++ /dev/null @@ -1,36 +0,0 @@ -nextflow_process { - - name "Test Process GUNZIP" - script "../main.nf" - process "GUNZIP" - tag "gunzip" - tag "modules_nfcore" - tag "modules" - - test("Should run without failures") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap deleted file mode 100644 index 720fd9ff4..000000000 --- a/modules/nf-core/gunzip/tests/main.nf.test.snap +++ /dev/null @@ -1,31 +0,0 @@ -{ - "Should run without failures": { - "content": [ - { - "0": [ - [ - [ - - ], - "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - [ - - ], - "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "timestamp": "2023-10-17T15:35:37.690477896" - } -} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml deleted file mode 100644 index fd3f69154..000000000 --- a/modules/nf-core/gunzip/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gunzip: - - modules/nf-core/gunzip/** From 6d08a74d6f0fc6fc718e9ec96d14bf2200dc5c3c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 22 May 2024 13:03:31 +0200 Subject: [PATCH 028/887] prettier --- modules.json | 106 +++++++++++++-------------------------------------- 1 file changed, 27 insertions(+), 79 deletions(-) diff --git a/modules.json b/modules.json index fded9d460..7f4cf0efc 100644 --- a/modules.json +++ b/modules.json @@ -8,163 +8,117 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba": { "branch": "master", "git_sha": "bbaeb3a3149def237b9d0acb9ab749ae98088e29", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", "git_sha": "02fd5bd7275abad27aad32d5c852e0a9b1b98882", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastp": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gffread": { "branch": "master", "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/index": { "branch": "master", "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "5394565c5fe4c760e5b35977ec7607c62e81d1f8", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/align": { "branch": "master", "git_sha": "9f6b233518f7d9ecdcf24b798b7e491db5424273", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", "git_sha": "0e98289b5bec6e3f8f588a8a9d05e8aacc1179a0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", "git_sha": "5756b12b1fab0c07f05b9ad2d5d5c262b1a2c1ef", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", "git_sha": "b1b959609bda44341120aed1766329909f54b8d0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -173,26 +127,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 3332ebbc1dc877a875acf69f481627b595268ef8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 24 May 2024 15:32:43 +0200 Subject: [PATCH 029/887] WIP: restructure reference building --- conf/modules.config | 2 +- main.nf | 10 +- nextflow.config | 5 +- subworkflows/local/build_references.nf | 122 +++++++ workflows/build_references.nf | 89 ----- workflows/rnafusion.nf | 436 +++++++++++++------------ 6 files changed, 347 insertions(+), 317 deletions(-) create mode 100644 subworkflows/local/build_references.nf delete mode 100644 workflows/build_references.nf diff --git a/conf/modules.config b/conf/modules.config index a1fe17026..44dec3397 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -59,7 +59,7 @@ process { withName: 'FASTQC' { ext.args = '--quiet' - ext.when = { !params.skip_qc } + ext.when = { !params.skip_qc } publishDir = [ path: { "${params.outdir}/fastqc" }, mode: params.publish_dir_mode, diff --git a/main.nf b/main.nf index ac96ab669..4c945cf83 100644 --- a/main.nf +++ b/main.nf @@ -20,7 +20,6 @@ nextflow.enable.dsl = 2 include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_rnafusion_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_rnafusion_pipeline' include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_rnafusion_pipeline' -include { BUILD_REFERENCES } from './workflows/build_references' include { RNAFUSION } from './workflows/rnafusion' @@ -50,12 +49,9 @@ workflow NFCORE_RNAFUSION { // // WORKFLOW: Run pipeline // - if (params.build_references) { - BUILD_REFERENCES () - } else { - ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) - RNAFUSION(ch_samplesheet) - } + + ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) + RNAFUSION(ch_samplesheet) } /* diff --git a/nextflow.config b/nextflow.config index 14127c38f..265c3c0b3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -33,11 +33,10 @@ params { genomes = [:] // Genomes options - fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.all.fa" - fai = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.all.fa.fai" + fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa" + fai = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa.fai" gtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf" chrgtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.chr.gtf" - transcript = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.cdna.all.fa.gz" refflat = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.chr.gtf.refflat" rrna_intervals = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.interval_list" diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf new file mode 100644 index 000000000..bb2acc4d3 --- /dev/null +++ b/subworkflows/local/build_references.nf @@ -0,0 +1,122 @@ +/* +======================================================================================== + IMPORT LOCAL MODULES/SUBWORKFLOWS +======================================================================================== +*/ + +include { ARRIBA_DOWNLOAD } from '../../modules/local/arriba/download/main' +include { ENSEMBL_DOWNLOAD } from '../../modules/local/ensembl/main' +include { FUSIONCATCHER_DOWNLOAD } from '../../modules/local/fusioncatcher/download/main' +include { FUSIONREPORT_DOWNLOAD } from '../../modules/local/fusionreport/download/main' +include { HGNC_DOWNLOAD } from '../../modules/local/hgnc/main' +include { STARFUSION_BUILD } from '../../modules/local/starfusion/build/main' +include { STARFUSION_DOWNLOAD } from '../../modules/local/starfusion/download/main' +include { GTF_TO_REFFLAT } from '../../modules/local/uscs/custom_gtftogenepred/main' +include { RRNA_TRANSCRIPTS } from '../../modules/local/rrnatranscripts/main' +include { CONVERT2BED } from '../../modules/local/convert2bed/main' +/* +======================================================================================== + IMPORT NF-CORE MODULES/SUBWORKFLOWS +======================================================================================== +*/ + +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' +include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate/main' +include { GATK4_CREATESEQUENCEDICTIONARY } from '../../modules/nf-core/gatk4/createsequencedictionary/main' +include { GATK4_BEDTOINTERVALLIST } from '../../modules/nf-core/gatk4/bedtointervallist/main' +include { SALMON_INDEX } from '../../modules/nf-core/salmon/index/main' +include { GFFREAD } from '../../modules/nf-core/gffread/main' + +/* +======================================================================================== + RUN MAIN WORKFLOW +======================================================================================== +*/ + +workflow BUILD_REFERENCES { + + + main: + + ch_versions = Channel.empty() + + def fake_meta = [:] + fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" + + if (!file(params.fasta).exists() || file(params.fasta).isEmpty() || + !file(params.chrgtf).exists() || file(params.chrgtf).isEmpty() || + !file(params.gtf).exists() || file(params.gtf).isEmpty()){ + ENSEMBL_DOWNLOAD(params.ensembl_version, params.genome, fake_meta)} + ch_fasta = {(!file(params.fasta).exists() || file(params.fasta).isEmpty()) ? ENSEMBL_DOWNLOAD.out.primary_assembly : Channel.fromPath(params.fasta).map { that -> [[id:that.Name], that] }.collect()} + + if (!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || + !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()){ + HGNC_DOWNLOAD( )} + + if (!file(params.fai).exists() || file(params.fai).isEmpty(){ + SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.primary_assembly, [[],[]])} + + if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty(){ + GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.primary_assembly) + RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) + CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) + GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) + } + + if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty(){ // add condition for qc, check that dirs can also be checked with isEmpty() + GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ENSEMBL_DOWNLOAD.out.primary_assembly.map { meta, fasta -> [ fasta ] }) + SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + } + + + if ((params.starindex || params.all || params.starfusion || params.arriba) && + (!params.starindex_ref.exits() || params.starindex_ref.isEmpty()) + ) { + STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) + } + ch_starindex_ref = ... + + // if (params.arriba || params.all) { + // ARRIBA_DOWNLOAD() + // } + + // if (params.fusioncatcher || params.all) { + // FUSIONCATCHER_DOWNLOAD() + // } + + // if (params.starfusion || params.all) { + // if (params.starfusion_build){ + // STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) + // } else { + // STARFUSION_DOWNLOAD() + // } + // } + + // if (params.starfusion_build){ + // GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.gtf) + // } else { + // GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.gtf) + // } + + // if (params.fusionreport || params.all) { + // FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) + // } + + emit: + ch_fasta + ch_chrgtf = {(!file(params.chrgtf).exists() || file(params.chrgtf).isEmpty()) ? ENSEMBL_DOWNLOAD.out.chrgtf : Channel.fromPath(params.chrgtf).map { that -> [[id:that.Name], that] }.collect()} + ch_gtf = {(!file(params.gtf).exists() || file(params.gtf).isEmpty()) ? ENSEMBL_DOWNLOAD.out.gtf : Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] }.collect()} + ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() + ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() + ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() + ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() + ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() + + +} + +/* +======================================================================================== + THE END +======================================================================================== +*/ diff --git a/workflows/build_references.nf b/workflows/build_references.nf deleted file mode 100644 index 5b523db3f..000000000 --- a/workflows/build_references.nf +++ /dev/null @@ -1,89 +0,0 @@ -/* -======================================================================================== - IMPORT LOCAL MODULES/SUBWORKFLOWS -======================================================================================== -*/ - -include { ARRIBA_DOWNLOAD } from '../modules/local/arriba/download/main' -include { ENSEMBL_DOWNLOAD } from '../modules/local/ensembl/main' -include { FUSIONCATCHER_DOWNLOAD } from '../modules/local/fusioncatcher/download/main' -include { FUSIONREPORT_DOWNLOAD } from '../modules/local/fusionreport/download/main' -include { HGNC_DOWNLOAD } from '../modules/local/hgnc/main' -include { STARFUSION_BUILD } from '../modules/local/starfusion/build/main' -include { STARFUSION_DOWNLOAD } from '../modules/local/starfusion/download/main' -include { GTF_TO_REFFLAT } from '../modules/local/uscs/custom_gtftogenepred/main' -include { RRNA_TRANSCRIPTS } from '../modules/local/rrnatranscripts/main' -include { CONVERT2BED } from '../modules/local/convert2bed/main' -/* -======================================================================================== - IMPORT NF-CORE MODULES/SUBWORKFLOWS -======================================================================================== -*/ - -include { SAMTOOLS_FAIDX } from '../modules/nf-core/samtools/faidx/main' -include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genomegenerate/main' -include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' -include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' -include { SALMON_INDEX } from '../modules/nf-core/salmon/index/main' -include { GFFREAD } from '../modules/nf-core/gffread/main' - -/* -======================================================================================== - RUN MAIN WORKFLOW -======================================================================================== -*/ - -workflow BUILD_REFERENCES { - - def fake_meta = [:] - fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" - ENSEMBL_DOWNLOAD( params.ensembl_version, params.genome, fake_meta ) - HGNC_DOWNLOAD( ) - SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.primary_assembly, [[],[]]) - GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.primary_assembly) - - RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) - CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) - - GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) - - GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ENSEMBL_DOWNLOAD.out.primary_assembly.map { meta, fasta -> [ fasta ] }) - SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) - - if (params.starindex || params.all || params.starfusion || params.arriba) { - STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) - } - - if (params.arriba || params.all) { - ARRIBA_DOWNLOAD() - } - - if (params.fusioncatcher || params.all) { - FUSIONCATCHER_DOWNLOAD() - } - - if (params.starfusion || params.all) { - if (params.starfusion_build){ - STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) - } else { - STARFUSION_DOWNLOAD() - } - } - - if (params.starfusion_build){ - GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.gtf) - } else { - GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.gtf) - } - - if (params.fusionreport || params.all) { - FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) - } - -} - -/* -======================================================================================== - THE END -======================================================================================== -*/ diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 45fd77eb0..bf7fa1b8e 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -12,25 +12,6 @@ include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pi include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-validation' -ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() -ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() -ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() -ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() -ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() -ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() -ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() -ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() -ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() - - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT LOCAL MODULES/SUBWORKFLOWS @@ -40,7 +21,7 @@ ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // - +include { BUILD_REFERENCES } from '../subworkflows/local/build_references' include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' @@ -75,212 +56,233 @@ workflow RNAFUSION { main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() - - // - // Create channel from input file provided through params.input - // - Channel - .fromSamplesheet("input") - .map { - meta, fastq_1, fastq_2, strandedness -> - if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } - } - .groupTuple() - .map { - validateInputSamplesheet(it) - } - .branch { - meta, fastqs -> - single : fastqs.size() == 1 - return [ meta, fastqs.flatten() ] - multiple: fastqs.size() > 1 - return [ meta, fastqs.flatten() ] - } - .set { ch_fastq } - - // - // MODULE: Concatenate FastQ files from same sample if required - // - CAT_FASTQ ( - ch_fastq.multiple - ) - .reads - .mix(ch_fastq.single) - .set { ch_cat_fastq } - ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) - - // - // MODULE: Run FastQC - // - FASTQC ( - ch_cat_fastq - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions) + // Reference channels + // ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() + // ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() + // ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() + // ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() + // ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() + // ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() + // ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() + // ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() - TRIM_WORKFLOW ( - ch_cat_fastq - ) - ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher - ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() // - // SUBWORKFLOW: Run STAR alignment and Arriba + // Create references if necessary // - ARRIBA_WORKFLOW ( - ch_reads_all, - ch_gtf, - ch_fasta, - ch_starindex_ensembl_ref, - ch_arriba_ref_blacklist, - ch_arriba_ref_known_fusions, - ch_arriba_ref_protein_domains - ) - ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) - - -//Run STAR fusion - STARFUSION_WORKFLOW ( - ch_reads_all, - ch_chrgtf, - ch_starindex_ref, - ch_fasta - ) - ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - - -//Run fusioncatcher - FUSIONCATCHER_WORKFLOW ( - ch_reads_fusioncatcher - ) - ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) - - -//Run stringtie - STRINGTIE_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, - ch_chrgtf - ) - ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) - - - //Run fusion-report - FUSIONREPORT_WORKFLOW ( - ch_reads_all, - ch_fusionreport_ref, - ARRIBA_WORKFLOW.out.fusions, - STARFUSION_WORKFLOW.out.fusions, - FUSIONCATCHER_WORKFLOW.out.fusions - ) - ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) - - - //Run fusionInpector - FUSIONINSPECTOR_WORKFLOW ( - ch_reads_all, - FUSIONREPORT_WORKFLOW.out.fusion_list, - FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, - FUSIONREPORT_WORKFLOW.out.report, - FUSIONREPORT_WORKFLOW.out.csv, - STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, - ch_chrgtf, - ch_arriba_ref_protein_domains, - ch_arriba_ref_cytobands, - ch_hgnc_ref, - ch_hgnc_date - ) - ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - - - //QC - QC_WORKFLOW ( - ch_reads_all, - STARFUSION_WORKFLOW.out.ch_bam_sorted, - STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, - ch_chrgtf, - ch_refflat, - ch_fasta, - ch_fai, - ch_rrna_interval - ) - ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) - // - // Collate and save software versions - // - softwareVersionsToYAML(ch_versions) - .collectFile( - storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_pipeline_software_mqc_versions.yml', - sort: true, - newLine: true - ).set { ch_collated_versions } - - - // - // MODULE: MultiQC - // - ch_multiqc_config = Channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() - - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? - file(params.multiqc_methods_description, checkIfExists: true) : - file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( - methodsDescriptionText(ch_multiqc_custom_methods_description)) - - ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - ch_multiqc_files = ch_multiqc_files.mix( - ch_methods_description.collectFile( - name: 'methods_description_mqc.yaml', - sort: true - ) - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) - - MULTIQC ( - ch_multiqc_files.collect(), - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() - ) - - emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] + BUILD_REFERENCES() + + +// // +// // Create channel from input file provided through params.input +// // +// Channel +// .fromSamplesheet("input") +// .map { +// meta, fastq_1, fastq_2, strandedness -> +// if (!fastq_2) { +// return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] +// } else { +// return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] +// } +// } +// .groupTuple() +// .map { +// validateInputSamplesheet(it) +// } +// .branch { +// meta, fastqs -> +// single : fastqs.size() == 1 +// return [ meta, fastqs.flatten() ] +// multiple: fastqs.size() > 1 +// return [ meta, fastqs.flatten() ] +// } +// .set { ch_fastq } + +// // +// // MODULE: Concatenate FastQ files from same sample if required +// // +// CAT_FASTQ ( +// ch_fastq.multiple +// ) +// .reads +// .mix(ch_fastq.single) +// .set { ch_cat_fastq } +// ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) + + +// // +// // MODULE: Run FastQC +// // +// FASTQC ( +// ch_cat_fastq +// ) +// ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) +// ch_versions = ch_versions.mix(FASTQC.out.versions) + +// TRIM_WORKFLOW ( +// ch_cat_fastq +// ) +// ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher +// ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all +// ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + + +// SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + + +// // +// // SUBWORKFLOW: Run STAR alignment and Arriba +// // +// ARRIBA_WORKFLOW ( +// ch_reads_all, +// ch_gtf, +// ch_fasta, +// ch_starindex_ensembl_ref, +// ch_arriba_ref_blacklist, +// ch_arriba_ref_known_fusions, +// ch_arriba_ref_protein_domains +// ) +// ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) + + +// //Run STAR fusion +// STARFUSION_WORKFLOW ( +// ch_reads_all, +// ch_chrgtf, +// ch_starindex_ref, +// ch_fasta +// ) +// ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + + +// //Run fusioncatcher +// FUSIONCATCHER_WORKFLOW ( +// ch_reads_fusioncatcher +// ) +// ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + + +// //Run stringtie +// STRINGTIE_WORKFLOW ( +// STARFUSION_WORKFLOW.out.ch_bam_sorted, +// ch_chrgtf +// ) +// ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) + + +// //Run fusion-report +// FUSIONREPORT_WORKFLOW ( +// ch_reads_all, +// ch_fusionreport_ref, +// ARRIBA_WORKFLOW.out.fusions, +// STARFUSION_WORKFLOW.out.fusions, +// FUSIONCATCHER_WORKFLOW.out.fusions +// ) +// ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) + + +// //Run fusionInpector +// FUSIONINSPECTOR_WORKFLOW ( +// ch_reads_all, +// FUSIONREPORT_WORKFLOW.out.fusion_list, +// FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, +// FUSIONREPORT_WORKFLOW.out.report, +// FUSIONREPORT_WORKFLOW.out.csv, +// STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, +// ch_chrgtf, +// ch_arriba_ref_protein_domains, +// ch_arriba_ref_cytobands, +// ch_hgnc_ref, +// ch_hgnc_date +// ) +// ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) + + +// //QC +// QC_WORKFLOW ( +// ch_reads_all, +// STARFUSION_WORKFLOW.out.ch_bam_sorted, +// STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, +// ch_chrgtf, +// ch_refflat, +// ch_fasta, +// ch_fai, +// ch_rrna_interval +// ) +// ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + +// // +// // Collate and save software versions +// // +// softwareVersionsToYAML(ch_versions) +// .collectFile( +// storeDir: "${params.outdir}/pipeline_info", +// name: 'nf_core_pipeline_software_mqc_versions.yml', +// sort: true, +// newLine: true +// ).set { ch_collated_versions } + + +// // +// // MODULE: MultiQC +// // +// ch_multiqc_config = Channel.fromPath( +// "$projectDir/assets/multiqc_config.yml", checkIfExists: true) +// ch_multiqc_custom_config = params.multiqc_config ? +// Channel.fromPath(params.multiqc_config, checkIfExists: true) : +// Channel.empty() +// ch_multiqc_logo = params.multiqc_logo ? +// Channel.fromPath(params.multiqc_logo, checkIfExists: true) : +// Channel.empty() + +// summary_params = paramsSummaryMap( +// workflow, parameters_schema: "nextflow_schema.json") +// ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + +// ch_multiqc_custom_methods_description = params.multiqc_methods_description ? +// file(params.multiqc_methods_description, checkIfExists: true) : +// file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) +// ch_methods_description = Channel.value( +// methodsDescriptionText(ch_multiqc_custom_methods_description)) + +// ch_multiqc_files = ch_multiqc_files.mix( +// ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) +// ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) +// ch_multiqc_files = ch_multiqc_files.mix( +// ch_methods_description.collectFile( +// name: 'methods_description_mqc.yaml', +// sort: true +// ) +// ) +// ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) + +// MULTIQC ( +// ch_multiqc_files.collect(), +// ch_multiqc_config.toList(), +// ch_multiqc_custom_config.toList(), +// ch_multiqc_logo.toList() +// ) + +// emit: +// multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html +// versions = ch_versions // channel: [ path(versions.yml) ] } From bf0c33e179290f060a661301e906cb3d24435951 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 28 May 2024 15:39:38 +0200 Subject: [PATCH 030/887] refactor downloading of references --- modules/local/fusioncatcher/build/main.nf | 42 +++++ modules/local/fusioncatcher/build/meta.yml | 25 +++ modules/local/fusioncatcher/download/main.nf | 30 ++-- .../local/uscs/custom_gtftogenepred/main.nf | 1 + nextflow.config | 30 ++-- nextflow_schema.json | 48 +++--- subworkflows/local/build_references.nf | 144 +++++++++++------- workflows/rnafusion.nf | 9 +- 8 files changed, 220 insertions(+), 109 deletions(-) create mode 100644 modules/local/fusioncatcher/build/main.nf create mode 100644 modules/local/fusioncatcher/build/meta.yml diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf new file mode 100644 index 000000000..afab999c0 --- /dev/null +++ b/modules/local/fusioncatcher/build/main.nf @@ -0,0 +1,42 @@ +process FUSIONCATCHER_BUILD { + tag "fusioncatcher_build" + label 'process_medium' + + conda "bioconda::fusioncatcher=1.33" + container "docker.io/clinicalgenomics/fusioncatcher:1.33" + + input: + val ensembl_version + + output: + path "*" , emit: reference + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + + def args = task.ext.args ?: '' + """ + fusioncatcher-build \\ + -g homo_sapiens \\ + -o human_${human_version} \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) + END_VERSIONS + """ + + stub: + """ + mkdir human_v${ensembl_version} + touch human_v${ensembl_version}/ensembl_fully_overlapping_genes.txt + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) + END_VERSIONS + """ +} diff --git a/modules/local/fusioncatcher/build/meta.yml b/modules/local/fusioncatcher/build/meta.yml new file mode 100644 index 000000000..40421a4ee --- /dev/null +++ b/modules/local/fusioncatcher/build/meta.yml @@ -0,0 +1,25 @@ +name: fusioncatcher_download +description: Build genome for fusioncatcher +keywords: + - sort +tools: + - fusioncatcher: + description: Build genome for fusioncatcher + homepage: https://github.com/ndaniel/fusioncatcher/ + documentation: https://github.com/ndaniel/fusioncatcher/blob/master/doc/manual.md + tool_dev_url: https://github.com/ndaniel/fusioncatcher/ + doi: "10.1101/011650" + licence: ["GPL v3"] + +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - reference: + type: directory + description: Path to fusioncatcher references + pattern: "*" + +authors: + - "@praveenraj2018, @rannick" diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 156e70b65..7f59d9205 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -5,6 +5,10 @@ process FUSIONCATCHER_DOWNLOAD { conda "bioconda::fusioncatcher=1.33" container "docker.io/clinicalgenomics/fusioncatcher:1.33" + + input: + val ensembl_version + output: path "*" , emit: reference path "versions.yml" , emit: versions @@ -16,22 +20,14 @@ process FUSIONCATCHER_DOWNLOAD { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def human_version = "v102" - def url = "http://sourceforge.net/projects/fusioncatcher/files/data/human_${human_version}.tar.gz.aa" + def url = """ - if wget --spider "$url" 2>/dev/null; then - wget $args $url - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${human_version}.tar.gz.ab - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${human_version}.tar.gz.ac - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${human_version}.tar.gz.ad - cat human_${human_version}.tar.gz.* | tar xz - rm human_${human_version}.tar* - else - fusioncatcher-build \\ - -g homo_sapiens \\ - -o human_${human_version} \\ - $args2 - fi + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.aa + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ab + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ac + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ad + cat human_${ensembl_version}.tar.gz.* | tar xz + rm human_${ensembl_version}.tar* cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -40,9 +36,9 @@ process FUSIONCATCHER_DOWNLOAD { """ stub: - def human_version = "v102" """ - mkdir human_${human_version} + mkdir human_v${ensembl_version} + touch human_v${ensembl_version}/ensembl_fully_overlapping_genes.txt cat <<-END_VERSIONS > versions.yml "${task.process}": fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) diff --git a/modules/local/uscs/custom_gtftogenepred/main.nf b/modules/local/uscs/custom_gtftogenepred/main.nf index 78fcbd296..53a74e3d3 100644 --- a/modules/local/uscs/custom_gtftogenepred/main.nf +++ b/modules/local/uscs/custom_gtftogenepred/main.nf @@ -1,4 +1,5 @@ process GTF_TO_REFFLAT { + tag "$meta.id" label 'process_low' conda "bioconda::ucsc-gtftogenepred=377" diff --git a/nextflow.config b/nextflow.config index 265c3c0b3..fe2dd83da 100644 --- a/nextflow.config +++ b/nextflow.config @@ -27,19 +27,11 @@ params { // Genome genome = 'GRCh38' genomes_base = "${params.outdir}/references" - ensembl_version = 102 + ensembl_version = 112 read_length = 100 starfusion_build = true genomes = [:] - // Genomes options - fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa" - fai = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa.fai" - gtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf" - chrgtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.chr.gtf" - refflat = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.chr.gtf.refflat" - rrna_intervals = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.interval_list" - // Filtering tools_cutoff = 1 @@ -72,14 +64,21 @@ params { skip_qc = false skip_vis = false + // Download references option + download_refs = true + // Path to references + fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa" + fai = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa.fai" + gtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf" + chrgtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.chr.gtf" + refflat = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf.refflat" + rrna_intervals = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.interval_list" ensembl_ref = "${params.genomes_base}/ensembl" - arriba_ref = "${params.genomes_base}/arriba" arriba_ref_blacklist = "${params.genomes_base}/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz" - arriba_ref_cytobands = "${params.genomes_base}/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv" arriba_ref_known_fusions = "${params.genomes_base}/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz" arriba_ref_protein_domains = "${params.genomes_base}/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3" - fusioncatcher_ref = "${params.genomes_base}/fusioncatcher/human_v102" + fusioncatcher_ref = "${params.genomes_base}/fusioncatcher/human_v${params.ensembl_version}" hgnc_ref = "${params.genomes_base}/hgnc/hgnc_complete_set.txt" hgnc_date = "${params.genomes_base}/hgnc/HGNC-DB-timestamp.txt" salmon_index = "${params.genomes_base}/salmon/salmon" @@ -88,6 +87,13 @@ params { fusionreport_ref = "${params.genomes_base}/fusion_report_db" + // Internal file presence checks + salmon_index_stub_check = "${params.genomes_base}/salmon/salmon/complete_ref_lens.bin" + starindex_ref_stub_check = "${params.genomes_base}/star/star/Genome" + fusionreport_ref_stub_check = "${params.genomes_base}/fusion_report_db/mitelman.db" + fusioncatcher_ref_stub_check = "${params.genomes_base}/fusioncatcher/human_v${params.ensembl_version}/ensembl_fully_overlapping_genes.txt" + starfusion_ref_stub_check = "${params.genomes_base}/starfusion/Pfam-A.hmm" + // Path to fusion outputs arriba_fusions = null starfusion_fusions = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 69270631f..0889caa20 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -105,21 +105,11 @@ "fa_icon": "far fa-file-code", "description": "Build or run arriba references/analyses" }, - "arriba_ref": { - "type": "string", - "fa_icon": "far fa-file-code", - "description": "Path to arriba references" - }, "arriba_ref_blacklist": { "type": "string", "fa_icon": "far fa-file-code", "description": "Path to arriba reference blacklist" }, - "arriba_ref_cytobands": { - "type": "string", - "fa_icon": "far fa-file-code", - "description": "Path to arriba reference cytobands" - }, "arriba_ref_known_fusions": { "type": "string", "fa_icon": "far fa-file-code", @@ -135,6 +125,11 @@ "fa_icon": "far fa-file-code", "description": "Path to arriba output" }, + "download_refs": { + "type": "boolean", + "fa_icon": "far fa-file-code", + "description": "Download references instead of building them (for fusioncatcher and starfusion)" + }, "ensembl_ref": { "type": "string", "fa_icon": "far fa-file-code", @@ -160,6 +155,11 @@ "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, + "fusioncatcher_ref_stub_check": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Path to file in fusioncatcher references" + }, "fusioninspector_limitSjdbInsertNsj": { "type": "integer", "fa_icon": "far fa-file-code", @@ -185,6 +185,11 @@ "fa_icon": "far fa-file-code", "description": "Path to fusionreport references" }, + "fusionreport_ref_stub_check": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Path to file in fusionreport references" + }, "hgnc_ref": { "type": "string", "fa_icon": "far fa-file-code", @@ -205,6 +210,11 @@ "fa_icon": "far fa-file-code", "description": "Path to salmon index" }, + "salmon_index_stub_check": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Path to file in salmon index" + }, "starfusion": { "type": "boolean", "fa_icon": "far fa-file-code", @@ -220,6 +230,11 @@ "fa_icon": "far fa-file-code", "description": "Path to starfusion references" }, + "starfusion_ref_stub_check": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Path to file in starfusion references" + }, "starindex": { "type": "boolean", "fa_icon": "far fa-file-code", @@ -230,6 +245,11 @@ "fa_icon": "far fa-file-code", "description": "Path to starindex references" }, + "starindex_ref_stub_check": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Path to file in starindex references" + }, "stringtie": { "type": "boolean", "fa_icon": "far fa-file-code", @@ -326,14 +346,6 @@ "description": "Path to GTF genome file.", "fa_icon": "far fa-file-code" }, - "transcript": { - "type": "string", - "format": "file-path", - "mimetype": "text/plain", - "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", - "description": "Path to GTF genome file.", - "fa_icon": "far fa-file-code" - }, "refflat": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index bb2acc4d3..0101c4d33 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -7,6 +7,7 @@ include { ARRIBA_DOWNLOAD } from '../../modules/local/arriba/download/main' include { ENSEMBL_DOWNLOAD } from '../../modules/local/ensembl/main' include { FUSIONCATCHER_DOWNLOAD } from '../../modules/local/fusioncatcher/download/main' +include { FUSIONCATCHER_BUILD } from '../../modules/local/fusioncatcher/build/main' include { FUSIONREPORT_DOWNLOAD } from '../../modules/local/fusionreport/download/main' include { HGNC_DOWNLOAD } from '../../modules/local/hgnc/main' include { STARFUSION_BUILD } from '../../modules/local/starfusion/build/main' @@ -37,82 +38,117 @@ workflow BUILD_REFERENCES { main: - ch_versions = Channel.empty() - def fake_meta = [:] - fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" if (!file(params.fasta).exists() || file(params.fasta).isEmpty() || - !file(params.chrgtf).exists() || file(params.chrgtf).isEmpty() || - !file(params.gtf).exists() || file(params.gtf).isEmpty()){ + !file(params.chrgtf).exists() || file(params.chrgtf).isEmpty() || + !file(params.gtf).exists() || file(params.gtf).isEmpty()){ + fake_meta = [:] + fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" ENSEMBL_DOWNLOAD(params.ensembl_version, params.genome, fake_meta)} - ch_fasta = {(!file(params.fasta).exists() || file(params.fasta).isEmpty()) ? ENSEMBL_DOWNLOAD.out.primary_assembly : Channel.fromPath(params.fasta).map { that -> [[id:that.Name], that] }.collect()} + ch_fasta = Channel.fromPath(params.fasta).map { that -> [[id:that.Name], that] } + ch_chrgtf = Channel.fromPath(params.chrgtf).map { that -> [[id:that.Name], that] } + ch_gtf = Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] } if (!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || - !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()){ + !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()){ HGNC_DOWNLOAD( )} + ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { that -> [[id:that.Name], that] } + ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } + - if (!file(params.fai).exists() || file(params.fai).isEmpty(){ - SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.primary_assembly, [[],[]])} + if (!file(params.fai).exists() || file(params.fai).isEmpty()){ + SAMTOOLS_FAIDX(ch_fasta, [[],[]])} + ch_fai = Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } - if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty(){ - GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.primary_assembly) - RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) + + if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty()){ + GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) + RRNA_TRANSCRIPTS(ch_gtf) CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) } + ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } + - if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty(){ // add condition for qc, check that dirs can also be checked with isEmpty() - GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ENSEMBL_DOWNLOAD.out.primary_assembly.map { meta, fasta -> [ fasta ] }) - SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + if (!file(params.refflat).exists() || file(params.refflat).isEmpty()){ + GTF_TO_REFFLAT(ch_gtf)} + ch_refflat = Channel.fromPath(params.refflat) + + + if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty() || + !file(params.salmon_index_stub_check).exists() || file(params.salmon_index_stub_check).isEmpty()){ // add condition for qc + GFFREAD(ch_gtf, ch_fasta.map{ meta, fasta -> [ fasta ] }) + SALMON_INDEX(ch_fasta.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) } + ch_salmon_index = Channel.fromPath(params.salmon_index) if ((params.starindex || params.all || params.starfusion || params.arriba) && - (!params.starindex_ref.exits() || params.starindex_ref.isEmpty()) - ) { - STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) + (!file(params.starindex_ref).exists() || file(params.starindex_ref).isEmpty() || + !file(params.starindex_ref_stub_check).exists() || file(params.starindex_ref_stub_check).isEmpty() )) { + STAR_GENOMEGENERATE(ch_fasta, ch_gtf) + } + ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } + + + if ((params.arriba || params.all) && + (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || + !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || + !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { + ARRIBA_DOWNLOAD()} + ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } + ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } + ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } + + + if ((params.fusioncatcher || params.all) && + (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || + !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { + if (params.download_refs) { + FUSIONCATCHER_DOWNLOAD(params.ensembl_version)} + else { + FUSIONCATCHER_BUILD(params.ensembl_version)} } - ch_starindex_ref = ... - - // if (params.arriba || params.all) { - // ARRIBA_DOWNLOAD() - // } - - // if (params.fusioncatcher || params.all) { - // FUSIONCATCHER_DOWNLOAD() - // } - - // if (params.starfusion || params.all) { - // if (params.starfusion_build){ - // STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) - // } else { - // STARFUSION_DOWNLOAD() - // } - // } - - // if (params.starfusion_build){ - // GTF_TO_REFFLAT(ENSEMBL_DOWNLOAD.out.gtf) - // } else { - // GTF_TO_REFFLAT(STARFUSION_DOWNLOAD.out.gtf) - // } - - // if (params.fusionreport || params.all) { - // FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) - // } + ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } - emit: - ch_fasta - ch_chrgtf = {(!file(params.chrgtf).exists() || file(params.chrgtf).isEmpty()) ? ENSEMBL_DOWNLOAD.out.chrgtf : Channel.fromPath(params.chrgtf).map { that -> [[id:that.Name], that] }.collect()} - ch_gtf = {(!file(params.gtf).exists() || file(params.gtf).isEmpty()) ? ENSEMBL_DOWNLOAD.out.gtf : Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] }.collect()} - ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() - ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() - ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() - ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() - ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() + + if ((params.starfusion || params.all) && + (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || + !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { + if (params.download_refs) { + STARFUSION_DOWNLOAD( ch_fasta, ch_gtf )} + else { + STARFUSION_BUILD( ch_fasta, ch_gtf )} + } + ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] } + if ((params.fusionreport || params.all) && + (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || + !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { + if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } + FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd )} + ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } + + emit: + ch_fasta + ch_chrgtf + ch_gtf + ch_hgnc_ref + ch_hgnc_date + ch_fai + ch_rrna_interval + ch_refflat + ch_salmon_index + ch_starindex_ref + ch_arriba_ref_blacklist + ch_arriba_ref_known_fusions + ch_arriba_ref_protein_domains + ch_fusioncatcher_ref + ch_starfusion_ref + ch_fusionreport_ref } /* diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index bf7fa1b8e..64bd3f99c 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -58,14 +58,7 @@ workflow RNAFUSION { // Reference channels - // ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() - // ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() - // ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() - // ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() - // ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() - // ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() - // ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() - // ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() + From a19abbde7f1268bf49b5e57a7485040fc592468d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 28 May 2024 21:14:21 +0200 Subject: [PATCH 031/887] fix params --- modules/local/fusioncatcher/build/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index afab999c0..c5eeeb451 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -21,7 +21,7 @@ process FUSIONCATCHER_BUILD { """ fusioncatcher-build \\ -g homo_sapiens \\ - -o human_${human_version} \\ + -o human_v${ensembl_version} \\ $args cat <<-END_VERSIONS > versions.yml From 93fbfb8bc795c3fe405d9e98c6199469e213e203 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 28 May 2024 21:25:30 +0200 Subject: [PATCH 032/887] fix --- modules/local/fusioncatcher/build/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index c5eeeb451..513535567 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -19,7 +19,7 @@ process FUSIONCATCHER_BUILD { def args = task.ext.args ?: '' """ - fusioncatcher-build \\ + fusioncatcher-build.py \\ -g homo_sapiens \\ -o human_v${ensembl_version} \\ $args From 49c133719ad62d6610bb9d0fd6e1a9e4b81aef73 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 11 Jun 2024 12:19:34 +0000 Subject: [PATCH 033/887] update docs --- README.md | 6 ++---- docs/usage.md | 12 ++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f34ee57ec..4324f2109 100644 --- a/README.md +++ b/README.md @@ -76,8 +76,7 @@ First, build the references: ```bash nextflow run nf-core/rnafusion \ - -profile \ - -profile test \ + -profile test, \ --outdir \ --build_references \ -stub @@ -87,8 +86,7 @@ Then perform the analysis: ```bash nextflow run nf-core/rnafusion \ - -profile \ - -profile test \ + -profile test, \ --outdir \ -stub ``` diff --git a/docs/usage.md b/docs/usage.md index 6ed114706..80ff457c5 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -31,6 +31,7 @@ The rnafusion pipeline needs references for the fusion detection tools, so downl ```bash nextflow run nf-core/rnafusion \ + -profile \ --build_references --all \ --cosmic_username --cosmic_passwd \ --genomes_base \ @@ -41,6 +42,7 @@ References for each tools can also be downloaded separately with: ```bash nextflow run nf-core/rnafusion \ + -profile \ --build_references -- -- ... \ --cosmic_username --cosmic_passwd \ --genomes_base \ @@ -59,6 +61,7 @@ Use credentials from QIAGEN and add `--qiagen` ```bash nextflow run nf-core/rnafusion \ + -profile \ --build_references -- -- ... \ --cosmic_username --cosmic_passwd \ --genomes_base \ @@ -75,6 +78,7 @@ If process `FUSIONREPORT_DOWNLOAD` times out, it could be due to network restric ```bash nextflow run nf-core/rnafusion \ + -profile \ --build_references \ --cosmic_username --cosmic_passwd \ --fusionreport \ @@ -134,6 +138,7 @@ The pipeline can either be run using all fusion detection tools or specifying in ```bash nextflow run nf-core/rnafusion \ + -profile \ --all \ --input \ --genomes_base \ @@ -144,6 +149,7 @@ To run only a specific detection tool use: `--tool`: ```bash nextflow run nf-core/rnafusion \ + -profile \ -- -- ... \ --input \ --genomes_base \ @@ -200,6 +206,7 @@ When the flag `--fastp_trim` is used, `fastp` is used to provide all tools with ```bash nextflow run nf-core/rnafusion \ +-profile \ -- -- ... \ --input \ --genomes_base \ @@ -213,6 +220,7 @@ nextflow run nf-core/rnafusion \ ```bash nextflow run nf-core/rnafusion \ + -profile \ -- -- ... \ --input \ --genomes_base \ @@ -226,6 +234,7 @@ nextflow run nf-core/rnafusion \ ```bash nextflow run nf-core/rnafusion \ + -profile \ -- -- ... \ --input \ --genomes_base \ @@ -246,6 +255,7 @@ FusionInspector can be run as a standalone with: ```bash nextflow run nf-core/rnafusion \ +-profile \ --fusioninspector_only \ --fusioninspector_fusions \ --input \ @@ -263,6 +273,7 @@ GENE3--GENE4 ```bash nextflow run nf-core/rnafusion \ +-profile \ --skip_qc \ --all OR <--tool> --input \ @@ -276,6 +287,7 @@ This will skip all QC-related processes (picard metrics collection) ```bash nextflow run nf-core/rnafusion \ +-profile \ --skip_vis \ --all OR <--tool> --input \ From 5be23dbc44ca63c18355420751b0c45b2b9fce23 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 11 Jun 2024 12:22:23 +0000 Subject: [PATCH 034/887] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5effdca59..be2b037dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed some Nextflow run-commands in the docs [#491](https://github.com/nf-core/rnafusion/pull/491) + ### Removed ## v3.0.2 - [2024-04-10] From b7dd1375cd74fa4c9b37edc415c665976b708930 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 13 Jun 2024 11:41:44 +0200 Subject: [PATCH 035/887] update refs generation --- conf/modules.config | 12 ++- modules/local/fusioncatcher/build/main.nf | 4 +- modules/local/fusioncatcher/download/main.nf | 2 +- nextflow.config | 1 + nextflow_schema.json | 4 + subworkflows/local/build_references.nf | 101 +++++++++++------- workflows/rnafusion.nf | 106 +++++++++---------- 7 files changed, 131 insertions(+), 99 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 44dec3397..e78f73dbb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -45,6 +45,10 @@ process { ] } + withName: 'CAT_FASTQ' { + ext.when = { !params.build_references } + } + withName: 'ENSEMBL_DOWNLOAD' { publishDir = [ path: { "${params.genomes_base}/ensembl" }, @@ -59,7 +63,7 @@ process { withName: 'FASTQC' { ext.args = '--quiet' - ext.when = { !params.skip_qc } + ext.when = { !params.skip_qc and not !params.build_references } publishDir = [ path: { "${params.outdir}/fastqc" }, mode: params.publish_dir_mode, @@ -69,6 +73,7 @@ process { withName: 'FASTQC_FOR_FASTP' { ext.args = '--quiet' + ext.when = ( !params.skip_qc) ext.prefix = { "${meta.id}_trimmed" } publishDir = [ path: { "${params.outdir}/fastqc_for_fastp" }, @@ -362,6 +367,11 @@ process { ] } + withName: 'TRIM_WORKFLOW:*' { + ext.when = { !params.build_references } + + } + withName: 'VCF_COLLECT' { ext.when = {!params.fusioninspector_only} } diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 513535567..15f7afedc 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -9,8 +9,8 @@ process FUSIONCATCHER_BUILD { val ensembl_version output: - path "*" , emit: reference - path "versions.yml" , emit: versions + path "human_v${ensembl_version}" , emit: reference + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 7f59d9205..ff146c95c 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -10,7 +10,7 @@ process FUSIONCATCHER_DOWNLOAD { val ensembl_version output: - path "*" , emit: reference + path "human_v${ensembl_version}" , emit: reference path "versions.yml" , emit: versions when: diff --git a/nextflow.config b/nextflow.config index fe2dd83da..b7d78f7d9 100644 --- a/nextflow.config +++ b/nextflow.config @@ -62,6 +62,7 @@ params { // Skip steps skip_qc = false + skip_vcf = false skip_vis = false // Download references option diff --git a/nextflow_schema.json b/nextflow_schema.json index 0889caa20..604e7b00a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -15,6 +15,10 @@ "type": "boolean", "description": "Skip QC steps" }, + "skip_vcf": { + "type": "boolean", + "description": "Skip vcf creation step" + } "skip_vis": { "type": "boolean", "description": "Skip visualisation steps" diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 0101c4d33..32602cc1e 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -46,21 +46,30 @@ workflow BUILD_REFERENCES { !file(params.gtf).exists() || file(params.gtf).isEmpty()){ fake_meta = [:] fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" - ENSEMBL_DOWNLOAD(params.ensembl_version, params.genome, fake_meta)} - ch_fasta = Channel.fromPath(params.fasta).map { that -> [[id:that.Name], that] } - ch_chrgtf = Channel.fromPath(params.chrgtf).map { that -> [[id:that.Name], that] } - ch_gtf = Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] } + ENSEMBL_DOWNLOAD(params.ensembl_version, params.genome, fake_meta) + ch_fasta = ENSEMBL_DOWNLOAD.out.primary_assembly + ch_chrgtf = ENSEMBL_DOWNLOAD.out.chrgtf + ch_gtf = ENSEMBL_DOWNLOAD.out.gtf + } else { + ch_fasta = Channel.fromPath(params.fasta).map { that -> [[id:that.Name], that] } + ch_chrgtf = Channel.fromPath(params.chrgtf).map { that -> [[id:that.Name], that] } + ch_gtf = Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] } + } + - if (!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || - !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()){ - HGNC_DOWNLOAD( )} - ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { that -> [[id:that.Name], that] } - ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } + if ((!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || + !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()) and not params.skip_vcf){ + HGNC_DOWNLOAD( ) + ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref + ch_hgnc_date =HGNC_DOWNLOAD.out.hgnc_date + } else { + ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { that -> [[id:that.Name], that] } + ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } + } - if (!file(params.fai).exists() || file(params.fai).isEmpty()){ - SAMTOOLS_FAIDX(ch_fasta, [[],[]])} - ch_fai = Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } + + ch_fai = (!file(params.fai).exists() || file(params.fai).isEmpty()) ? SAMTOOLS_FAIDX(ch_fasta, [[],[]]).fai : Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty()){ @@ -68,69 +77,81 @@ workflow BUILD_REFERENCES { RRNA_TRANSCRIPTS(ch_gtf) CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) - } - ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } + ch_rrna_interval = GATK4_BEDTOINTERVALLIST.out.interval_list + } else { + ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } + } - if (!file(params.refflat).exists() || file(params.refflat).isEmpty()){ - GTF_TO_REFFLAT(ch_gtf)} - ch_refflat = Channel.fromPath(params.refflat) + ch_refflat = (!file(params.refflat).exists() || file(params.refflat).isEmpty()) ? GTF_TO_REFFLAT.refflat : Channel.fromPath(params.refflat) if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty() || !file(params.salmon_index_stub_check).exists() || file(params.salmon_index_stub_check).isEmpty()){ // add condition for qc GFFREAD(ch_gtf, ch_fasta.map{ meta, fasta -> [ fasta ] }) SALMON_INDEX(ch_fasta.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + ch_salmon_index = SALMON_INDEX.out.index + } else { + ch_salmon_index = Channel.fromPath(params.salmon_index) } - ch_salmon_index = Channel.fromPath(params.salmon_index) if ((params.starindex || params.all || params.starfusion || params.arriba) && (!file(params.starindex_ref).exists() || file(params.starindex_ref).isEmpty() || !file(params.starindex_ref_stub_check).exists() || file(params.starindex_ref_stub_check).isEmpty() )) { STAR_GENOMEGENERATE(ch_fasta, ch_gtf) + ch_starindex_ref = STAR_GENOMEGENERATE.out.index + } else { + ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } } - ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } - if ((params.arriba || params.all) && - (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || - !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || - !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { - ARRIBA_DOWNLOAD()} - ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } - ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } - ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } +// if ((params.arriba || params.all) && +// (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || +// !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || +// !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { +// ARRIBA_DOWNLOAD() +// ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } +// ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } +// ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } +// } else { +// // need to update the module to emit blacklist,knownfusions etc +// } if ((params.fusioncatcher || params.all) && (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { if (params.download_refs) { - FUSIONCATCHER_DOWNLOAD(params.ensembl_version)} + FUSIONCATCHER_DOWNLOAD(params.ensembl_version) + ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference} else { - FUSIONCATCHER_BUILD(params.ensembl_version)} - } - ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } + FUSIONCATCHER_BUILD(params.ensembl_version) + ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference} + } else { + ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } + } if ((params.starfusion || params.all) && (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { if (params.download_refs) { - STARFUSION_DOWNLOAD( ch_fasta, ch_gtf )} + ch_starfusion_ref = STARFUSION_DOWNLOAD( ch_fasta, ch_gtf ).out.reference } else { - STARFUSION_BUILD( ch_fasta, ch_gtf )} - } - ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] } + ch_starfusion_ref = STARFUSION_BUILD( ch_fasta, ch_gtf ).out.reference } + } else { + ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] }} if ((params.fusionreport || params.all) && (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } - FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd )} - ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } + ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ).out.reference + } else { + ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } + } emit: ch_fasta @@ -143,9 +164,9 @@ workflow BUILD_REFERENCES { ch_refflat ch_salmon_index ch_starindex_ref - ch_arriba_ref_blacklist - ch_arriba_ref_known_fusions - ch_arriba_ref_protein_domains + // ch_arriba_ref_blacklist + // ch_arriba_ref_known_fusions + // ch_arriba_ref_protein_domains ch_fusioncatcher_ref ch_starfusion_ref ch_fusionreport_ref diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 64bd3f99c..eb0e19f49 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -57,11 +57,6 @@ workflow RNAFUSION { main: - // Reference channels - - - - ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() @@ -73,59 +68,60 @@ workflow RNAFUSION { BUILD_REFERENCES() -// // -// // Create channel from input file provided through params.input -// // -// Channel -// .fromSamplesheet("input") -// .map { -// meta, fastq_1, fastq_2, strandedness -> -// if (!fastq_2) { -// return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] -// } else { -// return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] -// } -// } -// .groupTuple() -// .map { -// validateInputSamplesheet(it) -// } -// .branch { -// meta, fastqs -> -// single : fastqs.size() == 1 -// return [ meta, fastqs.flatten() ] -// multiple: fastqs.size() > 1 -// return [ meta, fastqs.flatten() ] -// } -// .set { ch_fastq } - -// // -// // MODULE: Concatenate FastQ files from same sample if required -// // -// CAT_FASTQ ( -// ch_fastq.multiple -// ) -// .reads -// .mix(ch_fastq.single) -// .set { ch_cat_fastq } -// ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) + // + // Create channel from input file provided through params.input + // + Channel + .fromSamplesheet("input") + .map { + meta, fastq_1, fastq_2, strandedness -> + if (!fastq_2) { + return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] + } else { + return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] + } + } + .groupTuple() + .map { + validateInputSamplesheet(it) + } + .branch { + meta, fastqs -> + single : fastqs.size() == 1 + return [ meta, fastqs.flatten() ] + multiple: fastqs.size() > 1 + return [ meta, fastqs.flatten() ] + } + .set { ch_fastq } + // + // MODULE: Concatenate FastQ files from same sample if required + // + CAT_FASTQ ( + ch_fastq.multiple + ) + .reads + .mix(ch_fastq.single) + .set { ch_cat_fastq } + ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) -// // -// // MODULE: Run FastQC -// // -// FASTQC ( -// ch_cat_fastq -// ) -// ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) -// ch_versions = ch_versions.mix(FASTQC.out.versions) -// TRIM_WORKFLOW ( -// ch_cat_fastq -// ) -// ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher -// ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all -// ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + // + // MODULE: Run FastQC + // + FASTQC ( + ch_cat_fastq + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions) + + + TRIM_WORKFLOW ( + ch_cat_fastq + ) + ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher + ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all + ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) // SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') From 89be7c1ab16c8a25dc7dedc8cdc7a18a3c36d75f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 13 Jun 2024 12:15:12 +0200 Subject: [PATCH 036/887] fix small issues --- modules/local/fusioncatcher/build/main.nf | 2 +- nextflow_schema.json | 2 +- subworkflows/local/build_references.nf | 5 ++--- workflows/rnafusion.nf | 10 +++++----- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 15f7afedc..0258a2cca 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER_BUILD { label 'process_medium' conda "bioconda::fusioncatcher=1.33" - container "docker.io/clinicalgenomics/fusioncatcher:1.33" + container "docker.io/rannickscilifelab/fusioncatcher:1.33a" input: val ensembl_version diff --git a/nextflow_schema.json b/nextflow_schema.json index 604e7b00a..95238d65d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -18,7 +18,7 @@ "skip_vcf": { "type": "boolean", "description": "Skip vcf creation step" - } + }, "skip_vis": { "type": "boolean", "description": "Skip visualisation steps" diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 32602cc1e..49a18ce2a 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -58,11 +58,10 @@ workflow BUILD_REFERENCES { if ((!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || - !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()) and not params.skip_vcf){ + !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()) && !params.skip_vcf){ HGNC_DOWNLOAD( ) ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref - ch_hgnc_date =HGNC_DOWNLOAD.out.hgnc_date - + ch_hgnc_date = HGNC_DOWNLOAD.out.hgnc_date } else { ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { that -> [[id:that.Name], that] } ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index eb0e19f49..8067210a8 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -109,11 +109,11 @@ workflow RNAFUSION { // // MODULE: Run FastQC // - FASTQC ( - ch_cat_fastq - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions) + // FASTQC ( + // ch_cat_fastq + // ) + // ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + // ch_versions = ch_versions.mix(FASTQC.out.versions) TRIM_WORKFLOW ( From 0b854c6f75ae63ef683f8a0d0b04897f98920522 Mon Sep 17 00:00:00 2001 From: Alexander Peltzer Date: Thu, 8 Aug 2024 15:43:35 +0200 Subject: [PATCH 037/887] Add option to wget to ignore proxy certificates --- modules/local/arriba/download/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/arriba/download/main.nf b/modules/local/arriba/download/main.nf index 860439ade..61b9a91f7 100644 --- a/modules/local/arriba/download/main.nf +++ b/modules/local/arriba/download/main.nf @@ -13,7 +13,7 @@ process ARRIBA_DOWNLOAD { script: """ - wget https://github.com/suhrig/arriba/releases/download/v2.4.0/arriba_v2.4.0.tar.gz -O arriba_v2.4.0.tar.gz + wget https://github.com/suhrig/arriba/releases/download/v2.4.0/arriba_v2.4.0.tar.gz -O arriba_v2.4.0.tar.gz --no-check-certificate tar -xzvf arriba_v2.4.0.tar.gz rm arriba_v2.4.0.tar.gz mv arriba_v2.4.0/database/* . From 8f8eeaa28a17ea76ab871c80dba5fe641acc7441 Mon Sep 17 00:00:00 2001 From: Alexander Peltzer Date: Thu, 8 Aug 2024 14:59:49 +0000 Subject: [PATCH 038/887] Add changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 871c46594..21af3e270 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ 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). +## dev + +## Fixed + +- fix bug when trying to build indices behind a proxy and wget was unable to download arriba indices [[#495](https://github.com/nf-core/rnafusion/issues/495)] + ## v3.0.2 - [2024-04-10] ### Added From 0c6fe8283c61f0dc4557970ce576d08fc97ee909 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 12 Sep 2024 11:21:33 +0200 Subject: [PATCH 039/887] updates --- conf/base.config | 2 +- modules/local/fusioncatcher/build/main.nf | 2 +- modules/local/fusioncatcher/download/main.nf | 1 + modules/local/starfusion/download/main.nf | 1 + subworkflows/local/build_references.nf | 30 ++++++++++---------- subworkflows/local/trim_workflow.nf | 18 ++++-------- workflows/rnafusion.nf | 24 +++++++++------- 7 files changed, 38 insertions(+), 40 deletions(-) diff --git a/conf/base.config b/conf/base.config index 5b2e6f360..62d8dbf15 100644 --- a/conf/base.config +++ b/conf/base.config @@ -31,7 +31,7 @@ process { } withLabel:process_medium { cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } + memory = { check_max( 16.GB * task.attempt, 'memory' ) } time = { check_max( 8.h * task.attempt, 'time' ) } } withLabel:process_high { diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 0258a2cca..15f7afedc 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER_BUILD { label 'process_medium' conda "bioconda::fusioncatcher=1.33" - container "docker.io/rannickscilifelab/fusioncatcher:1.33a" + container "docker.io/clinicalgenomics/fusioncatcher:1.33" input: val ensembl_version diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index ff146c95c..aec162882 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -22,6 +22,7 @@ process FUSIONCATCHER_DOWNLOAD { def args2 = task.ext.args2 ?: '' def url = """ + TODO: move to my sourceforge wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.aa wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ab wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ac diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 9c9b14827..e3a4b1b85 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -9,6 +9,7 @@ process STARFUSION_DOWNLOAD { path "ctat_genome_lib_build_dir/ref_annot.gtf", emit: chrgtf + TODO: move to my sourceforge script: """ wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/__genome_libs_StarFv1.10/GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz --no-check-certificate diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 49a18ce2a..a1a640509 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -92,7 +92,7 @@ workflow BUILD_REFERENCES { ch_salmon_index = SALMON_INDEX.out.index } else { ch_salmon_index = Channel.fromPath(params.salmon_index) - } + } if ((params.starindex || params.all || params.starfusion || params.arriba) && @@ -105,17 +105,17 @@ workflow BUILD_REFERENCES { } -// if ((params.arriba || params.all) && -// (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || -// !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || -// !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { -// ARRIBA_DOWNLOAD() -// ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } -// ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } -// ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } -// } else { -// // need to update the module to emit blacklist,knownfusions etc -// } + if ((params.arriba || params.all) && + (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || + !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || + !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { + ARRIBA_DOWNLOAD() + ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } + ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } + ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } + } else { +// TODO need to update the module to emit blacklist,knownfusions etc + } if ((params.fusioncatcher || params.all) && @@ -163,9 +163,9 @@ workflow BUILD_REFERENCES { ch_refflat ch_salmon_index ch_starindex_ref - // ch_arriba_ref_blacklist - // ch_arriba_ref_known_fusions - // ch_arriba_ref_protein_domains + ch_arriba_ref_blacklist + ch_arriba_ref_known_fusions + ch_arriba_ref_protein_domains ch_fusioncatcher_ref ch_starfusion_ref ch_fusionreport_ref diff --git a/subworkflows/local/trim_workflow.nf b/subworkflows/local/trim_workflow.nf index ea21134db..f963451bc 100644 --- a/subworkflows/local/trim_workflow.nf +++ b/subworkflows/local/trim_workflow.nf @@ -8,9 +8,6 @@ workflow TRIM_WORKFLOW { main: ch_versions = Channel.empty() - ch_fastp_html = Channel.empty() - ch_fastp_json = Channel.empty() - ch_fastqc_trimmed = Channel.empty() if (params.fastp_trim) { FASTP(reads, params.adapter_fasta, false, false) @@ -19,24 +16,21 @@ workflow TRIM_WORKFLOW { FASTQC_FOR_FASTP(FASTP.out.reads) ch_versions = ch_versions.mix(FASTQC_FOR_FASTP.out.versions) - ch_reads_all = FASTP.out.reads - ch_reads_fusioncatcher = ch_reads_all + ch_reads = FASTP.out.reads ch_fastp_html = FASTP.out.html ch_fastp_json = FASTP.out.json ch_fastqc_trimmed = FASTQC_FOR_FASTP.out.zip } else { - ch_reads_all = reads - ch_reads_fusioncatcher = reads + ch_reads = reads } emit: - ch_reads_all - ch_reads_fusioncatcher - ch_fastp_html - ch_fastp_json - ch_fastqc_trimmed + trimmed_reads = ch_reads + fastp_html = ch_fastp_html.ifEmpty([]) + fastp_json = ch_fastp_json.ifEmpty([]) + fastqc_trimmed = ch_fastqc_trimmed.ifEmpty([]) versions = ch_versions } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 8067210a8..302f2829f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -107,26 +107,28 @@ workflow RNAFUSION { // - // MODULE: Run FastQC + // QC from FASTQ files // - // FASTQC ( - // ch_cat_fastq - // ) - // ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - // ch_versions = ch_versions.mix(FASTQC.out.versions) + FASTQC ( + ch_cat_fastq + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions) + SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) + // + // Trimming + // TRIM_WORKFLOW ( ch_cat_fastq ) - ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher - ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all + ch_reads = TRIM_WORKFLOW.out.trimmed_reads ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) -// SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') - - // // // // SUBWORKFLOW: Run STAR alignment and Arriba // // From 40da42dc561fbbf8ec9a6a6dd2f18d67eaeec118 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 12 Sep 2024 11:33:15 +0200 Subject: [PATCH 040/887] update modules again --- modules.json | 56 +- .../agat/convertspgff2tsv/environment.yml | 2 - .../agat/convertspgff2tsv/tests/main.nf.test | 4 +- modules/nf-core/arriba/arriba/environment.yml | 2 - .../nf-core/arriba/download/environment.yml | 2 - modules/nf-core/arriba/download/main.nf | 2 + .../arriba/download/tests/main.nf.test | 35 + .../arriba/download/tests/main.nf.test.snap | 35 + .../bedops/convert2bed/environment.yml | 2 - .../bedops/convert2bed/tests/main.nf.test | 4 +- modules/nf-core/cat/cat/environment.yml | 2 - modules/nf-core/cat/cat/main.nf | 1 - modules/nf-core/cat/cat/tests/main.nf.test | 27 +- .../nf-core/cat/cat/tests/main.nf.test.snap | 74 +- modules/nf-core/cat/fastq/environment.yml | 2 - modules/nf-core/cat/fastq/main.nf | 10 +- modules/nf-core/cat/fastq/tests/main.nf.test | 136 +- .../nf-core/cat/fastq/tests/main.nf.test.snap | 207 ++ modules/nf-core/fastp/environment.yml | 2 - modules/nf-core/fastp/main.nf | 21 +- modules/nf-core/fastp/meta.yml | 6 +- modules/nf-core/fastp/tests/main.nf.test | 823 +++--- modules/nf-core/fastp/tests/main.nf.test.snap | 1361 ++++++++-- modules/nf-core/fastqc/environment.yml | 2 - modules/nf-core/fastqc/main.nf | 5 +- modules/nf-core/fastqc/tests/main.nf.test | 225 +- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++- .../gatk4/bedtointervallist/environment.yml | 2 - .../createsequencedictionary/environment.yml | 2 - .../gatk4/markduplicates/environment.yml | 2 - modules/nf-core/gffread/environment.yml | 2 - modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 14 +- modules/nf-core/multiqc/meta.yml | 13 + modules/nf-core/multiqc/tests/main.nf.test | 8 + .../nf-core/multiqc/tests/main.nf.test.snap | 20 +- modules/nf-core/multiqc/tests/nextflow.config | 5 + .../collectinsertsizemetrics/environment.yml | 4 +- .../picard/collectinsertsizemetrics/main.nf | 8 +- .../tests/main.nf.test | 62 + .../tests/main.nf.test.snap | 74 + .../collectrnaseqmetrics/environment.yml | 4 +- .../picard/collectrnaseqmetrics/main.nf | 4 +- .../picard/collectwgsmetrics/environment.yml | 4 +- .../nf-core/picard/collectwgsmetrics/main.nf | 4 +- .../collectwgsmetrics/tests/main.nf.test | 83 + .../collectwgsmetrics/tests/main.nf.test.snap | 28 + .../nf-core/rrnatranscripts/environment.yml | 2 - .../templates/get_rrna_transcripts.py | 8 +- .../rrnatranscripts/tests/main.nf.test | 4 +- modules/nf-core/salmon/index/environment.yml | 2 - modules/nf-core/salmon/quant/environment.yml | 2 - modules/nf-core/salmon/quant/main.nf | 11 +- .../nf-core/salmon/quant/tests/main.nf.test | 40 +- .../salmon/quant/tests/main.nf.test.snap | 123 +- .../nf-core/samtools/faidx/environment.yml | 7 +- modules/nf-core/samtools/faidx/main.nf | 4 +- .../samtools/faidx/tests/main.nf.test.snap | 30 +- .../nf-core/samtools/index/environment.yml | 6 +- modules/nf-core/samtools/index/main.nf | 11 +- .../nf-core/samtools/index/tests/main.nf.test | 87 +- .../samtools/index/tests/main.nf.test.snap | 264 +- modules/nf-core/samtools/sort/environment.yml | 6 +- modules/nf-core/samtools/sort/main.nf | 18 +- .../nf-core/samtools/sort/tests/main.nf.test | 52 +- .../samtools/sort/tests/main.nf.test.snap | 144 +- .../samtools/sort/tests/nextflow_cram.config | 8 + modules/nf-core/samtools/view/environment.yml | 6 +- modules/nf-core/samtools/view/main.nf | 44 +- modules/nf-core/samtools/view/meta.yml | 9 + .../nf-core/samtools/view/tests/main.nf.test | 2 + .../samtools/view/tests/main.nf.test.snap | 58 +- modules/nf-core/star/align/environment.yml | 2 - modules/nf-core/star/align/main.nf | 4 +- modules/nf-core/star/align/tests/main.nf.test | 523 +++- .../star/align/tests/main.nf.test.snap | 2288 +++++++++++++---- .../star/genomegenerate/environment.yml | 2 - .../star/genomegenerate/tests/main.nf.test | 39 +- .../genomegenerate/tests/main.nf.test.snap | 182 +- .../nf-core/stringtie/merge/environment.yml | 2 - .../stringtie/merge/tests/main.nf.test | 2 +- .../stringtie/stringtie/environment.yml | 2 - .../stringtie/stringtie/tests/main.nf.test | 139 +- .../stringtie/tests/main.nf.test.snap | 504 +++- .../ucsc/gtftogenepred/environment.yml | 2 - .../ucsc/gtftogenepred/tests/main.nf.test | 36 + .../gtftogenepred/tests/main.nf.test.snap | 51 + .../ucsc/gtftogenepred/tests/nextflow.config | 8 + 88 files changed, 6478 insertions(+), 2021 deletions(-) create mode 100644 modules/nf-core/arriba/download/tests/main.nf.test create mode 100644 modules/nf-core/arriba/download/tests/main.nf.test.snap create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test create mode 100644 modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test create mode 100644 modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/sort/tests/nextflow_cram.config create mode 100644 modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test create mode 100644 modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test.snap create mode 100644 modules/nf-core/ucsc/gtftogenepred/tests/nextflow.config diff --git a/modules.json b/modules.json index b3150b16b..2b34aabb8 100644 --- a/modules.json +++ b/modules.json @@ -7,142 +7,142 @@ "nf-core": { "agat/convertspgff2tsv": { "branch": "master", - "git_sha": "b1d41826971b91f9649b46a8f3ccb226ee150c85", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", - "git_sha": "bbaeb3a3149def237b9d0acb9ab749ae98088e29", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "arriba/download": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "bedops/convert2bed": { "branch": "master", - "git_sha": "bbd685cd308e4d8bcf0c2caf82da3ee3c9e24157", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "9437e6053dccf4aafa022bfd6e7e9de67e625af8", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "4fc983ad0b30e6e32696fa7d980c76c7bfe1c03e", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "95cf5fe0194c7bf5cb0e3027a2eb7e7c89385080", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "d3f215802f696f7993f25c759781d2db91232015", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "e6fe277739f5894711405af3e717b2470bd956b5", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", - "git_sha": "194fca815cf594646e638fa5476acbcc296f1850", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "gffread": { "branch": "master", - "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "picard/collectrnaseqmetrics": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "rrnatranscripts": { "branch": "master", - "git_sha": "7b17de553ee27a17478f6bf9df15acd26b1ef377", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "salmon/index": { "branch": "master", - "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", - "git_sha": "cb6b2b94fc40dea58f0b1e3dd095f3dd24f2ac8a", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "f153f1f10e1083c49935565844cccb7453021682", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "4352dbdb09ec40db71e9b172b97a01dcf5622c26", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "0bd7d2333a88483aa0476acea172e9f5f6dd83bb", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "star/align": { "branch": "master", - "git_sha": "a21faa6a3481af92a343a10926f59c189a2c16c9", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "a21faa6a3481af92a343a10926f59c189a2c16c9", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", - "git_sha": "5756b12b1fab0c07f05b9ad2d5d5c262b1a2c1ef", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "b1b959609bda44341120aed1766329909f54b8d0", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "ucsc/gtftogenepred": { "branch": "master", - "git_sha": "acb0880789a6ebc2168d3b2d3d42b5bce6a62431", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] } } diff --git a/modules/nf-core/agat/convertspgff2tsv/environment.yml b/modules/nf-core/agat/convertspgff2tsv/environment.yml index 690f50ae5..0410ee765 100644 --- a/modules/nf-core/agat/convertspgff2tsv/environment.yml +++ b/modules/nf-core/agat/convertspgff2tsv/environment.yml @@ -1,7 +1,5 @@ -name: agat_convertspgff2tsv channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test index 4898a4a9b..6a2e8942e 100644 --- a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test +++ b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] """ } @@ -40,7 +40,7 @@ nextflow_process { """ input[0] = [ [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] """ } diff --git a/modules/nf-core/arriba/arriba/environment.yml b/modules/nf-core/arriba/arriba/environment.yml index 8494c8c03..d0883a0d2 100644 --- a/modules/nf-core/arriba/arriba/environment.yml +++ b/modules/nf-core/arriba/arriba/environment.yml @@ -1,7 +1,5 @@ -name: arriba_arriba channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::arriba=2.4.0 diff --git a/modules/nf-core/arriba/download/environment.yml b/modules/nf-core/arriba/download/environment.yml index dc7d3bf99..d0883a0d2 100644 --- a/modules/nf-core/arriba/download/environment.yml +++ b/modules/nf-core/arriba/download/environment.yml @@ -1,7 +1,5 @@ -name: arriba_download channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::arriba=2.4.0 diff --git a/modules/nf-core/arriba/download/main.nf b/modules/nf-core/arriba/download/main.nf index 7f11898bd..96a4e3362 100644 --- a/modules/nf-core/arriba/download/main.nf +++ b/modules/nf-core/arriba/download/main.nf @@ -7,6 +7,8 @@ process ARRIBA_DOWNLOAD { 'https://depot.galaxyproject.org/singularity/arriba:2.4.0--h0033a41_2' : 'biocontainers/arriba:2.4.0--h0033a41_2' }" + input: + output: path "*" , emit: reference path "versions.yml" , emit: versions diff --git a/modules/nf-core/arriba/download/tests/main.nf.test b/modules/nf-core/arriba/download/tests/main.nf.test new file mode 100644 index 000000000..cccc95db2 --- /dev/null +++ b/modules/nf-core/arriba/download/tests/main.nf.test @@ -0,0 +1,35 @@ + +nextflow_process { + + name "Test Process ARRIBA_DOWNLOAD" + script "../main.nf" + process "ARRIBA_DOWNLOAD" + + tag "modules" + tag "modules_nfcore" + tag "arriba" + tag "arriba/download" + + test("test-arriba-download") { + + when { + process { + """ + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.reference[0].collect { file(it).name }.toSorted(), + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/arriba/download/tests/main.nf.test.snap b/modules/nf-core/arriba/download/tests/main.nf.test.snap new file mode 100644 index 000000000..eda3f7066 --- /dev/null +++ b/modules/nf-core/arriba/download/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "test-arriba-download": { + "content": [ + [ + "CREDITS", + "RefSeq_viral_genomes_v2.4.0.fa.gz", + "blacklist_hg19_hs37d5_GRCh37_v2.4.0.tsv.gz", + "blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "blacklist_mm10_GRCm38_v2.4.0.tsv.gz", + "blacklist_mm39_GRCm39_v2.4.0.tsv.gz", + "cytobands_hg19_hs37d5_GRCh37_v2.4.0.tsv", + "cytobands_hg38_GRCh38_v2.4.0.tsv", + "cytobands_mm10_GRCm38_v2.4.0.tsv", + "cytobands_mm39_GRCm39_v2.4.0.tsv", + "known_fusions_hg19_hs37d5_GRCh37_v2.4.0.tsv.gz", + "known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "known_fusions_mm10_GRCm38_v2.4.0.tsv.gz", + "known_fusions_mm39_GRCm39_v2.4.0.tsv.gz", + "protein_domains_hg19_hs37d5_GRCh37_v2.4.0.gff3", + "protein_domains_hg38_GRCh38_v2.4.0.gff3", + "protein_domains_mm10_GRCm38_v2.4.0.gff3", + "protein_domains_mm39_GRCm39_v2.4.0.gff3", + "versions.yml" + ], + [ + "versions.yml:md5,98c69df5eaea5caf0b4af7b8d7af4893" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-22T17:00:38.086459" + } +} \ No newline at end of file diff --git a/modules/nf-core/bedops/convert2bed/environment.yml b/modules/nf-core/bedops/convert2bed/environment.yml index 049b29e9b..3c13066f7 100644 --- a/modules/nf-core/bedops/convert2bed/environment.yml +++ b/modules/nf-core/bedops/convert2bed/environment.yml @@ -1,7 +1,5 @@ -name: "bedops_convert2bed" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::bedops=2.4.41" diff --git a/modules/nf-core/bedops/convert2bed/tests/main.nf.test b/modules/nf-core/bedops/convert2bed/tests/main.nf.test index 183f8de6c..3f2b193a6 100644 --- a/modules/nf-core/bedops/convert2bed/tests/main.nf.test +++ b/modules/nf-core/bedops/convert2bed/tests/main.nf.test @@ -17,7 +17,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) ] """ } @@ -41,7 +41,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) ] """ } diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml index 17a04ef23..9b01c865a 100644 --- a/modules/nf-core/cat/cat/environment.yml +++ b/modules/nf-core/cat/cat/environment.yml @@ -1,7 +1,5 @@ -name: cat_cat channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index adbdbd7ba..2862c64cd 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -76,4 +76,3 @@ def getFileSuffix(filename) { def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) } - diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index fcee2d19f..9cb161788 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -29,7 +29,8 @@ nextflow_process { then { assertAll( { assert !process.success }, - { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") } + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,8 +84,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_zipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_zipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -142,8 +147,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -170,8 +179,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_one_file_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_one_file_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap index 423571ba2..b7623ee65 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -1,10 +1,4 @@ { - "test_cat_unzipped_zipped_size": { - "content": [ - 375 - ], - "timestamp": "2023-10-16T14:33:08.049445686" - }, "test_cat_unzipped_unzipped": { "content": [ { @@ -34,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:18.500464399" }, "test_cat_zipped_unzipped": { @@ -65,9 +63,13 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:49.642741302" }, - "test_cat_zipped_zipped_lines": { + "test_cat_zipped_zipped": { "content": [ [ "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", @@ -76,11 +78,31 @@ "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" + }, + "test_cat_name_conflict": { + "content": [ + [ + ] ], - "timestamp": "2023-10-16T14:32:33.629048645" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" }, - "test_cat_unzipped_zipped_lines": { + "test_cat_one_file_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -89,11 +111,19 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:08.038830506" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" }, - "test_cat_one_file_unzipped_zipped_lines": { + "test_cat_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -102,20 +132,16 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:21.39642399" - }, - "test_cat_zipped_zipped_size": { - "content": [ - 78 - ], - "timestamp": "2023-10-16T14:32:33.641869244" - }, - "test_cat_one_file_unzipped_zipped_size": { - "content": [ - 374 - ], - "timestamp": "2023-10-16T14:33:21.4094373" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" } } \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml index 8c69b121f..c7eb9bd1c 100644 --- a/modules/nf-core/cat/fastq/environment.yml +++ b/modules/nf-core/cat/fastq/environment.yml @@ -1,7 +1,5 @@ -name: cat_fastq channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::coreutils=8.30 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index f132b2adc..b68e5f911 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -53,9 +53,9 @@ process CAT_FASTQ { def prefix = task.ext.prefix ?: "${meta.id}" def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] if (meta.single_end) { - if (readList.size > 1) { + if (readList.size >= 1) { """ - touch ${prefix}.merged.fastq.gz + echo '' | gzip > ${prefix}.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -64,10 +64,10 @@ process CAT_FASTQ { """ } } else { - if (readList.size > 2) { + if (readList.size >= 2) { """ - touch ${prefix}_1.merged.fastq.gz - touch ${prefix}_2.merged.fastq.gz + echo '' | gzip > ${prefix}_1.merged.fastq.gz + echo '' | gzip > ${prefix}_2.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index a71dcb8df..f88a78b6c 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -13,9 +13,6 @@ nextflow_process { test("test_cat_fastq_single_end") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -38,9 +35,6 @@ nextflow_process { test("test_cat_fastq_paired_end") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -65,9 +59,6 @@ nextflow_process { test("test_cat_fastq_single_end_same_name") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -90,9 +81,6 @@ nextflow_process { test("test_cat_fastq_paired_end_same_name") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -117,9 +105,129 @@ nextflow_process { test("test_cat_fastq_single_end_single_file") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_single_file - stub") { + + options "-stub" + + when { process { """ input[0] = Channel.of([ diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap index 43dfe28fc..aec119a94 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -28,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:30:39.816981" }, "test_cat_fastq_single_end_same_name": { @@ -59,6 +63,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:32:35.229332" }, "test_cat_fastq_single_end_single_file": { @@ -90,6 +98,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:34:00.058829" }, "test_cat_fastq_paired_end_same_name": { @@ -127,8 +139,123 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:33:33.031555" }, + "test_cat_fastq_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:28.244999" + }, + "test_cat_fastq_paired_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:57.070911" + }, + "test_cat_fastq_single_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:46.796254" + }, "test_cat_fastq_paired_end": { "content": [ { @@ -164,6 +291,86 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:32:02.270935" + }, + "test_cat_fastq_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:37.807553" + }, + "test_cat_fastq_single_end_single_file - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:14:51.861264" } } \ No newline at end of file diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml index 70389e664..26d4aca5d 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -1,7 +1,5 @@ -name: fastp channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastp=0.23.4 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 4fc19b744..e1b9f5656 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -10,6 +10,7 @@ process FASTP { input: tuple val(meta), path(reads) path adapter_fasta + val discard_trimmed_pass val save_trimmed_fail val save_merged @@ -18,9 +19,9 @@ process FASTP { 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 + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,6 +31,8 @@ process FASTP { def prefix = task.ext.prefix ?: "${meta.id}" def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' + def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_1.fastp.fastq.gz" ) + def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_2.fastp.fastq.gz" // 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') ) { @@ -59,7 +62,7 @@ process FASTP { fastp \\ --in1 ${prefix}.fastq.gz \\ - --out1 ${prefix}.fastp.fastq.gz \\ + $out_fq1 \\ --thread $task.cpus \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ @@ -81,8 +84,8 @@ process FASTP { fastp \\ --in1 ${prefix}_1.fastq.gz \\ --in2 ${prefix}_2.fastq.gz \\ - --out1 ${prefix}_1.fastp.fastq.gz \\ - --out2 ${prefix}_2.fastp.fastq.gz \\ + $out_fq1 \\ + $out_fq2 \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ $adapter_list \\ @@ -103,14 +106,16 @@ process FASTP { stub: def prefix = task.ext.prefix ?: "${meta.id}" def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end - def touch_reads = 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" : "" + def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" + def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : "" + def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_1.fail.fastq.gz ; echo '' | gzip > ${prefix}_2.fail.fastq.gz" """ - touch $touch_reads + $touch_reads + $touch_fail_fastq + $touch_merged touch "${prefix}.fastp.json" touch "${prefix}.fastp.html" touch "${prefix}.fastp.log" - $touch_merged cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index c22a16abd..8dfecc184 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -27,12 +27,16 @@ input: type: file description: File in FASTA format containing possible adapters to remove. pattern: "*.{fasta,fna,fas,fa}" + - discard_trimmed_pass: + type: boolean + description: Specify true to not write any reads that pass trimming thresholds. | + This can be used to use fastp for the output report only. - 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` + description: Specify true to save all merged reads to a file ending in `*.merged.fastq.gz` output: - meta: type: map diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index 6f1f48978..30dbb8aab 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -10,221 +10,290 @@ nextflow_process { 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 + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } 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") } + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_single_end-stub") { - - options '-stub' + test("test_fastp_paired_end") { when { - params { - outdir = "$outputDir" - } + process { """ adapter_fasta = [] + save_trimmed_pass = true save_trimmed_fail = false save_merged = false input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + [ 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 + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + test("fastp test_fastp_interleaved") { + + config './nextflow.interleaved.config' + when { + process { + """ + 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] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + 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") } + { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert snapshot( + process.out.reads, + process.out.json, + process.out.versions).match() } ) } } - test("test_fastp_paired_end") { + test("test_fastp_single_end_trim_fail") { when { - params { - outdir = "$outputDir" + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_trim_fail") { + + config './nextflow.save_failed.config' + when { 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] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert snapshot( + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.json, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_merged") { + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } 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") } + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() }, ) } } - test("test_fastp_paired_end-stub") { - - options '-stub' + test("test_fastp_paired_end_merged_adapterlist") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true + """ } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("
    ") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_single_end_qc_only") { + + when { 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] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + test("test_fastp_paired_end_qc_only") { + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = true + input[3] = false + input[4] = false """ } } @@ -232,114 +301,99 @@ nextflow_process { 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") } + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("fastp test_fastp_interleaved") { + test("test_fastp_single_end - stub") { + + options "-stub" - config './nextflow.interleaved.config' when { - params { - outdir = "$outputDir" + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end - stub") { + + options "-stub" + + when { + process { """ adapter_fasta = [] + save_trimmed_pass = true 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) ] + [ 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 + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } 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") } + { assert snapshot(process.out).match() } ) } } - test("fastp test_fastp_interleaved-stub") { + test("fastp - stub test_fastp_interleaved") { - options '-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 + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } @@ -347,277 +401,112 @@ nextflow_process { 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") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_single_end_trim_fail") { + test("test_fastp_single_end_trim_fail - stub") { + + options "-stub" 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 + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } 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") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_trim_fail") { + test("test_fastp_paired_end_trim_fail - stub") { + + options "-stub" 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 + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } 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") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_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 + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } 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") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged-stub") { + test("test_fastp_paired_end_merged_adapterlist - stub") { - options '-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 + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true """ } } @@ -625,101 +514,63 @@ nextflow_process { 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") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged_adapterlist") { + test("test_fastp_single_end_qc_only - stub") { + + options "-stub" 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:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_qc_only - stub") { + + options "-stub" + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = true + input[3] = false + input[4] = false """ } } 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") } + { assert snapshot(process.out).match() } ) } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 3e8762889..54be7e45f 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -1,55 +1,178 @@ { - "fastp test_fastp_interleaved_json": { + "test_fastp_single_end_qc_only - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:19:15.063001" + "timestamp": "2024-07-05T14:31:10.841098" }, - "test_fastp_paired_end_merged-for_stub_match": { + "test_fastp_paired_end": { "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}" + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:10:13.467574" + "timestamp": "2024-07-05T13:43:28.665779" }, - "versions_interleaved": { + "test_fastp_paired_end_merged_adapterlist": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:24.615634793" + "timestamp": "2024-07-05T13:44:18.210375" }, - "test_fastp_single_end_json": { + "test_fastp_single_end_qc_only": { "content": [ [ [ @@ -57,274 +180,1152 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" ] - ] - ], - "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" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:42.333545689" + "timestamp": "2024-07-05T13:44:27.380974" }, - "test_fastp_paired_end_match": { + "test_fastp_paired_end_trim_fail": { "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": [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], [ - "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": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + + ], [ [ - "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": [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:27.354051299" + "timestamp": "2024-07-05T13:43:58.749589" }, - "versions_interleaved-stub": { + "fastp - stub test_fastp_interleaved": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:46.535528418" + "timestamp": "2024-07-05T13:50:00.270029" }, - "versions_single_end_trim_fail": { + "test_fastp_single_end - stub": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:03.724591407" + "timestamp": "2024-07-05T13:49:42.502789" }, - "test_fastp_paired_end-for_stub_match": { + "test_fastp_paired_end_merged_adapterlist - stub": { "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:07:15.398827" + "timestamp": "2024-07-05T13:54:53.458252" }, - "versions_paired_end-stub": { + "test_fastp_paired_end_merged - stub": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:06.50017282" + "timestamp": "2024-07-05T13:50:27.689379" }, - "versions_single_end": { + "test_fastp_paired_end_merged": { "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": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:47.350653154" + "timestamp": "2024-07-05T13:44:08.68476" }, - "test_fastp_interleaved-for_stub_match": { + "test_fastp_paired_end - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:08:06.127974" + "timestamp": "2024-07-05T13:49:51.679221" }, - "versions_paired_end_trim_fail": { + "test_fastp_single_end": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:18.140484878" + "timestamp": "2024-07-05T13:43:18.834322" }, - "test_fastp_single_end-for_stub_match": { + "test_fastp_single_end_trim_fail - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:06:00.244202" + "timestamp": "2024-07-05T14:05:36.898142" }, - "test_fastp_single_end-_match": { + "test_fastp_paired_end_trim_fail - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:18:43.580336" + "timestamp": "2024-07-05T14:05:49.212847" }, - "versions_paired_end_merged_adapterlist": { + "fastp test_fastp_interleaved": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T12:05:37.845370554" + "timestamp": "2024-07-05T13:43:38.910832" }, - "versions_paired_end_merged": { + "test_fastp_single_end_trim_fail": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" + ] + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:32.860543858" + "timestamp": "2024-07-05T13:43:48.22378" }, - "test_fastp_single_end_trim_fail_json": { + "test_fastp_paired_end_qc_only": { "content": [ [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:36.334938" + }, + "test_fastp_paired_end_qc_only - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:08:41.942317" + "timestamp": "2024-07-05T14:31:27.096468" } } \ No newline at end of file diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38a9..691d4c763 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d79f1c862..d8989f481 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -26,7 +26,10 @@ process FASTQC { def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) + // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 + // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4d9..e9d79a074 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
    Mon 2 Oct 2023
    test.gz
    - // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
    Mon 2 Oct 2023
    test.gz
    + // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -54,16 +51,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,13 +78,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -109,13 +102,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -138,22 +129,20 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -173,21 +162,18 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } test("sarscov2 single-end [fastq] - stub") { - options "-stub" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 86f7c3115..d5db3092f 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/environment.yml b/modules/nf-core/gatk4/bedtointervallist/environment.yml index d6fbe2e77..55993f440 100644 --- a/modules/nf-core/gatk4/bedtointervallist/environment.yml +++ b/modules/nf-core/gatk4/bedtointervallist/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_bedtointervallist channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/createsequencedictionary/environment.yml b/modules/nf-core/gatk4/createsequencedictionary/environment.yml index 78822ad03..55993f440 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/environment.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_createsequencedictionary channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml index 7362eea6f..9fe34eb36 100644 --- a/modules/nf-core/gatk4/markduplicates/environment.yml +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -1,8 +1,6 @@ -name: gatk4_markduplicates channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/gffread/environment.yml b/modules/nf-core/gffread/environment.yml index c6df58ad0..ee2398416 100644 --- a/modules/nf-core/gffread/environment.yml +++ b/modules/nf-core/gffread/environment.yml @@ -1,7 +1,5 @@ -name: gffread channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gffread=0.12.7 diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb67e..f1cd99b07 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.24.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352f9..ceaec139e 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.24.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.24.1--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' def config = multiqc_config ? "--config $multiqc_config" : '' def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ $args \\ $config \\ + $prefix \\ $extra_config \\ $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35e..382c08cbc 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -29,6 +29,19 @@ input: type: file description: Optional logo file for MultiQC pattern: "*.{png}" + - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: type: file diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index f1c4242ef..33316a7dd 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -8,6 +8,8 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { @@ -17,6 +19,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -41,6 +45,8 @@ nextflow_process { input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -66,6 +72,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index bfebd8029..83fa080c8 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:48:55.657331" + "timestamp": "2024-07-10T12:41:34.562023" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:49.071937" + "timestamp": "2024-07-10T11:27:11.933869532" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:25.457567" + "timestamp": "2024-07-10T11:26:56.709849369" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 000000000..c537a6a3e --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml index 73ba7dc6b..ff4a85edb 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml +++ b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml @@ -1,7 +1,5 @@ -name: picard_collectinsertsizemetrics channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/collectinsertsizemetrics/main.nf b/modules/nf-core/picard/collectinsertsizemetrics/main.nf index 06c4bc172..1a49a7f0a 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/main.nf +++ b/modules/nf-core/picard/collectinsertsizemetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTINSERTSIZEMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -47,6 +47,10 @@ process PICARD_COLLECTINSERTSIZEMETRICS { stub: def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3072 + if (!task.memory) { + log.info '[Picard CollectInsertSizeMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } """ touch ${prefix}.pdf touch ${prefix}.txt diff --git a/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test b/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test new file mode 100644 index 000000000..4cf7a3323 --- /dev/null +++ b/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test @@ -0,0 +1,62 @@ + +nextflow_process { + + name "Test Process PICARD_COLLECTINSERTSIZEMETRICS" + script "../main.nf" + process "PICARD_COLLECTINSERTSIZEMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collectinsertsizemetrics" + + test("test-picard-collectinsertsizemetrics") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).readLines()[5..8], + file(process.out.histogram[0][1]).name, + process.out.versions + ).match() + } + ) + } + } + + test("test-picard-collectinsertsizemetrics-stub") { + options '-stub' + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap new file mode 100644 index 000000000..bcb5b4557 --- /dev/null +++ b/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap @@ -0,0 +1,74 @@ +{ + "test-picard-collectinsertsizemetrics": { + "content": [ + [ + "## METRICS CLASS\tpicard.analysis.InsertSizeMetrics", + "MEDIAN_INSERT_SIZE\tMODE_INSERT_SIZE\tMEDIAN_ABSOLUTE_DEVIATION\tMIN_INSERT_SIZE\tMAX_INSERT_SIZE\tMEAN_INSERT_SIZE\tSTANDARD_DEVIATION\tREAD_PAIRS\tPAIR_ORIENTATION\tWIDTH_OF_10_PERCENT\tWIDTH_OF_20_PERCENT\tWIDTH_OF_30_PERCENT\tWIDTH_OF_40_PERCENT\tWIDTH_OF_50_PERCENT\tWIDTH_OF_60_PERCENT\tWIDTH_OF_70_PERCENT\tWIDTH_OF_80_PERCENT\tWIDTH_OF_90_PERCENT\tWIDTH_OF_95_PERCENT\tWIDTH_OF_99_PERCENT\tSAMPLE\tLIBRARY\tREAD_GROUP", + "209\t159\t46\t77\t364\t207.659794\t66.769018\t97\tFR\t25\t49\t59\t77\t93\t123\t145\t183\t223\t255\t311\t\t\t", + "" + ], + "test.pdf", + [ + "versions.yml:md5,4423bfe2194f61d919c382d2225b0835" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T12:23:29.392944" + }, + "test-picard-collectinsertsizemetrics-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,4423bfe2194f61d919c382d2225b0835" + ], + "histogram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,4423bfe2194f61d919c382d2225b0835" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T12:20:03.841884" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml index 542b2e823..ff4a85edb 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml +++ b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml @@ -1,7 +1,5 @@ -name: picard_collectrnaseqmetrics channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/collectrnaseqmetrics/main.nf b/modules/nf-core/picard/collectrnaseqmetrics/main.nf index f833a105c..0c8f2cfa2 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/main.nf +++ b/modules/nf-core/picard/collectrnaseqmetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTRNASEQMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/picard/collectwgsmetrics/environment.yml b/modules/nf-core/picard/collectwgsmetrics/environment.yml index 6a0b9258e..58d525818 100644 --- a/modules/nf-core/picard/collectwgsmetrics/environment.yml +++ b/modules/nf-core/picard/collectwgsmetrics/environment.yml @@ -1,8 +1,6 @@ -name: picard_collectwgsmetrics channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 - r::r-base diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 35f4129cf..6002a7ca9 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTWGSMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test new file mode 100644 index 000000000..a3984566d --- /dev/null +++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test @@ -0,0 +1,83 @@ + +nextflow_process { + + name "Test Process PICARD_COLLECTWGSMETRICS" + script "../main.nf" + process "PICARD_COLLECTWGSMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collectwgsmetrics" + + test("test-picard-collectwgsmetrics") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), + process.out.versions + ).match() + } + ) + } + } + + test("test-picard-collectwgsmetrics-with-interval") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap new file mode 100644 index 000000000..f188382b0 --- /dev/null +++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap @@ -0,0 +1,28 @@ +{ + "test-picard-collectwgsmetrics-with-interval": { + "content": [ + true, + [ + "versions.yml:md5,06b5898fb06823b736c90e1dcebe75fe" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:02:46.301176" + }, + "test-picard-collectwgsmetrics": { + "content": [ + true, + [ + "versions.yml:md5,06b5898fb06823b736c90e1dcebe75fe" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:02:25.132069" + } +} \ No newline at end of file diff --git a/modules/nf-core/rrnatranscripts/environment.yml b/modules/nf-core/rrnatranscripts/environment.yml index e812273bf..6f09494b4 100644 --- a/modules/nf-core/rrnatranscripts/environment.yml +++ b/modules/nf-core/rrnatranscripts/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "rrnatranscripts" channels: - conda-forge - bioconda - - defaults dependencies: - python=3.12.2 diff --git a/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py b/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py index 2e320e7bd..ea3ce0f49 100644 --- a/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py +++ b/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py @@ -10,6 +10,7 @@ logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) + def get_rrna_intervals(gtf: str, rrna_transcripts: str): """ Get lines containing ``#`` or ``gene_type rRNA`` or ```` or ``gene_type rRNA_pseudogene`` or ``gene_type MT_rRNA`` @@ -67,19 +68,16 @@ def format_yaml_like(data: dict, indent: int = 0) -> str: if __name__ == "__main__": - if '${task.ext.prefix}' != "null": + if "${task.ext.prefix}" != "null": prefix = "${task.ext.prefix}." else: prefix = "${task.ext.gtf}." - if not get_rrna_intervals('$gtf', f"{prefix}_rrna_intervals.gtf"): + if not get_rrna_intervals("$gtf", f"{prefix}_rrna_intervals.gtf"): logging.error("Failed to extract rrna transcipts.") - - # Write the versions versions_this_module = {} versions_this_module["${task.process}"] = {"python": platform.python_version()} with open("versions.yml", "w") as f: f.write(format_yaml_like(versions_this_module)) - diff --git a/modules/nf-core/rrnatranscripts/tests/main.nf.test b/modules/nf-core/rrnatranscripts/tests/main.nf.test index 1c29522ad..db0d55652 100644 --- a/modules/nf-core/rrnatranscripts/tests/main.nf.test +++ b/modules/nf-core/rrnatranscripts/tests/main.nf.test @@ -14,7 +14,7 @@ nextflow_process { process { """ input[0] = [ - file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] """ } } @@ -36,7 +36,7 @@ nextflow_process { process { """ input[0] = [ - file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] """ } } diff --git a/modules/nf-core/salmon/index/environment.yml b/modules/nf-core/salmon/index/environment.yml index a6607d964..471164faa 100644 --- a/modules/nf-core/salmon/index/environment.yml +++ b/modules/nf-core/salmon/index/environment.yml @@ -1,7 +1,5 @@ -name: salmon_index channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::salmon=1.10.1 diff --git a/modules/nf-core/salmon/quant/environment.yml b/modules/nf-core/salmon/quant/environment.yml index 862667241..471164faa 100644 --- a/modules/nf-core/salmon/quant/environment.yml +++ b/modules/nf-core/salmon/quant/environment.yml @@ -1,7 +1,5 @@ -name: salmon_quant channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::salmon=1.10.1 diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index e177b42ac..6c528b240 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -16,9 +16,10 @@ process SALMON_QUANT { val lib_type output: - tuple val(meta), path("${prefix}") , emit: results - tuple val(meta), path("*info.json"), emit: json_info, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}") , emit: results + tuple val(meta), path("*info.json") , emit: json_info, optional: true + tuple val(meta), path("*lib_format_counts.json"), emit: lib_format_counts, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -70,6 +71,9 @@ process SALMON_QUANT { if [ -f $prefix/aux_info/meta_info.json ]; then cp $prefix/aux_info/meta_info.json "${prefix}_meta_info.json" fi + if [ -f $prefix/lib_format_counts.json ]; then + cp $prefix/lib_format_counts.json "${prefix}_lib_format_counts.json" + fi cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -82,6 +86,7 @@ process SALMON_QUANT { """ mkdir ${prefix} touch ${prefix}_meta_info.json + touch ${prefix}_lib_format_counts.json cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test b/modules/nf-core/salmon/quant/tests/main.nf.test index b387fac2a..2964cc3d0 100644 --- a/modules/nf-core/salmon/quant/tests/main.nf.test +++ b/modules/nf-core/salmon/quant/tests/main.nf.test @@ -48,7 +48,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_single_end") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } @@ -80,7 +83,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_single_end_stub") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } @@ -112,7 +118,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_single_end_lib_type_a") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } @@ -144,7 +153,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_single_end_lib_type_a_stub") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } @@ -179,7 +191,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_pair_end") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } @@ -214,7 +229,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_pair_end stub") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } @@ -251,7 +269,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_pair_end_multiple") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } @@ -288,7 +309,10 @@ nextflow_process { { assert process.success }, { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("versions_pair_end_multiple_stub") } + { assert snapshot( + process.out.versions, + process.out.lib_format_counts + ).match() } ) } diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test.snap b/modules/nf-core/salmon/quant/tests/main.nf.test.snap index a80bc8aa8..547ce2de1 100644 --- a/modules/nf-core/salmon/quant/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/quant/tests/main.nf.test.snap @@ -1,125 +1,170 @@ { - "versions_single_end_lib_type_a_stub": { + "sarscov2 - single_end": { "content": [ [ "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-24T14:34:21.647863" - }, - "versions_pair_end_multiple_stub": { - "content": [ + ], [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + [ + { + "id": "test", + "single_end": true + }, + "test_lib_format_counts.json:md5,c7999dfccd32c090d94e5951522eecd4" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-04-24T14:34:48.03415" + "timestamp": "2024-06-14T09:51:22.424672" }, "sarscov2 - single_end stub": { "content": [ [ - + "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" ], [ - + [ + { + "id": "test", + "single_end": true + }, + "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-04-23T09:34:16.444372" + "timestamp": "2024-06-14T09:51:32.292277" }, - "versions_single_end": { + "sarscov2 - single_end lib type A": { "content": [ [ "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test_lib_format_counts.json:md5,c7999dfccd32c090d94e5951522eecd4" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-02-01T11:51:01.865730832" + "timestamp": "2024-06-14T09:51:42.656382" }, - "versions_pair_end": { + "sarscov2 - pair_end multiple": { "content": [ [ "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-06T17:10:56.121713" - }, - "versions_pair_end_stub": { - "content": [ + ], [ - + [ + { + "id": "test", + "single_end": false + }, + "test_lib_format_counts.json:md5,4a2ee0fac91a4a3471872808d8bd3ff8" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-04-23T08:38:01.276656" + "timestamp": "2024-06-14T09:52:33.03647" }, - "versions_pair_end stub": { + "sarscov2 - pair_end multiple stub": { "content": [ [ "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-04-24T14:34:36.570127" + "timestamp": "2024-06-14T09:52:43.388379" }, - "versions_single_end_stub": { + "sarscov2 - single_end lib type A stub": { "content": [ [ "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-04-24T14:28:01.864343" + "timestamp": "2024-06-14T09:51:52.612664" }, - "versions_single_end_lib_type_a": { + "sarscov2 - pair_end": { "content": [ [ "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test_lib_format_counts.json:md5,e9516e73c9fb39145513b2a41a0af95f" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-02-06T17:09:14.898351" + "timestamp": "2024-06-14T09:52:05.577881" }, - "versions_pair_end_multiple": { + "sarscov2 - pair_end stub": { "content": [ [ "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-02-06T17:11:07.846643" + "timestamp": "2024-06-14T09:52:15.286461" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 9c24eb0ab..b98cbb990 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -1,10 +1,7 @@ -name: samtools_faidx - channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::htslib=1.19.1 - - bioconda::samtools=1.19.2 + - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index cfe7ad95f..bdcdbc954 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : + 'biocontainers/samtools:1.20--h50ea8bc_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 3e651ef68..3223b72bc 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -18,7 +18,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ], "fa": [ @@ -36,7 +36,7 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ] } ], @@ -44,7 +44,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-03-18T16:22:39.412601" + "timestamp": "2024-05-28T15:42:14.779784761" }, "test_samtools_faidx_bgzip": { "content": [ @@ -71,7 +71,7 @@ ] ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ], "fa": [ @@ -95,7 +95,7 @@ ] ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ] } ], @@ -103,7 +103,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-03-18T16:23:22.427966" + "timestamp": "2024-05-28T15:42:20.256633877" }, "test_samtools_faidx_fasta": { "content": [ @@ -124,7 +124,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ], "fa": [ [ @@ -142,7 +142,7 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ] } ], @@ -150,7 +150,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-03-18T16:24:04.107537" + "timestamp": "2024-05-28T15:42:25.632577273" }, "test_samtools_faidx_stub_fasta": { "content": [ @@ -171,7 +171,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ], "fa": [ [ @@ -189,7 +189,7 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ] } ], @@ -197,7 +197,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-03-18T16:24:45.868463" + "timestamp": "2024-05-28T15:42:31.058424849" }, "test_samtools_faidx_stub_fai": { "content": [ @@ -218,7 +218,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ], "fa": [ @@ -236,7 +236,7 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,2db78952923a61e05d50b95518b21856" ] } ], @@ -244,6 +244,6 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-03-18T16:25:27.550554" + "timestamp": "2024-05-28T15:42:36.479929617" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index a5e506498..da2df5e43 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -1,8 +1,6 @@ -name: samtools_index channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::samtools=1.20 + - bioconda::htslib=1.20 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index dc14f98d6..e002585b9 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : + 'biocontainers/samtools:1.20--h50ea8bc_0' }" input: tuple val(meta), path(input) @@ -35,10 +35,11 @@ process SAMTOOLS_INDEX { """ stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" """ - touch ${input}.bai - touch ${input}.crai - touch ${input}.csi + touch ${input}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index bb7756d1c..ca34fb5cd 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -9,11 +9,7 @@ nextflow_process { tag "samtools/index" test("bai") { - when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -27,18 +23,13 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.bai).match("bai") }, - { assert snapshot(process.out.versions).match("bai_versions") } + { assert snapshot(process.out).match() } ) } } test("crai") { - when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -52,20 +43,83 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.crai).match("crai") }, - { assert snapshot(process.out.versions).match("crai_versions") } + { assert snapshot(process.out).match() } ) } } test("csi") { - config "./csi.nextflow.config" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.csi[0][1]).name, + process.out.versions + ).match() } + ) + } + } + + test("bai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("crai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("csi - stub") { + options "-stub" + config "./csi.nextflow.config" + + when { process { """ input[0] = Channel.of([ @@ -79,8 +133,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert path(process.out.csi.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("csi_versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index 3dc8e7de8..799d199ce 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,74 +1,250 @@ { - "crai_versions": { + "csi - stub": { "content": [ - [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ], + "bai": [ + + ], + "crai": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-13T16:12:00.324667957" + "timestamp": "2024-07-22T16:51:53.9057" }, - "csi_versions": { + "crai - stub": { "content": [ - [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-13T16:12:07.885103162" + "timestamp": "2024-07-22T16:51:45.931558" }, - "crai": { + "bai - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" ] - ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-12T18:41:38.446424" + "timestamp": "2024-07-22T16:51:34.807525" }, - "bai": { + "csi": { "content": [ + "test.paired_end.sorted.bam.csi", [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" - ] + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-12T18:40:46.579747" + "timestamp": "2024-07-22T16:52:55.688799" }, - "bai_versions": { + "crai": { "content": [ - [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "3": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:51:17.609533" + }, + "bai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-13T16:11:51.641425452" + "timestamp": "2024-07-22T16:51:04.16585" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index 4d898e486..da2df5e43 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -1,8 +1,6 @@ -name: samtools_sort channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::samtools=1.20 + - bioconda::htslib=1.20 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index fc374f980..8e019099c 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : + 'biocontainers/samtools:1.20--h50ea8bc_0' }" input: tuple val(meta) , path(bam) @@ -50,10 +50,20 @@ process SAMTOOLS_SORT { """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" """ - touch ${prefix}.bam - touch ${prefix}.bam.csi + touch ${prefix}.${extension} + if [ "${extension}" == "bam" ]; + then + touch ${prefix}.${extension}.csi + elif [ "${extension}" == "cram" ]; + then + touch ${prefix}.${extension}.crai + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index 8360e2b1f..c2ea9c72a 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -30,13 +30,49 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} ) } } test("cram") { + config "./nextflow_cram.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.crai.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" config "./nextflow.config" when { @@ -62,24 +98,21 @@ nextflow_process { } } - test("bam_stub") { + test("cram - stub") { - config "./nextflow.config" options "-stub" + config "./nextflow_cram.config" when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) ]) input[1] = Channel.of([ [ id:'fasta' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) """ } @@ -88,8 +121,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, - { assert snapshot(process.out.versions).match("bam_stub_versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index 384776564..da38d5d15 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -1,5 +1,35 @@ { "cram": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai" + ] + ], + [ + "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T17:19:37.196205" + }, + "bam - stub": { "content": [ { "0": [ @@ -8,7 +38,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -23,11 +53,11 @@ "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" ], "bam": [ [ @@ -35,7 +65,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "crai": [ @@ -50,105 +80,113 @@ "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-04T15:08:00.830294" - }, - "bam_stub_bam": { - "content": [ - "test.sorted.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-12T19:21:04.364044" + "timestamp": "2024-07-22T15:54:46.580756" }, - "bam_stub_versions": { - "content": [ - [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:15:00.20800281" - }, - "bam": { + "cram - stub": { "content": [ { "0": [ + + ], + "1": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "1": [ - ], "2": [ - - ], - "3": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" ] + ], + "3": [ + ], "4": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" ], "bam": [ + + ], + "crai": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "crai": [ - ], "cram": [ - - ], - "csi": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" ] + ], + "csi": [ + ], "versions": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:57:30.505698" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,21c992d59615936b99f2ad008aa54400" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-03-04T15:07:48.773803" + "timestamp": "2024-07-22T15:54:25.872954" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow_cram.config b/modules/nf-core/samtools/sort/tests/nextflow_cram.config new file mode 100644 index 000000000..3a8c0188b --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow_cram.config @@ -0,0 +1,8 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index --output-fmt cram" + } + +} diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index b0676f338..da2df5e43 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -1,8 +1,6 @@ -name: samtools_view channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::samtools=1.20 + - bioconda::htslib=1.20 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 5a8989d69..dc611448c 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : + 'biocontainers/samtools:1.20--h50ea8bc_0' }" input: tuple val(meta), path(input), path(index) @@ -13,13 +13,15 @@ process SAMTOOLS_VIEW { path qname output: - tuple val(meta), path("*.bam"), emit: bam, optional: true - tuple val(meta), path("*.cram"), emit: cram, optional: true - tuple val(meta), path("*.sam"), emit: sam, optional: true - tuple val(meta), path("*.bai"), emit: bai, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - path "versions.yml", emit: versions + tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true + tuple val(meta), path("${prefix}.${file_type}.bai"), emit: bai, optional: true + tuple val(meta), path("${prefix}.${file_type}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${file_type}.crai"), emit: crai, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}"), emit: unselected, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}.{bai,csi,crsi}"), emit: unselected_index, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -27,13 +29,13 @@ process SAMTOOLS_VIEW { script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" - def readnames = qname ? "--qname-file ${qname}": "" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + readnames = qname ? "--qname-file ${qname} --output-unselected ${prefix}.unselected.${file_type}": "" if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ samtools \\ @@ -54,14 +56,14 @@ process SAMTOOLS_VIEW { stub: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + prefix = task.ext.prefix ?: "${meta.id}" + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - def index = args.contains("--write-index") ? "touch ${prefix}.csi" : "" + def index = args.contains("--write-index") ? "touch ${prefix}.${file_type}.csi" : "" """ touch ${prefix}.${file_type} diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 3dadafae7..27be60d08 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -73,6 +73,15 @@ output: type: file description: optional CRAM file index pattern: "*.{crai}" + # unselected and unselected_index are created when passing a qname + - unselected: + type: file + description: optional file with unselected alignments + pattern: "*.unselected.{bam,cram,sam}" + - unselected_index: + type: file + description: index for the "unselected" file + pattern: "*.unselected.{bai,csi,crai}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test index 45a0defba..37b81a916 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -172,6 +172,8 @@ nextflow_process { { assert snapshot(process.out.crai).match("cram_to_bam_index_qname_crai") }, { assert snapshot(process.out.cram).match("cram_to_bam_index_qname_cram") }, { assert snapshot(process.out.sam).match("cram_to_bam_index_qname_sam") }, + { assert snapshot(file(process.out.unselected[0][1]).name).match("cram_to_bam_index_qname_unselected") }, + { assert snapshot(file(process.out.unselected_index[0][1]).name).match("cram_to_bam_index_qname_unselected_csi") }, { assert snapshot(process.out.versions).match("cram_to_bam_index_qname_versions") } ) } diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap index f55943a7a..6bcce9fea 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -56,14 +56,14 @@ "bam_stub_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:13:09.713353823" + "timestamp": "2024-05-28T15:43:20.390692583" }, "cram_to_bam_index_cram": { "content": [ @@ -208,14 +208,14 @@ "cram_to_bam_index_qname_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:13:03.935041046" + "timestamp": "2024-05-28T15:43:15.007493874" }, "cram_to_bam_bam": { "content": [ @@ -240,14 +240,14 @@ "cram_to_bam_index_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:12:55.910685496" + "timestamp": "2024-05-28T15:43:09.472376824" }, "cram_to_bam_bai": { "content": [ @@ -264,14 +264,14 @@ "cram_to_bam_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:12:47.715221169" + "timestamp": "2024-05-28T15:43:04.080050906" }, "cram_bam": { "content": [ @@ -355,17 +355,37 @@ }, "timestamp": "2024-02-12T19:38:23.322874" }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, "bam_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:12:31.692607421" + "timestamp": "2024-05-28T15:42:52.978954857" }, "cram_to_bam_index_qname_cram": { "content": [ @@ -430,14 +450,14 @@ "cram_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:12:39.913411036" + "timestamp": "2024-05-28T15:42:58.400776109" }, "bam_sam": { "content": [ @@ -477,7 +497,7 @@ }, "bam_stub_csi": { "content": [ - "test.csi" + "test.bam.csi" ], "meta": { "nf-test": "0.8.4", diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml index 8bd58cff5..e3d1c714d 100644 --- a/modules/nf-core/star/align/environment.yml +++ b/modules/nf-core/star/align/environment.yml @@ -1,8 +1,6 @@ -name: star_align channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::star=2.7.10a - bioconda::samtools=1.18 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 8e9c48b1c..ae67e0040 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -81,6 +81,8 @@ process STAR_ALIGN { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ + echo "" | gzip > ${prefix}.unmapped_1.fastq.gz + echo "" | gzip > ${prefix}.unmapped_2.fastq.gz touch ${prefix}Xd.out.bam touch ${prefix}.Log.final.out touch ${prefix}.Log.out @@ -89,8 +91,6 @@ process STAR_ALIGN { touch ${prefix}.toTranscriptome.out.bam touch ${prefix}.Aligned.unsort.out.bam touch ${prefix}.Aligned.sortedByCoord.out.bam - touch ${prefix}.unmapped_1.fastq.gz - touch ${prefix}.unmapped_2.fastq.gz touch ${prefix}.tab touch ${prefix}.SJ.out.tab touch ${prefix}.ReadsPerGene.out.tab diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test index 6ecd77863..2d9f72ddc 100644 --- a/modules/nf-core/star/align/tests/main.nf.test +++ b/modules/nf-core/star/align/tests/main.nf.test @@ -9,27 +9,367 @@ nextflow_process { tag "star/align" tag "star/genomegenerate" - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" + test("homo_sapiens - single_end") { + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { process { """ input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = Channel.of([ + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ [ id:'test_gtf' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) + input[3] = false + input[4] = 'illumina' + input[5] = false """ } } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } } - test("homo_sapiens - single_end") { + test("homo_sapiens - paired_end") { + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - arriba") { + config "./nextflow.arriba.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - starfusion") { + config "./nextflow.starfusion.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - multiple") { config "./nextflow.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - single_end - stub") { + options "-stub" + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -52,29 +392,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - single_end - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - single_end - log_out") }, - { assert snapshot(process.out.bam).match("homo_sapiens - single_end - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - single_end - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - single_end - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - single_end - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - single_end - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - single_end - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - single_end - junction") }, - { assert snapshot(process.out.log_progress).match("homo_sapiens - single_end - log_progress") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - single_end - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - single_end - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - single_end - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - single_end - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - single_end - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - single_end - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end") { + test("homo_sapiens - paired_end - stub") { + options "-stub" config "./nextflow.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -100,29 +444,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - log_out") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - junction") }, - { assert snapshot(process.out.log_progress).match("homo_sapiens - paired_end - log_progress") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end - arriba") { + test("homo_sapiens - paired_end - arriba - stub") { + options "-stub" config "./nextflow.arriba.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -148,29 +496,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - arriba - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - arriba - log_out") }, - { assert snapshot(file(process.out.log_progress[0][1]).name).match("homo_sapiens - paired_end - arriba - log_progress") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - arriba - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - arriba - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - arriba - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - arriba - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - arriba - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - arriba - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - arriba - junction") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - arriba - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - arriba - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - arriba - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - arriba - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - arriba - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - arriba - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end - starfusion") { + test("homo_sapiens - paired_end - starfusion - stub") { + options "-stub" config "./nextflow.starfusion.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -196,29 +548,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - starfusion - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - starfusion - log_out") }, - { assert snapshot(file(process.out.log_progress[0][1]).name).match("homo_sapiens - paired_end - starfusion - log_progress") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - starfusion - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - starfusion - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - starfusion - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - starfusion - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - starfusion - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - starfusion - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - starfusion - junction") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - starfusion - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - starfusion - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - starfusion - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - starfusion - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - starfusion - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - starfusion - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end - multiple") { + test("homo_sapiens - paired_end - multiple - stub") { + options "-stub" config "./nextflow.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -246,22 +602,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - multiple - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - multiple - log_out") }, - { assert snapshot(file(process.out.log_progress[0][1]).name).match("homo_sapiens - paired_end - multiple - log_progress") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - multiple - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - multiple - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - multiple - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - multiple - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - multiple - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - multiple - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - multiple - junction") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - multiple - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - multiple - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - multiple - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - multiple - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - multiple - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - multiple - versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap index 08edb914b..c814eb56c 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -1,382 +1,1170 @@ { - "homo_sapiens - paired_end - multiple - bam_sorted": { + "homo_sapiens - single_end - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] - ] + } ], - "timestamp": "2023-12-04T18:01:19.968225733" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:04.712114" }, - "homo_sapiens - paired_end - multiple - wig": { + "homo_sapiens - paired_end - arriba - stub": { "content": [ - [ - - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], - "timestamp": "2023-11-23T13:29:01.857804" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:28.874293" }, - "homo_sapiens - paired_end - arriba - tab": { + "homo_sapiens - single_end": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" ] - ] - ], - "timestamp": "2023-12-04T17:56:12.347549723" - }, - "homo_sapiens - single_end - wig": { - "content": [ + ], [ - - ] - ], - "timestamp": "2023-11-23T13:22:55.24701" - }, - "homo_sapiens - paired_end - sam": { - "content": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.383818" - }, - "homo_sapiens - paired_end - arriba - versions": { - "content": [ + ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "timestamp": "2023-12-04T17:56:12.431212643" - }, - "homo_sapiens - paired_end - multiple - bedgraph": { - "content": [ + + ], [ [ { "id": "test", - "single_end": false + "single_end": true }, [ - "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" + "test.Signal.Unique.str1.out.bg:md5,c56fc1472776fb927eaf62d973da5f9a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,e93373cf6f2a2a9506e2efdb260cdd4f" ] ] - ] - ], - "timestamp": "2023-12-04T18:01:20.07119229" - }, - "homo_sapiens - paired_end - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.368841" - }, - "homo_sapiens - paired_end - arriba - bedgraph": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.102537" - }, - "homo_sapiens - single_end - junction": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.185369" - }, - "homo_sapiens - paired_end - arriba - spl_junc_tab": { - "content": [ + ], + [ + + ], [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" ] - ] - ], - "timestamp": "2023-12-04T17:56:12.268388251" - }, - "homo_sapiens - single_end - sam": { - "content": [ + ], [ - - ] - ], - "timestamp": "2023-11-23T13:22:55.216183" - }, - "homo_sapiens - paired_end - fastq": { - "content": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.327236" - }, - "homo_sapiens - single_end - versions": { - "content": [ + ], [ "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-12-04T17:53:26.664210196" - }, - "homo_sapiens - paired_end - multiple - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:29:01.022176" - }, - "homo_sapiens - paired_end - arriba - fastq": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:25:07.15277" - }, - "homo_sapiens - paired_end - multiple - junction": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:29:01.52923" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T18:02:34.35338" }, - "homo_sapiens - paired_end - multiple - spl_junc_tab": { + "homo_sapiens - paired_end": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" + "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" ] - ] - ], - "timestamp": "2023-12-04T18:01:20.189486201" - }, - "homo_sapiens - paired_end - starfusion - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:27:55.905883" - }, - "homo_sapiens - paired_end - starfusion - fastq": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:27:56.192302" - }, - "homo_sapiens - paired_end - multiple - sam": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:29:01.661837" - }, - "homo_sapiens - paired_end - multiple - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:29:00.966417" - }, - "homo_sapiens - paired_end - starfusion - bam": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.out.bam:md5,bcad07b838f6762fc01eea52b5cd3f84" + "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" ] - ] - ], - "timestamp": "2023-12-04T17:59:58.53235164" - }, - "homo_sapiens - paired_end - arriba - junction": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.202776" - }, - "homo_sapiens - single_end - bedgraph": { - "content": [ + ], + [ + + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, [ - "test.Signal.Unique.str1.out.bg:md5,c56fc1472776fb927eaf62d973da5f9a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,e93373cf6f2a2a9506e2efdb260cdd4f" + "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" ] ] - ] - ], - "timestamp": "2023-12-04T17:53:26.394863748" - }, - "homo_sapiens - paired_end - arriba - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.251962" - }, - "homo_sapiens - paired_end - starfusion - bam_sorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.040843" - }, - "homo_sapiens - single_end - bam_unsorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.154172" - }, - "homo_sapiens - paired_end - bam": { - "content": [ + ], + [ + + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" ] - ] - ], - "timestamp": "2023-12-04T17:54:11.934832258" - }, - "homo_sapiens - paired_end - arriba - bam_transcript": { - "content": [ + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:06.998817" - }, - "homo_sapiens - paired_end - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:23:33.259699" - }, - "homo_sapiens - paired_end - arriba - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:25:06.849451" - }, - "homo_sapiens - paired_end - multiple - versions": { - "content": [ + ], [ "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-12-04T18:01:20.393705142" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T18:03:16.701923" }, - "homo_sapiens - paired_end - starfusion - bam_transcript": { + "homo_sapiens - paired_end - multiple - stub": { "content": [ - [ - - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], - "timestamp": "2023-11-23T13:27:56.082408" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:51.360287" }, - "homo_sapiens - paired_end - starfusion - tab": { + "homo_sapiens - paired_end - multiple": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" ] - ] - ], - "timestamp": "2023-12-04T17:59:58.818041322" - }, - "homo_sapiens - single_end - fastq": { - "content": [ + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.175307" - }, - "homo_sapiens - paired_end - tab": { - "content": [ + ], + [ + + ], [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + [ + "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" + ] ] - ] - ], - "timestamp": "2023-12-04T17:54:12.255481058" - }, - "homo_sapiens - paired_end - starfusion - bedgraph": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.155413" - }, - "homo_sapiens - single_end - bam_transcript": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.144852" - }, - "homo_sapiens - paired_end - versions": { - "content": [ + ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "timestamp": "2023-12-04T17:54:12.343840482" - }, - "homo_sapiens - paired_end - multiple - tab": { - "content": [ + + ], + [ + + ], [ [ { @@ -385,385 +1173,801 @@ }, "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" ] - ] - ], - "timestamp": "2023-12-04T18:01:20.291692062" - }, - "homo_sapiens - single_end - bam": { - "content": [ + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" + "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" ] - ] - ], - "timestamp": "2023-12-04T17:53:26.265642675" - }, - "homo_sapiens - paired_end - arriba - wig": { - "content": [ + ], [ + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:25:07.444214" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:13:28.987438" }, - "homo_sapiens - paired_end - log_progress": { + "homo_sapiens - paired_end - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,b2bd061d6cbaaf3d6d3b1fed547f69b8" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] - ] - ], - "timestamp": "2023-12-04T17:54:12.126063825" - }, - "homo_sapiens - paired_end - arriba - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:25:06.829799" - }, - "homo_sapiens - paired_end - bam_unsorted": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:23:33.300509" - }, - "homo_sapiens - paired_end - arriba - sam": { - "content": [ - [ - - ] + } ], - "timestamp": "2023-11-23T13:25:07.300383" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:16.798018" }, - "homo_sapiens - paired_end - multiple - bam": { + "homo_sapiens - paired_end - starfusion": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + "test.Aligned.out.bam:md5,bcad07b838f6762fc01eea52b5cd3f84" ] - ] - ], - "timestamp": "2023-12-04T18:01:19.851247126" - }, - "homo_sapiens - paired_end - multiple - fastq": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.462257" - }, - "homo_sapiens - single_end - bam_sorted": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" - ] - ] - ], - "timestamp": "2023-12-04T17:53:26.335457371" - }, - "homo_sapiens - paired_end - arriba - bam_sorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:06.94699" - }, - "homo_sapiens - paired_end - starfusion - junction": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,c10ef219f4a30e83711b995bc5e40dba" - ] - ] - ], - "timestamp": "2023-12-04T17:59:58.641115828" - }, - "homo_sapiens - single_end - tab": { - "content": [ + ], [ - [ - { - "id": "test", - "single_end": true - }, - "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" - ] - ] - ], - "timestamp": "2023-12-04T17:53:26.580593434" - }, - "homo_sapiens - paired_end - starfusion - versions": { - "content": [ + + ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "timestamp": "2023-12-04T17:59:58.907317103" - }, - "homo_sapiens - paired_end - multiple - bam_unsorted": { - "content": [ + + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.330463" - }, - "homo_sapiens - paired_end - arriba - log_progress": { - "content": [ - "test.Log.progress.out" - ], - "timestamp": "2023-11-23T13:25:06.86866" - }, - "homo_sapiens - paired_end - bedgraph": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - [ - "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" - ] + "test.Chimeric.out.junction:md5,c10ef219f4a30e83711b995bc5e40dba" ] - ] - ], - "timestamp": "2023-12-04T17:54:12.064121304" - }, - "homo_sapiens - paired_end - starfusion - bam_unsorted": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:27:56.118974" - }, - "homo_sapiens - paired_end - starfusion - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.264699" - }, - "homo_sapiens - paired_end - multiple - log_progress": { - "content": [ - "test.Log.progress.out" - ], - "timestamp": "2023-11-23T13:29:01.076947" - }, - "homo_sapiens - paired_end - arriba - bam_unsorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.050409" - }, - "homo_sapiens - paired_end - bam_sorted": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" ] - ] - ], - "timestamp": "2023-12-04T17:54:12.002180537" - }, - "homo_sapiens - single_end - spl_junc_tab": { - "content": [ + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" ] + ], + [ + + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-12-04T17:53:26.50932751" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:10:55.371956" }, - "homo_sapiens - paired_end - starfusion - spl_junc_tab": { + "homo_sapiens - paired_end - arriba": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + "test.Aligned.out.bam:md5,c1b1747f5873f2d17762725636e891d5" ] - ] - ], - "timestamp": "2023-12-04T17:59:58.731699486" - }, - "homo_sapiens - single_end - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:22:55.126286" - }, - "homo_sapiens - paired_end - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:23:33.253884" - }, - "homo_sapiens - single_end - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:22:55.11799" - }, - "homo_sapiens - paired_end - bam_transcript": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.287684" - }, - "homo_sapiens - paired_end - starfusion - log_progress": { - "content": [ - "test.Log.progress.out" - ], - "timestamp": "2023-11-23T13:27:55.971484" - }, - "homo_sapiens - paired_end - multiple - bam_transcript": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.264176" - }, - "homo_sapiens - paired_end - multiple - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.596406" - }, - "homo_sapiens - single_end - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.205936" - }, - "homo_sapiens - paired_end - junction": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.340653" - }, - "homo_sapiens - paired_end - spl_junc_tab": { - "content": [ + ], [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" - ] - ] - ], - "timestamp": "2023-12-04T17:54:12.185730856" - }, - "homo_sapiens - paired_end - starfusion - sam": { - "content": [ + + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.300637" - }, - "homo_sapiens - paired_end - arriba - bam": { - "content": [ + ], + [ + + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.out.bam:md5,c1b1747f5873f2d17762725636e891d5" + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" ] - ] - ], - "timestamp": "2023-12-04T17:56:12.190560178" - }, - "homo_sapiens - single_end - log_progress": { - "content": [ + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.Log.progress.out:md5,b2bd061d6cbaaf3d6d3b1fed547f69b8" + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" ] - ] - ], - "timestamp": "2023-12-04T17:53:26.450352138" - }, - "homo_sapiens - paired_end - starfusion - wig": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.422018" - }, - "homo_sapiens - paired_end - wig": { - "content": [ + ], [ - + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:23:33.429457" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:05:10.7534" }, - "homo_sapiens - paired_end - starfusion - log_out": { + "homo_sapiens - paired_end - starfusion - stub": { "content": [ - "test.Log.out" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], - "timestamp": "2023-11-23T13:27:55.93945" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:40.64399" } } \ No newline at end of file diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml index 791f255e5..38611dfa2 100644 --- a/modules/nf-core/star/genomegenerate/environment.yml +++ b/modules/nf-core/star/genomegenerate/environment.yml @@ -1,8 +1,6 @@ -name: star_genomegenerate channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::samtools=1.18 - bioconda::htslib=1.18 diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test b/modules/nf-core/star/genomegenerate/tests/main.nf.test index c17c8ba45..4d619c473 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test @@ -28,15 +28,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_gtf_index") }, - { assert snapshot(process.out.versions).match("fasta_gtf_versions") } + { assert snapshot( + file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions) + .match() } ) } } - test("fasta_gtf_stub") { - - options '-stub' + test("fasta") { when { process { @@ -45,10 +45,7 @@ nextflow_process { [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) + input[1] = Channel.of([ [], [] ]) """ } } @@ -56,13 +53,17 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_gtf_stub_index") }, - { assert snapshot(process.out.versions).match("fasta_gtf_stub_versions") } + { assert snapshot( + file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions + ).match() } ) } } - test("fasta") { + test("fasta_gtf_stub") { + + options '-stub' when { process { @@ -71,7 +72,10 @@ nextflow_process { [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[1] = Channel.of([ [], [] ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) """ } } @@ -79,11 +83,9 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_index") }, - { assert snapshot(process.out.versions).match("fasta_versions") } + { assert snapshot(process.out).match() } ) } - } test("fasta_stub") { @@ -105,11 +107,8 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_stub_index") }, - { assert snapshot(process.out.versions).match("fasta_stub_versions") } + { assert snapshot(process.out).match() } ) } - } - } diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap index 5653d6e6c..207f4b4f5 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap @@ -1,90 +1,148 @@ { - "fasta_gtf_versions": { + "fasta_gtf": { "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]", [ "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:54:31.798555" + "timestamp": "2024-07-22T14:55:35.478401" }, - "fasta_stub_versions": { + "fasta_gtf_stub": { "content": [ - [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:55:07.521209" - }, - "fasta_gtf_stub_index": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:54:46.478098" - }, - "fasta_gtf_stub_versions": { - "content": [ - [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] + { + "0": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ], + "index": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:54:46.491657" + "timestamp": "2024-07-22T14:55:57.247585" }, - "fasta_index": { + "fasta_stub": { "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]" + { + "0": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ], + "index": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:54:57.552329" + "timestamp": "2024-07-22T14:56:07.01742" }, - "fasta_versions": { + "fasta": { "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]", [ "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:54:57.560541" - }, - "fasta_gtf_index": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:54:31.786814" - }, - "fasta_stub_index": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:55:07.517472" + "timestamp": "2024-07-22T14:55:45.48784" } } \ No newline at end of file diff --git a/modules/nf-core/stringtie/merge/environment.yml b/modules/nf-core/stringtie/merge/environment.yml index 9914b2025..0556de41a 100644 --- a/modules/nf-core/stringtie/merge/environment.yml +++ b/modules/nf-core/stringtie/merge/environment.yml @@ -1,7 +1,5 @@ -name: stringtie_merge channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::stringtie=2.2.1 diff --git a/modules/nf-core/stringtie/merge/tests/main.nf.test b/modules/nf-core/stringtie/merge/tests/main.nf.test index 358c561a0..bcc648bc7 100644 --- a/modules/nf-core/stringtie/merge/tests/main.nf.test +++ b/modules/nf-core/stringtie/merge/tests/main.nf.test @@ -50,7 +50,7 @@ nextflow_process { process { """ input[0] = STRINGTIE_STRINGTIE.out.transcript_gtf.map { it -> it[1] } - input[1] = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) """ } } diff --git a/modules/nf-core/stringtie/stringtie/environment.yml b/modules/nf-core/stringtie/stringtie/environment.yml index 7a0eccdb8..0556de41a 100644 --- a/modules/nf-core/stringtie/stringtie/environment.yml +++ b/modules/nf-core/stringtie/stringtie/environment.yml @@ -1,7 +1,5 @@ -name: stringtie_stringtie channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::stringtie=2.2.1 diff --git a/modules/nf-core/stringtie/stringtie/tests/main.nf.test b/modules/nf-core/stringtie/stringtie/tests/main.nf.test index 00efe8f1a..2204e849f 100644 --- a/modules/nf-core/stringtie/stringtie/tests/main.nf.test +++ b/modules/nf-core/stringtie/stringtie/tests/main.nf.test @@ -3,6 +3,7 @@ nextflow_process { name "Test Process STRINGTIE_STRINGTIE" script "../main.nf" process "STRINGTIE_STRINGTIE" + config "./nextflow.config" tag "modules" tag "modules_nfcore" tag "stringtie" @@ -10,8 +11,6 @@ nextflow_process { test("sarscov2 [bam] - forward strandedness") { - config "./nextflow.config" - when { process { """ @@ -27,17 +26,17 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("fs_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("fs_abundance") }, - { assert snapshot(process.out.versions).match("fs_versions") } + { assert snapshot( + process.out.abundance, + process.out.transcript_gtf, + process.out.versions + ).match() } ) } } test("sarscov2 [bam] - forward strandedness + reference annotation") { - config "./nextflow.config" - when { process { """ @@ -53,18 +52,18 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("fs_gtf_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("fs_gtf_abundance") }, - { assert snapshot(process.out.ballgown).match("fs_gtf_ballgown") }, - { assert snapshot(process.out.versions).match("fs_gtf_versions") } + { assert snapshot( + process.out.abundance, + process.out.ballgown, + process.out.transcript_gtf, + process.out.versions + ).match() } ) } } test("sarscov2 [bam] - reverse strandedness") { - config "./nextflow.config" - when { process { """ @@ -80,16 +79,117 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("rs_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("rs_abundance") }, - { assert snapshot(process.out.versions).match("rs_versions") } + { assert snapshot( + process.out.abundance, + process.out.transcript_gtf, + process.out.versions + ).match() } ) } } test("sarscov2 [bam] - reverse strandedness + reference annotation") { - config "./nextflow.config" + when { + process { + """ + input[0] = [ + [ id:'test', strandedness:'reverse' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.abundance, + process.out.ballgown, + process.out.transcript_gtf, + process.out.versions + ).match() } + ) + } + } + + test("sarscov2 [bam] - forward strandedness - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', strandedness:'forward' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 [bam] - forward strandedness + reference annotation - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', strandedness:'forward' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 [bam] - reverse strandedness - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', strandedness:'reverse' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ] + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 [bam] - reverse strandedness + reference annotation - stub") { + + options "-stub" when { process { @@ -106,10 +206,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.transcript_gtf).match("rs_gtf_transcript_gtf") }, - { assert snapshot(process.out.abundance).match("rs_gtf_abundance") }, - { assert snapshot(process.out.ballgown).match("rs_gtf_ballgown") }, - { assert snapshot(process.out.versions).match("rs_gtf_versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap b/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap index bf7516364..124dd4cbe 100644 --- a/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap +++ b/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "fs_abundance": { + "sarscov2 [bam] - forward strandedness + reference annotation": { "content": [ [ [ @@ -7,49 +7,44 @@ "id": "test", "strandedness": "forward" }, - "test.gene.abundance.txt:md5,d6f5c8cadb8458f1df0427cf790246e3" + "test.gene.abundance.txt:md5,7d8bce7f2a922e367cedccae7267c22e" ] - ] - ], - "timestamp": "2023-11-23T13:55:41.032044613" - }, - "fs_transcript_gtf": { - "content": [ + ], [ [ { "id": "test", "strandedness": "forward" }, - "test.transcripts.gtf:md5,569137af5be452413086b50653a97203" + [ + "e2t.ctab:md5,e981c0038295ae54b63cedb1083f1540", + "e_data.ctab:md5,6b4cf69bc03f3f69890f972a0e8b7471", + "i2t.ctab:md5,8a117c8aa4334b4c2d4711932b006fb4", + "i_data.ctab:md5,be3abe09740603213f83d50dcf81427f", + "t_data.ctab:md5,3b66c065da73ae0dd41cc332eff6a818" + ] ] - ] - ], - "timestamp": "2023-11-23T13:55:41.017978904" - }, - "rs_abundance": { - "content": [ + ], [ [ { "id": "test", - "strandedness": "reverse" + "strandedness": "forward" }, - "test.gene.abundance.txt:md5,d6f5c8cadb8458f1df0427cf790246e3" + "test.transcripts.gtf:md5,f56cf8aba2c4a5673bc7963ba5f12d04" ] - ] - ], - "timestamp": "2023-11-23T13:56:13.601112933" - }, - "fs_gtf_versions": { - "content": [ + ], [ "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" ] ], - "timestamp": "2023-11-23T13:56:00.523797974" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:33:44.299962" }, - "fs_gtf_transcript_gtf": { + "sarscov2 [bam] - forward strandedness": { "content": [ [ [ @@ -57,50 +52,395 @@ "id": "test", "strandedness": "forward" }, - "test.transcripts.gtf:md5,f56cf8aba2c4a5673bc7963ba5f12d04" + "test.gene.abundance.txt:md5,d6f5c8cadb8458f1df0427cf790246e3" + ] + ], + [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.transcripts.gtf:md5,569137af5be452413086b50653a97203" ] + ], + [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" ] ], - "timestamp": "2023-11-23T13:56:00.475164879" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:33:35.177738" }, - "rs_versions": { + "sarscov2 [bam] - forward strandedness - stub": { "content": [ - [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" - ] + { + "0": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + ], + "abundance": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ballgown": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_gtf": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "transcript_gtf": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + ] + } ], - "timestamp": "2023-11-23T13:56:13.623892691" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:36:32.885078" }, - "rs_gtf_transcript_gtf": { + "sarscov2 [bam] - forward strandedness + reference annotation - stub": { "content": [ - [ - [ - { - "id": "test", - "strandedness": "reverse" - }, - "test.transcripts.gtf:md5,bb346053a8c156b803b055133376c7fa" + { + "0": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + ], + "abundance": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ballgown": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_gtf": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "transcript_gtf": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" ] - ] + } ], - "timestamp": "2023-11-23T13:56:22.693599559" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:36:43.325777" }, - "fs_gtf_abundance": { + "sarscov2 [bam] - reverse strandedness + reference annotation - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + ], + "abundance": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ballgown": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_gtf": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "transcript_gtf": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:37:06.085936" + }, + "sarscov2 [bam] - reverse strandedness - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + ], + "abundance": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ballgown": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_gtf": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "transcript_gtf": [ + [ + { + "id": "test", + "strandedness": "reverse" + }, + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:36:53.837578" + }, + "sarscov2 [bam] - reverse strandedness + reference annotation": { "content": [ [ [ { "id": "test", - "strandedness": "forward" + "strandedness": "reverse" }, - "test.gene.abundance.txt:md5,7d8bce7f2a922e367cedccae7267c22e" + "test.gene.abundance.txt:md5,7385b870b955dae2c2ab78a70cf05cce" ] - ] - ], - "timestamp": "2023-11-23T13:56:00.482135418" - }, - "rs_gtf_ballgown": { - "content": [ + ], [ [ { @@ -115,72 +455,54 @@ "t_data.ctab:md5,3b66c065da73ae0dd41cc332eff6a818" ] ] - ] - ], - "timestamp": "2023-11-23T13:56:22.715698347" - }, - "rs_transcript_gtf": { - "content": [ + ], [ [ { "id": "test", "strandedness": "reverse" }, - "test.transcripts.gtf:md5,31c34aec2bf36bb0ea3c16c2afeeeb1f" + "test.transcripts.gtf:md5,bb346053a8c156b803b055133376c7fa" ] - ] - ], - "timestamp": "2023-11-23T13:56:13.590054035" - }, - "rs_gtf_versions": { - "content": [ + ], [ "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" ] ], - "timestamp": "2023-11-23T13:56:22.725513476" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:34:03.114695" }, - "fs_gtf_ballgown": { + "sarscov2 [bam] - reverse strandedness": { "content": [ [ [ { "id": "test", - "strandedness": "forward" + "strandedness": "reverse" }, - [ - "e2t.ctab:md5,e981c0038295ae54b63cedb1083f1540", - "e_data.ctab:md5,6b4cf69bc03f3f69890f972a0e8b7471", - "i2t.ctab:md5,8a117c8aa4334b4c2d4711932b006fb4", - "i_data.ctab:md5,be3abe09740603213f83d50dcf81427f", - "t_data.ctab:md5,3b66c065da73ae0dd41cc332eff6a818" - ] + "test.gene.abundance.txt:md5,d6f5c8cadb8458f1df0427cf790246e3" ] - ] - ], - "timestamp": "2023-11-23T13:56:00.494299817" - }, - "fs_versions": { - "content": [ - [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" - ] - ], - "timestamp": "2023-11-23T13:55:41.049417582" - }, - "rs_gtf_abundance": { - "content": [ + ], [ [ { "id": "test", "strandedness": "reverse" }, - "test.gene.abundance.txt:md5,7385b870b955dae2c2ab78a70cf05cce" + "test.transcripts.gtf:md5,31c34aec2bf36bb0ea3c16c2afeeeb1f" ] + ], + [ + "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" ] ], - "timestamp": "2023-11-23T13:56:22.701059059" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:33:52.874479" } -} +} \ No newline at end of file diff --git a/modules/nf-core/ucsc/gtftogenepred/environment.yml b/modules/nf-core/ucsc/gtftogenepred/environment.yml index 5216fc8ff..5c4f6c2fa 100644 --- a/modules/nf-core/ucsc/gtftogenepred/environment.yml +++ b/modules/nf-core/ucsc/gtftogenepred/environment.yml @@ -1,7 +1,5 @@ -name: ucsc_gtftogenepred channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::ucsc-gtftogenepred=447 diff --git a/modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test b/modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test new file mode 100644 index 000000000..e0396a63c --- /dev/null +++ b/modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test @@ -0,0 +1,36 @@ + +nextflow_process { + + name "Test Process UCSC_GTFTOGENEPRED" + script "../main.nf" + process "UCSC_GTFTOGENEPRED" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "ucsc" + tag "ucsc/gtftogenepred" + + test("test-ucsc-gtftogenepred") { + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) ] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test.snap b/modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test.snap new file mode 100644 index 000000000..f021f8238 --- /dev/null +++ b/modules/nf-core/ucsc/gtftogenepred/tests/main.nf.test.snap @@ -0,0 +1,51 @@ +{ + "test-ucsc-gtftogenepred": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.genepred:md5,779e4749efaf38da3443ddfde30cc76c" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.refflat:md5,4101802f41d4cf7ee2667587da11bf42" + ] + ], + "2": [ + "versions.yml:md5,fd95365619a316eb451190365b1b799e" + ], + "genepred": [ + [ + { + "id": "test" + }, + "test.genepred:md5,779e4749efaf38da3443ddfde30cc76c" + ] + ], + "refflat": [ + [ + { + "id": "test" + }, + "test.refflat:md5,4101802f41d4cf7ee2667587da11bf42" + ] + ], + "versions": [ + "versions.yml:md5,fd95365619a316eb451190365b1b799e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T08:55:50.58172" + } +} \ No newline at end of file diff --git a/modules/nf-core/ucsc/gtftogenepred/tests/nextflow.config b/modules/nf-core/ucsc/gtftogenepred/tests/nextflow.config new file mode 100644 index 000000000..889bb6ce6 --- /dev/null +++ b/modules/nf-core/ucsc/gtftogenepred/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + withName: UCSC_GTFTOGENEPRED { + ext.args = [ + "-genePredExt", + "-geneNameAsName2" + ].join(' ').trim() + } +} From 55dcc55b5cced7cd14d2802beee18e1b99ecc8b6 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:56:24 +0200 Subject: [PATCH 041/887] update arriba modules --- modules/nf-core/arriba/download/main.nf | 2 +- null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt diff --git a/modules/nf-core/arriba/download/main.nf b/modules/nf-core/arriba/download/main.nf index 5e606574c..96a4e3362 100644 --- a/modules/nf-core/arriba/download/main.nf +++ b/modules/nf-core/arriba/download/main.nf @@ -18,7 +18,7 @@ process ARRIBA_DOWNLOAD { script: """ - wget https://github.com/suhrig/arriba/releases/download/v2.4.0/arriba_v2.4.0.tar.gz -O arriba_v2.4.0.tar.gz --no-check-certificate + wget https://github.com/suhrig/arriba/releases/download/v2.4.0/arriba_v2.4.0.tar.gz -O arriba_v2.4.0.tar.gz tar -xzvf arriba_v2.4.0.tar.gz rm arriba_v2.4.0.tar.gz mv arriba_v2.4.0/database/* . diff --git a/null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt b/null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar From f9f808da200334fdd8378cf53719c2219097fc4e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:23:30 +0200 Subject: [PATCH 042/887] rm file --- null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt diff --git a/null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt b/null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/null/pipeline_info/execution_trace_2024-09-12_11-34-43.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar From 7f8ee685abc8261efe4d847cc5b6536ad1955f57 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:57:50 +0200 Subject: [PATCH 043/887] fixes --- .../pipeline_info/execution_trace_2024-09-12_15-47-05.txt | 1 + .../pipeline_info/execution_trace_2024-09-12_15-47-37.txt | 1 + .../pipeline_info/execution_trace_2024-09-12_15-48-22.txt | 1 + workflows/build_references.nf | 8 +++----- 4 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt create mode 100644 null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt create mode 100644 null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt diff --git a/null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt b/null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt b/null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt b/null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 7fdfcd8ca..da6664373 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -25,8 +25,6 @@ include { RRNATRANSCRIPTS } from '../modules/nf-core/rrnatranscr include { SAMTOOLS_FAIDX } from '../modules/nf-core/samtools/faidx/main' include { STAR_GENOMEGENERATE } from '../modules/nf-core/star/genomegenerate/main' include { UCSC_GTFTOGENEPRED } from '../modules/nf-core/ucsc/gtftogenepred/main' -include { GATK4_CREATESEQUENCEDICTIONARY } from '../modules/nf-core/gatk4/createsequencedictionary/main' -include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedtointervallist/main' include { SALMON_INDEX } from '../modules/nf-core/salmon/index/main' include { GFFREAD } from '../modules/nf-core/gffread/main' @@ -42,8 +40,8 @@ workflow BUILD_REFERENCES { fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" ENSEMBL_DOWNLOAD( params.ensembl_version, params.genome, fake_meta ) HGNC_DOWNLOAD() - SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.fasta, [[],[]]) - GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) + SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.primary_assembly, [[],[]]) + GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.primary_assembly) RRNATRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf.map{ meta, gtf -> [ gtf ] }) @@ -77,7 +75,7 @@ workflow BUILD_REFERENCES { UCSC_GTFTOGENEPRED(ENSEMBL_DOWNLOAD.out.chrgtf) } else { UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.chrgtf) - + } if (params.fusionreport || params.all) { FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) } From e54c5a67c980ef3c9d532ed311b9256767622173 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:58:15 +0200 Subject: [PATCH 044/887] remove files --- null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt | 1 - null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt | 1 - null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt | 1 - 3 files changed, 3 deletions(-) delete mode 100644 null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt delete mode 100644 null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt delete mode 100644 null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt diff --git a/null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt b/null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/null/pipeline_info/execution_trace_2024-09-12_15-47-05.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt b/null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/null/pipeline_info/execution_trace_2024-09-12_15-47-37.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt b/null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/null/pipeline_info/execution_trace_2024-09-12_15-48-22.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar From 26d44e44a00e51c4cd3640a43e5cbbb5df938c27 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Sep 2024 10:52:02 +0200 Subject: [PATCH 045/887] update new fastq arg --- subworkflows/local/trim_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/trim_workflow.nf b/subworkflows/local/trim_workflow.nf index ea21134db..27088a180 100644 --- a/subworkflows/local/trim_workflow.nf +++ b/subworkflows/local/trim_workflow.nf @@ -13,7 +13,7 @@ workflow TRIM_WORKFLOW { ch_fastqc_trimmed = Channel.empty() if (params.fastp_trim) { - FASTP(reads, params.adapter_fasta, false, false) + FASTP(reads, params.adapter_fasta, false, false, false) ch_versions = ch_versions.mix(FASTP.out.versions) FASTQC_FOR_FASTP(FASTP.out.reads) From 9a4a8eb0e1603e3749b6b7366aefc9dca06f0d0f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Sep 2024 14:25:51 +0200 Subject: [PATCH 046/887] update multiqc and multiqc args --- modules.json | 2 +- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 ++-- modules/nf-core/multiqc/tests/main.nf.test.snap | 6 +++--- workflows/rnafusion.nf | 4 +++- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules.json b/modules.json index 2b34aabb8..322f834fa 100644 --- a/modules.json +++ b/modules.json @@ -67,7 +67,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "7c316cae26baf55e0add993bed2b0c9f7105c653", "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index f1cd99b07..0fe126444 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.24.1 + - bioconda::multiqc=1.25 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index ceaec139e..b9ccebdbb 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.24.1--pyhdfd78af_0' : - 'biocontainers/multiqc:1.24.1--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 83fa080c8..b779e4692 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,7 +2,7 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { @@ -17,7 +17,7 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { @@ -29,7 +29,7 @@ "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 85bde3955..d73ac21ed 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -274,7 +274,9 @@ workflow RNAFUSION { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) emit: From eb6e354c180f6c533cbb862678403984e79275b2 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:15:42 +0200 Subject: [PATCH 047/887] change strategy --- conf/modules.config | 3 ++- modules/local/ensembl/main.nf | 22 +++++++++-------- nextflow.config | 2 +- subworkflows/local/build_references.nf | 7 +++++- workflows/rnafusion.nf | 34 ++++++++++++++++++++++++-- 5 files changed, 53 insertions(+), 15 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index e78f73dbb..bbafa80d6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -49,7 +49,8 @@ process { ext.when = { !params.build_references } } - withName: 'ENSEMBL_DOWNLOAD' { + withName: '.*BUILD_REFERENCES:ENSEMBL_DOWNLOAD' { + ext.when = { !params.fasta || ! params.gtf } publishDir = [ path: { "${params.genomes_base}/ensembl" }, mode: params.publish_dir_mode, diff --git a/modules/local/ensembl/main.nf b/modules/local/ensembl/main.nf index 8297e2901..695ab3123 100644 --- a/modules/local/ensembl/main.nf +++ b/modules/local/ensembl/main.nf @@ -14,20 +14,23 @@ process ENSEMBL_DOWNLOAD { output: tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.gtf") , emit: gtf - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa") , emit: primary_assembly - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.chr.gtf") , emit: chrgtf + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa") , emit: fasta path "versions.yml" , emit: versions script: """ - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${params.genome}.${ensembl_version}.gtf.gz - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${params.genome}.dna.primary_assembly.fa.gz -O Homo_sapiens.${params.genome}.${ensembl_version}.dna.primary_assembly.fa.gz - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf.gz + if [ ${genome} == 'GRCh37' ]; then + wget ftp://ftp.ensembl.org/pub/grch37/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${genome}.87.gtf.gz -O Homo_sapiens.${genome}.${ensembl_version}.gtf.gz + wget ftp://ftp.ensembl.org/pub/grch37/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${genome}.dna.primary_assembly.fa.gz -O Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz - gunzip Homo_sapiens.${params.genome}.${ensembl_version}.gtf.gz - gunzip Homo_sapiens.${params.genome}.${ensembl_version}.dna.primary_assembly.fa.gz - gunzip Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf.gz + + else: + wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${genome}.${ensembl_version}.gtf.gz + wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${genome}.dna.primary_assembly.fa.gz -O Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz + + gunzip Homo_sapiens.${genome}.${ensembl_version}.gtf.gz + gunzip Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -40,8 +43,7 @@ process ENSEMBL_DOWNLOAD { stub: """ touch "Homo_sapiens.${genome}.${ensembl_version}.gtf" - touch "Homo_sapiens.${params.genome}.${ensembl_version}.dna.primary_assembly.fa" - touch "Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf" + touch "Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa" cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow.config b/nextflow.config index b7d78f7d9..ccaf0348a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -27,7 +27,7 @@ params { // Genome genome = 'GRCh38' genomes_base = "${params.outdir}/references" - ensembl_version = 112 + ensembl_version = 111 read_length = 100 starfusion_build = true genomes = [:] diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index a1a640509..c7a62033e 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -35,12 +35,17 @@ include { GFFREAD } from '../../modules/nf-core/gffread/ */ workflow BUILD_REFERENCES { - + take: + genome // channel: [mandatory] val(genome) + ensembl_version // channel: [mandatory] val(ensembl_version) main: ch_versions = Channel.empty() + + + if (!file(params.fasta).exists() || file(params.fasta).isEmpty() || !file(params.chrgtf).exists() || file(params.chrgtf).isEmpty() || !file(params.gtf).exists() || file(params.gtf).isEmpty()){ diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 302f2829f..368658401 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -65,8 +65,38 @@ workflow RNAFUSION { // Create references if necessary // - BUILD_REFERENCES() - + BUILD_REFERENCES(params.genome, params.ensembl_version) + ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) + + // Optional + ch_fasta = params.fasta ? Channel.fromPath(params.fasta).map {it -> [[id:it[0].simpleName], it]}.collect() + : BUILD_REFERENCES.out.fasta.map {it -> [[id:it[0].simpleName], it]}.collect() + ch_gtf = params.gtf ? Channel.fromPath(params.gtf).map {it -> [[id:it[0].simpleName], it]}.collect() + : downloads.gtf.map {it -> [[id:it[0].simpleName], it]}.collect() + ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache) + : Channel.empty().mix(downloads.vep_cache) + ch_vep_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files) + : Channel.empty().mix(downloads.vep_plugin) + ch_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.empty() + ch_gene_panel_clinical_filter = params.gene_panel_clinical_filter ? Channel.fromPath(params.gene_panel_clinical_filter).collect() + : Channel.empty() + ch_ref_drop_annot_file = params.reference_drop_annot_file ? Channel.fromPath(params.reference_drop_annot_file).collect() + : Channel.empty() + ch_ref_drop_count_file = params.reference_drop_count_file ? Channel.fromPath(params.reference_drop_count_file).collect() + : Channel.empty() + ch_ref_drop_splice_folder = params.reference_drop_splice_folder ? Channel.fromPath(params.reference_drop_splice_folder).collect() + : Channel.empty() + ch_salmon_index = params.salmon_index ? Channel.fromPath(params.salmon_index) + : Channel.empty() + ch_star_index = params.star_index ? Channel.fromPath(params.star_index).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.empty() + ch_transcript_fasta = params.transcript_fasta ? Channel.fromPath(params.transcript_fasta) + : Channel.empty() + ch_sequence_dict = params.sequence_dict ? Channel.fromPath(params.sequence_dict).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.empty() + ch_subsample_bed = params.subsample_bed ? Channel.fromPath(params.subsample_bed).collect() + : Channel.empty() // // Create channel from input file provided through params.input From 40fbd83d3d45d009af01dda1eea44ef9af44fe24 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:41:49 +0200 Subject: [PATCH 048/887] intermediate state --- modules/local/fusioncatcher/download/main.nf | 5 +- modules/local/starfusion/download/main.nf | 2 +- nextflow.config | 3 +- subworkflows/local/build_references.nf | 63 ++++--- workflows/rnafusion.nf | 170 +++++++++---------- 5 files changed, 121 insertions(+), 122 deletions(-) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index aec162882..916b4673a 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -20,9 +20,10 @@ process FUSIONCATCHER_DOWNLOAD { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def url = + // TODO: move to my sourceforge + + // def url = """ - TODO: move to my sourceforge wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.aa wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ab wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ac diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index e3a4b1b85..fedadfa0b 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -9,7 +9,7 @@ process STARFUSION_DOWNLOAD { path "ctat_genome_lib_build_dir/ref_annot.gtf", emit: chrgtf - TODO: move to my sourceforge + // TODO: move to my sourceforge script: """ wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/__genome_libs_StarFv1.10/GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz --no-check-certificate diff --git a/nextflow.config b/nextflow.config index ccaf0348a..db5a3f633 100644 --- a/nextflow.config +++ b/nextflow.config @@ -27,7 +27,7 @@ params { // Genome genome = 'GRCh38' genomes_base = "${params.outdir}/references" - ensembl_version = 111 + ensembl_version = 112 read_length = 100 starfusion_build = true genomes = [:] @@ -72,7 +72,6 @@ params { fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa" fai = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa.fai" gtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf" - chrgtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.chr.gtf" refflat = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf.refflat" rrna_intervals = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.interval_list" ensembl_ref = "${params.genomes_base}/ensembl" diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index c7a62033e..cfb4258ba 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -42,25 +42,26 @@ workflow BUILD_REFERENCES { main: ch_versions = Channel.empty() - - - - if (!file(params.fasta).exists() || file(params.fasta).isEmpty() || - !file(params.chrgtf).exists() || file(params.chrgtf).isEmpty() || !file(params.gtf).exists() || file(params.gtf).isEmpty()){ fake_meta = [:] fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" ENSEMBL_DOWNLOAD(params.ensembl_version, params.genome, fake_meta) + ch_versions = ENSEMBL_DOWNLOAD.out.versions ch_fasta = ENSEMBL_DOWNLOAD.out.primary_assembly - ch_chrgtf = ENSEMBL_DOWNLOAD.out.chrgtf ch_gtf = ENSEMBL_DOWNLOAD.out.gtf } else { ch_fasta = Channel.fromPath(params.fasta).map { that -> [[id:that.Name], that] } - ch_chrgtf = Channel.fromPath(params.chrgtf).map { that -> [[id:that.Name], that] } ch_gtf = Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] } } + if (!file(params.fai).exists() || file(params.fai).isEmpty()){ + SAMTOOLS_FAIDX(ch_fasta, [[],[]]).fai + ch_versions = SAMTOOLS_FAIDX.out.versions + ch_fai = SAMTOOLS_FAIDX.out.fai + } else { + ch_fai = Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } + } if ((!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()) && !params.skip_vcf){ @@ -72,10 +73,6 @@ workflow BUILD_REFERENCES { ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } } - - ch_fai = (!file(params.fai).exists() || file(params.fai).isEmpty()) ? SAMTOOLS_FAIDX(ch_fasta, [[],[]]).fai : Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } - - if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty()){ GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) RRNA_TRANSCRIPTS(ch_gtf) @@ -86,9 +83,12 @@ workflow BUILD_REFERENCES { ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } } - - ch_refflat = (!file(params.refflat).exists() || file(params.refflat).isEmpty()) ? GTF_TO_REFFLAT.refflat : Channel.fromPath(params.refflat) - + if (!file(params.refflat).exists() || file(params.refflat).isEmpty()){ + GTF_TO_REFFLAT(ch_gtf) + ch_refflat = GTF_TO_REFFLAT.out.refflat + } else { + ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } + } if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty() || !file(params.salmon_index_stub_check).exists() || file(params.salmon_index_stub_check).isEmpty()){ // add condition for qc @@ -99,7 +99,6 @@ workflow BUILD_REFERENCES { ch_salmon_index = Channel.fromPath(params.salmon_index) } - if ((params.starindex || params.all || params.starfusion || params.arriba) && (!file(params.starindex_ref).exists() || file(params.starindex_ref).isEmpty() || !file(params.starindex_ref_stub_check).exists() || file(params.starindex_ref_stub_check).isEmpty() )) { @@ -109,18 +108,17 @@ workflow BUILD_REFERENCES { ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } } - - if ((params.arriba || params.all) && - (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || - !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || - !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { - ARRIBA_DOWNLOAD() - ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } - ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } - ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } - } else { -// TODO need to update the module to emit blacklist,knownfusions etc - } +// if ((params.arriba || params.all) && +// (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || +// !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || +// !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { +// ARRIBA_DOWNLOAD() +// ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } +// ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } +// ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } +// } else { +// // TODO need to update the module to emit blacklist,knownfusions etc +// } if ((params.fusioncatcher || params.all) && @@ -159,21 +157,22 @@ workflow BUILD_REFERENCES { emit: ch_fasta - ch_chrgtf ch_gtf + ch_fai + ch_hgnc_ref ch_hgnc_date - ch_fai ch_rrna_interval ch_refflat ch_salmon_index ch_starindex_ref - ch_arriba_ref_blacklist - ch_arriba_ref_known_fusions - ch_arriba_ref_protein_domains + // ch_arriba_ref_blacklist + // ch_arriba_ref_known_fusions + // ch_arriba_ref_protein_domains ch_fusioncatcher_ref ch_starfusion_ref ch_fusionreport_ref + versions = ch_versions } /* diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 368658401..67dedb4b1 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -68,95 +68,95 @@ workflow RNAFUSION { BUILD_REFERENCES(params.genome, params.ensembl_version) ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) - // Optional - ch_fasta = params.fasta ? Channel.fromPath(params.fasta).map {it -> [[id:it[0].simpleName], it]}.collect() - : BUILD_REFERENCES.out.fasta.map {it -> [[id:it[0].simpleName], it]}.collect() - ch_gtf = params.gtf ? Channel.fromPath(params.gtf).map {it -> [[id:it[0].simpleName], it]}.collect() - : downloads.gtf.map {it -> [[id:it[0].simpleName], it]}.collect() - ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache) - : Channel.empty().mix(downloads.vep_cache) - ch_vep_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files) - : Channel.empty().mix(downloads.vep_plugin) - ch_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() - : Channel.empty() - ch_gene_panel_clinical_filter = params.gene_panel_clinical_filter ? Channel.fromPath(params.gene_panel_clinical_filter).collect() - : Channel.empty() - ch_ref_drop_annot_file = params.reference_drop_annot_file ? Channel.fromPath(params.reference_drop_annot_file).collect() - : Channel.empty() - ch_ref_drop_count_file = params.reference_drop_count_file ? Channel.fromPath(params.reference_drop_count_file).collect() - : Channel.empty() - ch_ref_drop_splice_folder = params.reference_drop_splice_folder ? Channel.fromPath(params.reference_drop_splice_folder).collect() - : Channel.empty() - ch_salmon_index = params.salmon_index ? Channel.fromPath(params.salmon_index) - : Channel.empty() - ch_star_index = params.star_index ? Channel.fromPath(params.star_index).map {it -> [[id:it[0].simpleName], it]}.collect() - : Channel.empty() - ch_transcript_fasta = params.transcript_fasta ? Channel.fromPath(params.transcript_fasta) - : Channel.empty() - ch_sequence_dict = params.sequence_dict ? Channel.fromPath(params.sequence_dict).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.empty() - ch_subsample_bed = params.subsample_bed ? Channel.fromPath(params.subsample_bed).collect() - : Channel.empty() + // // Optional + // ch_fasta = params.fasta ? Channel.fromPath(params.fasta).map {it -> [[id:it[0].simpleName], it]}.collect() + // : BUILD_REFERENCES.out.fasta.map {it -> [[id:it[0].simpleName], it]}.collect() + // ch_gtf = params.gtf ? Channel.fromPath(params.gtf).map {it -> [[id:it[0].simpleName], it]}.collect() + // : downloads.gtf.map {it -> [[id:it[0].simpleName], it]}.collect() + // ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache) + // : Channel.empty().mix(downloads.vep_cache) + // ch_vep_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files) + // : Channel.empty().mix(downloads.vep_plugin) + // ch_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() + // : Channel.empty() + // ch_gene_panel_clinical_filter = params.gene_panel_clinical_filter ? Channel.fromPath(params.gene_panel_clinical_filter).collect() + // : Channel.empty() + // ch_ref_drop_annot_file = params.reference_drop_annot_file ? Channel.fromPath(params.reference_drop_annot_file).collect() + // : Channel.empty() + // ch_ref_drop_count_file = params.reference_drop_count_file ? Channel.fromPath(params.reference_drop_count_file).collect() + // : Channel.empty() + // ch_ref_drop_splice_folder = params.reference_drop_splice_folder ? Channel.fromPath(params.reference_drop_splice_folder).collect() + // : Channel.empty() + // ch_salmon_index = params.salmon_index ? Channel.fromPath(params.salmon_index) + // : Channel.empty() + // ch_star_index = params.star_index ? Channel.fromPath(params.star_index).map {it -> [[id:it[0].simpleName], it]}.collect() + // : Channel.empty() + // ch_transcript_fasta = params.transcript_fasta ? Channel.fromPath(params.transcript_fasta) + // : Channel.empty() + // ch_sequence_dict = params.sequence_dict ? Channel.fromPath(params.sequence_dict).map{ it -> [[id:it[0].simpleName], it] }.collect() + // : Channel.empty() + // ch_subsample_bed = params.subsample_bed ? Channel.fromPath(params.subsample_bed).collect() + // : Channel.empty() // // Create channel from input file provided through params.input // - Channel - .fromSamplesheet("input") - .map { - meta, fastq_1, fastq_2, strandedness -> - if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } - } - .groupTuple() - .map { - validateInputSamplesheet(it) - } - .branch { - meta, fastqs -> - single : fastqs.size() == 1 - return [ meta, fastqs.flatten() ] - multiple: fastqs.size() > 1 - return [ meta, fastqs.flatten() ] - } - .set { ch_fastq } - - // - // MODULE: Concatenate FastQ files from same sample if required - // - CAT_FASTQ ( - ch_fastq.multiple - ) - .reads - .mix(ch_fastq.single) - .set { ch_cat_fastq } - ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) - - - // - // QC from FASTQ files - // - FASTQC ( - ch_cat_fastq - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions) - - SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') - ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) - - // - // Trimming - // - TRIM_WORKFLOW ( - ch_cat_fastq - ) - ch_reads = TRIM_WORKFLOW.out.trimmed_reads - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + // Channel + // .fromSamplesheet("input") + // .map { + // meta, fastq_1, fastq_2, strandedness -> + // if (!fastq_2) { + // return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] + // } else { + // return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] + // } + // } + // .groupTuple() + // .map { + // validateInputSamplesheet(it) + // } + // .branch { + // meta, fastqs -> + // single : fastqs.size() == 1 + // return [ meta, fastqs.flatten() ] + // multiple: fastqs.size() > 1 + // return [ meta, fastqs.flatten() ] + // } + // .set { ch_fastq } + + // // + // // MODULE: Concatenate FastQ files from same sample if required + // // + // CAT_FASTQ ( + // ch_fastq.multiple + // ) + // .reads + // .mix(ch_fastq.single) + // .set { ch_cat_fastq } + // ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) + + + // // + // // QC from FASTQ files + // // + // FASTQC ( + // ch_cat_fastq + // ) + // ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + // ch_versions = ch_versions.mix(FASTQC.out.versions) + + // SALMON_QUANT( ch_reads_all, BUILD_REFERENCES.out.ch_salmon_index.map{ meta, index -> index }, BUILD_REFERENCES.out.ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + // ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.zip.collect{it[1]}) + // ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) + + // // + // // Trimming + // // + // TRIM_WORKFLOW ( + // ch_cat_fastq + // ) + // ch_reads = TRIM_WORKFLOW.out.trimmed_reads + // ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) // // From e5ffe10759df03a754747d7c6b3b51fa3be2aabc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:43:45 +0200 Subject: [PATCH 049/887] update --- modules.json | 56 +-- .../nf-core/agat/convertspgff2tsv/meta.yml | 40 ++- modules/nf-core/arriba/arriba/meta.yml | 187 +++++----- modules/nf-core/arriba/download/meta.yml | 21 +- modules/nf-core/bedops/convert2bed/meta.yml | 49 ++- modules/nf-core/cat/cat/meta.yml | 39 ++- modules/nf-core/cat/fastq/meta.yml | 43 +-- modules/nf-core/fastp/meta.yml | 138 +++++--- modules/nf-core/fastqc/meta.yml | 57 +-- .../nf-core/gatk4/bedtointervallist/meta.yml | 59 ++-- .../gatk4/createsequencedictionary/meta.yml | 37 +- .../gatk4/markduplicates/environment.yml | 3 +- modules/nf-core/gatk4/markduplicates/meta.yml | 121 ++++--- modules/nf-core/gffread/meta.yml | 84 +++-- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- modules/nf-core/multiqc/meta.yml | 91 ++--- .../nf-core/multiqc/tests/main.nf.test.snap | 26 +- .../picard/collectinsertsizemetrics/meta.yml | 59 ++-- .../picard/collectrnaseqmetrics/meta.yml | 75 ++-- .../nf-core/picard/collectwgsmetrics/meta.yml | 97 +++--- modules/nf-core/rrnatranscripts/meta.yml | 25 +- modules/nf-core/salmon/index/meta.yml | 27 +- modules/nf-core/salmon/quant/meta.yml | 94 +++-- .../nf-core/samtools/faidx/environment.yml | 7 +- modules/nf-core/samtools/faidx/main.nf | 4 +- modules/nf-core/samtools/faidx/meta.yml | 85 +++-- .../samtools/faidx/tests/main.nf.test.snap | 50 +-- .../nf-core/samtools/index/environment.yml | 6 +- modules/nf-core/samtools/index/main.nf | 4 +- modules/nf-core/samtools/index/meta.yml | 68 ++-- .../samtools/index/tests/main.nf.test.snap | 46 +-- modules/nf-core/samtools/sort/environment.yml | 6 +- modules/nf-core/samtools/sort/main.nf | 5 +- modules/nf-core/samtools/sort/meta.yml | 99 +++--- .../samtools/sort/tests/main.nf.test.snap | 30 +- modules/nf-core/samtools/view/environment.yml | 6 +- modules/nf-core/samtools/view/main.nf | 4 +- modules/nf-core/samtools/view/meta.yml | 163 +++++---- .../samtools/view/tests/main.nf.test.snap | 66 ++-- modules/nf-core/star/align/environment.yml | 5 +- modules/nf-core/star/align/main.nf | 33 +- modules/nf-core/star/align/meta.yml | 258 +++++++++----- .../star/align/tests/main.nf.test.snap | 324 ++++++++++-------- .../star/align/tests/nextflow.arriba.config | 3 - .../nf-core/star/align/tests/nextflow.config | 3 - .../align/tests/nextflow.starfusion.config | 3 - .../star/genomegenerate/environment.yml | 3 +- modules/nf-core/star/genomegenerate/meta.yml | 57 +-- modules/nf-core/stringtie/merge/meta.yml | 38 +- modules/nf-core/stringtie/stringtie/meta.yml | 89 +++-- modules/nf-core/ucsc/gtftogenepred/meta.yml | 55 +-- 52 files changed, 1723 insertions(+), 1231 deletions(-) diff --git a/modules.json b/modules.json index 322f834fa..1a90927b5 100644 --- a/modules.json +++ b/modules.json @@ -7,142 +7,142 @@ "nf-core": { "agat/convertspgff2tsv": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "arriba/download": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bedops/convert2bed": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gffread": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "7c316cae26baf55e0add993bed2b0c9f7105c653", + "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/collectrnaseqmetrics": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "rrnatranscripts": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "salmon/index": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "star/align": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "30a97c755895b7dfe40a730b0695c554a10f1cdd", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ucsc/gtftogenepred": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } diff --git a/modules/nf-core/agat/convertspgff2tsv/meta.yml b/modules/nf-core/agat/convertspgff2tsv/meta.yml index 83078787b..31f098683 100644 --- a/modules/nf-core/agat/convertspgff2tsv/meta.yml +++ b/modules/nf-core/agat/convertspgff2tsv/meta.yml @@ -9,31 +9,39 @@ keywords: - tsv tools: - agat: - description: "AGAT is a toolkit for manipulation and getting information from GFF/GTF files" + description: "AGAT is a toolkit for manipulation and getting information from + GFF/GTF files" homepage: "https://github.com/NBISweden/AGAT" documentation: "https://agat.readthedocs.io/" tool_dev_url: "https://github.com/NBISweden/AGAT" doi: "10.5281/zenodo.3552717" licence: ["GPL v3"] + identifier: biotools:AGAT input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gff: - type: file - description: Annotation file in GFF3/GTF format - pattern: "*.{gff, gtf}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gff: + type: file + description: Annotation file in GFF3/GTF format + pattern: "*.{gff, gtf}" output: - tsv: - type: file - description: Annotation file in TSV format - pattern: "*.{gtf}" + - meta: + type: file + description: Annotation file in TSV format + pattern: "*.{gtf}" + - "*.tsv": + type: file + description: Annotation file in TSV format + pattern: "*.{gtf}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rannick" maintainers: diff --git a/modules/nf-core/arriba/arriba/meta.yml b/modules/nf-core/arriba/arriba/meta.yml index 11f744b54..f230dda1f 100644 --- a/modules/nf-core/arriba/arriba/meta.yml +++ b/modules/nf-core/arriba/arriba/meta.yml @@ -1,5 +1,6 @@ name: arriba_arriba -description: Arriba is a command-line tool for the detection of gene fusions from RNA-Seq data. +description: Arriba is a command-line tool for the detection of gene fusions from + RNA-Seq data. keywords: - fusion - arriba @@ -13,97 +14,107 @@ tools: tool_dev_url: https://github.com/suhrig/arriba doi: "10.1101/gr.257246.119" licence: ["MIT"] + identifier: biotools:Arriba input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Assembly FASTA file - pattern: "*.{fasta}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - gtf: - type: file - description: Annotation GTF file - pattern: "*.{gtf}" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - blacklist: - type: file - description: Blacklist file - pattern: "*.{tsv}" - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - known_fusions: - type: file - description: Known fusions file - pattern: "*.{tsv}" - - meta6: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - structural_variants: - type: file - description: Structural variants file - pattern: "*.{tsv}" - - meta7: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - tags: - type: file - description: Tags file - pattern: "*.{tsv}" - - meta8: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - protein_domains: - type: file - description: Protein domains file - pattern: "*.{gff3}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Assembly FASTA file + pattern: "*.{fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: Annotation GTF file + pattern: "*.{gtf}" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - blacklist: + type: file + description: Blacklist file + pattern: "*.{tsv}" + - - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - known_fusions: + type: file + description: Known fusions file + pattern: "*.{tsv}" + - - meta6: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - structural_variants: + type: file + description: Structural variants file + pattern: "*.{tsv}" + - - meta7: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - tags: + type: file + description: Tags file + pattern: "*.{tsv}" + - - meta8: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - protein_domains: + type: file + description: Protein domains file + pattern: "*.{gff3}" 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" - fusions: - type: file - description: File contains fusions which pass all of Arriba's filters. - pattern: "*.{fusions.tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fusions.tsv": + type: file + description: File contains fusions which pass all of Arriba's filters. + pattern: "*.{fusions.tsv}" - fusions_fail: - type: file - description: File contains fusions that Arriba classified as an artifact or that are also observed in healthy tissue. - pattern: "*.{fusions.discarded.tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fusions.discarded.tsv": + type: file + description: File contains fusions that Arriba classified as an artifact or + that are also observed in healthy tissue. + pattern: "*.{fusions.discarded.tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@praveenraj2018" - "@rannick" diff --git a/modules/nf-core/arriba/download/meta.yml b/modules/nf-core/arriba/download/meta.yml index d32106163..531c66c2f 100644 --- a/modules/nf-core/arriba/download/meta.yml +++ b/modules/nf-core/arriba/download/meta.yml @@ -1,5 +1,6 @@ name: arriba_download -description: Arriba is a command-line tool for the detection of gene fusions from RNA-Seq data. +description: Arriba is a command-line tool for the detection of gene fusions from + RNA-Seq data. keywords: - fusion - arriba @@ -12,16 +13,18 @@ tools: tool_dev_url: https://github.com/suhrig/arriba doi: "10.1101/gr.257246.119" licence: ["MIT"] + identifier: biotools:Arriba output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - reference: - type: directory - description: Folder with arriba references - pattern: "*" - + - "*": + type: directory + description: Folder with arriba references + pattern: "*" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@peterpru" diff --git a/modules/nf-core/bedops/convert2bed/meta.yml b/modules/nf-core/bedops/convert2bed/meta.yml index eea919650..6d84c0316 100644 --- a/modules/nf-core/bedops/convert2bed/meta.yml +++ b/modules/nf-core/bedops/convert2bed/meta.yml @@ -12,36 +12,33 @@ tools: tool_dev_url: "https://github.com/bedops" doi: "10.1093/bioinformatics/bts277" licence: ["GNU v2"] + identifier: biotools:bedops input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - - input: - type: file - description: Sorted BAM/GFF/GTF/GVF/PSL file - pattern: "*.{bam,gff,gtf,gvf,psl}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - in_file: + type: file + description: Input file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bed: - type: file - description: Sorted BED file - pattern: "*.{bed}" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.bed": + type: file + description: Sorted BED file + pattern: "*.{bed}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rannick" maintainers: diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml index 00a8db0bc..81778a067 100644 --- a/modules/nf-core/cat/cat/meta.yml +++ b/modules/nf-core/cat/cat/meta.yml @@ -9,25 +9,32 @@ tools: description: Just concatenation documentation: https://man7.org/linux/man-pages/man1/cat.1.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - files_in: - type: file - description: List of compressed / uncompressed files - pattern: "*" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - file_out: - type: file - description: Concatenated file. Will be gzipped if file_out ends with ".gz" - pattern: "${file_out}" + - meta: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - ${prefix}: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@erikrikarddaniel" - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml index db4ac3c79..91ff2fb5f 100644 --- a/modules/nf-core/cat/fastq/meta.yml +++ b/modules/nf-core/cat/fastq/meta.yml @@ -10,30 +10,33 @@ tools: The cat utility reads files sequentially, writing them to the standard output. documentation: https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files to be concatenated. + - - 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 to be concatenated. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - reads: - type: file - description: Merged fastq file - pattern: "*.{merged.fastq.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.merged.fastq.gz": + type: file + description: Merged fastq file + pattern: "*.{merged.fastq.gz}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index 8dfecc184..159404d08 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -11,66 +11,100 @@ tools: documentation: https://github.com/OpenGene/fastp doi: 10.1093/bioinformatics/bty560 licence: ["MIT"] + identifier: biotools:fastp 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}" - - discard_trimmed_pass: - type: boolean - description: Specify true to not write any reads that pass trimming thresholds. | - This can be used to use fastp for the output report only. - - 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 a file ending in `*.merged.fastq.gz` + - - 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}" + - - discard_trimmed_pass: + type: boolean + description: Specify true to not write any reads that pass trimming thresholds. + | This can be used to use fastp for the output report only. + - - 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 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" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fastp.fastq.gz": + type: file + description: The trimmed/modified/unmerged fastq reads + pattern: "*fastp.fastq.gz" - json: - type: file - description: Results in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: Results in JSON format + pattern: "*.json" - html: - type: file - description: Results in HTML format - pattern: "*.html" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.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" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: fastq log file + pattern: "*.log" - reads_fail: - type: file - description: Reads the failed the preprocessing - pattern: "*fail.fastq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fail.fastq.gz": + 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}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.merged.fastq.gz": + type: file + description: Reads that were successfully merged + pattern: "*.{merged.fastq.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@kevinmenden" diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e06..4827da7af 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/gatk4/bedtointervallist/meta.yml b/modules/nf-core/gatk4/bedtointervallist/meta.yml index 187da8850..25348e162 100644 --- a/modules/nf-core/gatk4/bedtointervallist/meta.yml +++ b/modules/nf-core/gatk4/bedtointervallist/meta.yml @@ -15,34 +15,45 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - bed: - type: file - description: Input bed file - pattern: "*.bed" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - dict: - type: file - description: Sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - bed: + type: file + description: Input bed file + pattern: "*.bed" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: Sequence dictionary + pattern: "*.dict" output: - interval_list: - type: file - description: gatk interval list file - pattern: "*.interval_list" + - meta: + type: file + description: gatk interval list file + pattern: "*.interval_list" + - "*.interval_list": + type: file + description: gatk interval list file + pattern: "*.interval_list" + - _list: + type: file + description: gatk interval list file + pattern: "*.interval_list" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index f9d70be09..7b5156bb3 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -15,25 +15,32 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Input fasta file - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Input fasta file + pattern: "*.{fasta,fa}" output: - dict: - type: file - description: gatk dictionary file - pattern: "*.{dict}" + - meta: + type: file + description: gatk dictionary file + pattern: "*.{dict}" + - "*.dict": + type: file + description: gatk dictionary file + pattern: "*.{dict}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml index 9fe34eb36..3c73c17e4 100644 --- a/modules/nf-core/gatk4/markduplicates/environment.yml +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -1,7 +1,8 @@ channels: - conda-forge - bioconda + dependencies: - bioconda::gatk4=4.5.0.0 - - bioconda::samtools=1.19.2 - bioconda::htslib=1.19.1 + - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/gatk4/markduplicates/meta.yml b/modules/nf-core/gatk4/markduplicates/meta.yml index b0f09d4b8..4772c5f39 100644 --- a/modules/nf-core/gatk4/markduplicates/meta.yml +++ b/modules/nf-core/gatk4/markduplicates/meta.yml @@ -1,5 +1,6 @@ name: gatk4_markduplicates -description: This tool locates and tags duplicate reads in a BAM or SAM file, where duplicate reads are defined as originating from a single fragment of DNA. +description: This tool locates and tags duplicate reads in a BAM or SAM file, where + duplicate reads are defined as originating from a single fragment of DNA. keywords: - bam - gatk4 @@ -7,60 +8,90 @@ keywords: - sort tools: - gatk4: - description: Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools with a primary focus on variant discovery and genotyping. Its powerful processing engine and high-performance computing features make it capable of taking on projects of any size. + description: Developed in the Data Sciences Platform at the Broad Institute, the + toolkit offers a wide variety of tools with a primary focus on variant discovery + and genotyping. Its powerful processing engine and high-performance computing + features make it capable of taking on projects of any size. homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard- tool_dev_url: https://github.com/broadinstitute/gatk doi: 10.1158/1538-7445.AM2017-3590 licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Sorted BAM file - pattern: "*.{bam}" - - fasta: - type: file - description: Fasta file - pattern: "*.{fasta}" - - fasta_fai: - type: file - description: Fasta index file - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - - fasta: + type: file + description: Fasta file + pattern: "*.{fasta}" + - - fasta_fai: + type: file + description: Fasta index file + pattern: "*.{fai}" 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" - - bam: - type: file - description: Marked duplicates BAM file - pattern: "*.{bam}" - cram: - type: file - description: Marked duplicates CRAM file - pattern: "*.{cram}" - - bai: - type: file - description: BAM index file - pattern: "*.{bam.bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*cram": + type: file + description: Marked duplicates CRAM file + pattern: "*.{cram}" + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*bam": + type: file + description: Marked duplicates BAM file + pattern: "*.{bam}" - crai: - type: file - description: CRAM index file - pattern: "*.{cram.crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file + pattern: "*.{cram.crai}" + - bai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM index file + pattern: "*.{bam.bai}" - metrics: - type: file - description: Duplicate metrics file generated by GATK - pattern: "*.{metrics.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics": + type: file + description: Duplicate metrics file generated by GATK + pattern: "*.{metrics.txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ajodeh-juma" - "@FriederikeHanssen" diff --git a/modules/nf-core/gffread/meta.yml b/modules/nf-core/gffread/meta.yml index c06028208..bebe7f575 100644 --- a/modules/nf-core/gffread/meta.yml +++ b/modules/nf-core/gffread/meta.yml @@ -1,53 +1,73 @@ name: gffread -description: Validate, filter, convert and perform various other operations on GFF files +description: Validate, filter, convert and perform various other operations on GFF + files keywords: - gff - conversion - validation tools: - gffread: - description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. + description: GFF/GTF utility providing format conversions, region filtering, FASTA + sequence extraction and more. homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread tool_dev_url: https://github.com/gpertea/gffread doi: 10.12688/f1000research.23297.1 licence: ["MIT"] + identifier: biotools:gffread input: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test' ] - - gff: - type: file - description: A reference file in either the GFF3, GFF2 or GTF format. - pattern: "*.{gff, gtf}" - - fasta: - type: file - description: A multi-fasta file with the genomic sequences - pattern: "*.{fasta,fa,faa,fas,fsa}" + - - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gff: + type: file + description: A reference file in either the GFF3, GFF2 or GTF format. + pattern: "*.{gff, gtf}" + - - fasta: + type: file + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" output: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test' ] - gtf: - type: file - description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present - pattern: "*.{gtf}" + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - "*.gtf": + type: file + description: GTF file resulting from the conversion of the GFF input file if + '-T' argument is present + pattern: "*.{gtf}" - gffread_gff: - type: file - description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent - pattern: "*.gff3" + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - "*.gff3": + type: file + description: GFF3 file resulting from the conversion of the GFF input file if + '-T' argument is absent + pattern: "*.gff3" - gffread_fasta: - type: file - description: Fasta file produced when either of '-w', '-x', '-y' parameters is present - pattern: "*.fasta" + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - "*.fasta": + type: file + description: Fasta file produced when either of '-w', '-x', '-y' parameters + is present + pattern: "*.fasta" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" maintainers: diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 0fe126444..6f5b867b7 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.25 + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index b9ccebdbb..9724d2f34 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 382c08cbc..b16c18792 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,53 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. - pattern: "*.{yml,yaml}" - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" - - replace_names: - type: file - description: | - Optional two-column sample renaming file. First column a set of - patterns, second column a set of corresponding replacements. Passed via - MultiQC's `--replace-names` option. - pattern: "*.{tsv}" - - sample_names: - type: file - description: | - Optional TSV file with headers, passed to the MultiQC --sample_names - argument. - pattern: "*.{tsv}" + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. + pattern: "*.{yml,yaml}" + - - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + - - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index b779e4692..2fcbb5ff7 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T12:41:34.562023" + "timestamp": "2024-10-02T17:51:46.317523" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:27:11.933869532" + "timestamp": "2024-10-02T17:52:20.680978" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:26:56.709849369" + "timestamp": "2024-10-02T17:52:09.185842" } -} +} \ No newline at end of file diff --git a/modules/nf-core/picard/collectinsertsizemetrics/meta.yml b/modules/nf-core/picard/collectinsertsizemetrics/meta.yml index e2749cb62..0947048dc 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/meta.yml +++ b/modules/nf-core/picard/collectinsertsizemetrics/meta.yml @@ -13,34 +13,43 @@ tools: documentation: "https://broadinstitute.github.io/picard/" tool_dev_url: "https://github.com/broadinstitute/picard" licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" 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" - - pdf: - type: file - description: Histogram plots of the insert size metrics computed by Picard - pattern: "*.pdf" - metrics: - type: file - description: Values used by Picard to generate the insert size histograms - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.txt": + type: file + description: Values used by Picard to generate the insert size histograms + pattern: "*.txt" + - histogram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pdf": + type: file + description: Insert size histogram in PDF format + pattern: "*.pdf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FerriolCalvet" maintainers: diff --git a/modules/nf-core/picard/collectrnaseqmetrics/meta.yml b/modules/nf-core/picard/collectrnaseqmetrics/meta.yml index 8a7bd2346..15d146baa 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/meta.yml +++ b/modules/nf-core/picard/collectrnaseqmetrics/meta.yml @@ -16,45 +16,52 @@ tools: documentation: "https://broadinstitute.github.io/picard/" tool_dev_url: "https://github.com/broadinstitute/picard" licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false, strandedness:true ] - - bam: - type: file - description: BAM/SAM file - pattern: "*.{bam,sam}" - - ref_flat: - type: file - description: Genome ref_flat file - - gene_pred: - type: file - description: genome gene_pred file as an alternative to the ref_flat file - - fasta: - type: file - description: Genome fasta file - - rrna_intervals: - type: file - description: Interval file of ribosomal RNA regions + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false, strandedness:true ] + - bam: + type: file + description: BAM/SAM file + pattern: "*.{bam,sam}" + - - ref_flat: + type: file + description: Genome ref_flat file + - - fasta: + type: file + description: Genome fasta file + - - rrna_intervals: + type: file + description: Interval file of ribosomal RNA regions output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - metrics: - type: file - description: RNA alignment metrics files generated by picard - pattern: "*.rna_metrics" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.rna_metrics": + type: file + description: RNA alignment metrics files generated by picard + pattern: "*.rna_metrics" - pdf: - type: file - description: Plot normalized position vs. coverage in a pdf file generated by picard + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pdf": + type: file + description: Plot normalized position vs. coverage in a pdf file generated by + picard - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@anoronh4" maintainers: diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index 5576ef928..bb7480809 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -1,5 +1,6 @@ name: picard_collectwgsmetrics -description: Collect metrics about coverage and performance of whole genome sequencing (WGS) experiments. +description: Collect metrics about coverage and performance of whole genome sequencing + (WGS) experiments. keywords: - alignment - metrics @@ -14,55 +15,59 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Aligned reads file - pattern: "*.{bam, cram}" - - bai: - type: file - description: (Optional) Aligned reads file index - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta,fna}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Genome fasta file index - pattern: "*.{fai}" - - intervallist: - type: file - description: Picard Interval List. Defines which contigs to include. Can be generated from a BED file with GATK BedToIntervalList. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Aligned reads file + pattern: "*.{bam, cram}" + - bai: + type: file + description: (Optional) Aligned reads file index + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta,fna}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Genome fasta file index + pattern: "*.{fai}" + - - intervallist: + type: file + description: Picard Interval List. Defines which contigs to include. Can be + generated from a BED file with GATK BedToIntervalList. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - metrics: - type: file - description: Alignment metrics files generated by picard - pattern: "*_{metrics}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_metrics": + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@flowuenne" diff --git a/modules/nf-core/rrnatranscripts/meta.yml b/modules/nf-core/rrnatranscripts/meta.yml index 145506011..93f6a10ef 100644 --- a/modules/nf-core/rrnatranscripts/meta.yml +++ b/modules/nf-core/rrnatranscripts/meta.yml @@ -10,21 +10,24 @@ tools: Extraction of ribosomal RNA homepage: https://github.com/nf-core/rnafusion licence: ["GPL-3.0-or-later"] + identifier: "" input: - - gtf: - type: file - description: GTF file - pattern: "*.{gtf}" + - - gtf: + type: file + description: GTF file + pattern: "*.{gtf}" output: # - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - rrna_gtf: - type: file - description: GTF file with ribosomal RNA only - pattern: "*.{gtf}" + - "*rrna_intervals.gtf": + type: file + description: GTF file with ribosomal RNA only + pattern: "*.{gtf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rannick" maintainers: diff --git a/modules/nf-core/salmon/index/meta.yml b/modules/nf-core/salmon/index/meta.yml index fd94dd274..48486a2bb 100644 --- a/modules/nf-core/salmon/index/meta.yml +++ b/modules/nf-core/salmon/index/meta.yml @@ -13,22 +13,25 @@ tools: manual: https://salmon.readthedocs.io/en/latest/salmon.html doi: 10.1038/nmeth.4197 licence: ["GPL-3.0-or-later"] + identifier: biotools:salmon input: - - genome_fasta: - type: file - description: Fasta file of the reference genome - - transcriptome_fasta: - type: file - description: Fasta file of the reference transcriptome + - - genome_fasta: + type: file + description: Fasta file of the reference genome + - - transcript_fasta: + type: file + description: Fasta file of the reference transcriptome output: - index: - type: directory - description: Folder containing the star index files - pattern: "salmon" + - salmon: + type: directory + description: Folder containing the star index files + pattern: "salmon" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/salmon/quant/meta.yml b/modules/nf-core/salmon/quant/meta.yml index a2faf589a..4cacde0f0 100644 --- a/modules/nf-core/salmon/quant/meta.yml +++ b/modules/nf-core/salmon/quant/meta.yml @@ -13,47 +13,69 @@ tools: manual: https://salmon.readthedocs.io/en/latest/salmon.html doi: 10.1038/nmeth.4197 licence: ["GPL-3.0-or-later"] + identifier: biotools:salmon 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 for single-end or paired-end data. - Multiple single-end fastqs or pairs of paired-end fastqs are - handled. - - index: - type: directory - description: Folder containing the star index files - - gtf: - type: file - description: GTF of the reference transcriptome - - transcript_fasta: - type: file - description: Fasta file of the reference transcriptome - - alignment_mode: - type: boolean - description: whether to run salmon in alignment mode - - lib_type: - type: string - description: | - Override library type inferred based on strandedness defined in meta object + - - 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 for single-end or paired-end data. + Multiple single-end fastqs or pairs of paired-end fastqs are + handled. + - - index: + type: directory + description: Folder containing the star index files + - - gtf: + type: file + description: GTF of the reference transcriptome + - - transcript_fasta: + type: file + description: Fasta file of the reference transcriptome + - - alignment_mode: + type: boolean + description: whether to run salmon in alignment mode + - - lib_type: + type: string + description: | + Override library type inferred based on strandedness defined in meta object output: - results: - type: directory - description: Folder containing the quantification results for a specific sample - pattern: "${prefix}" + - meta: + type: directory + description: Folder containing the quantification results for a specific sample + pattern: "${prefix}" + - ${prefix}: + type: directory + description: Folder containing the quantification results for a specific sample + pattern: "${prefix}" - json_info: - type: file - description: File containing meta information from Salmon quant - pattern: "*info.json" + - meta: + type: file + description: File containing meta information from Salmon quant + pattern: "*info.json" + - "*info.json": + type: file + description: File containing meta information from Salmon quant + pattern: "*info.json" + - lib_format_counts: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*lib_format_counts.json": + type: file + description: File containing the library format counts + pattern: "*lib_format_counts.json" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index b98cbb990..62054fc97 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -1,7 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - dependencies: - - bioconda::htslib=1.20 - - bioconda::samtools=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index bdcdbc954..28c0a81cf 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index f3c25de20..6721b2cb8 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -14,47 +14,62 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - fa: - type: file - description: FASTA file - pattern: "*.{fa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{fa,fasta}": + type: file + description: FASTA file + pattern: "*.{fa}" - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 3223b72bc..1bbb3ec2b 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -18,7 +18,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -36,15 +36,15 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:14.779784761" + "timestamp": "2024-09-16T07:57:47.450887871" }, "test_samtools_faidx_bgzip": { "content": [ @@ -71,7 +71,7 @@ ] ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -95,15 +95,15 @@ ] ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:20.256633877" + "timestamp": "2024-09-16T07:58:04.804905659" }, "test_samtools_faidx_fasta": { "content": [ @@ -124,7 +124,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ [ @@ -142,15 +142,15 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:25.632577273" + "timestamp": "2024-09-16T07:58:23.831268154" }, "test_samtools_faidx_stub_fasta": { "content": [ @@ -171,7 +171,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ [ @@ -189,15 +189,15 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:31.058424849" + "timestamp": "2024-09-16T07:58:35.600243706" }, "test_samtools_faidx_stub_fai": { "content": [ @@ -218,7 +218,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -236,14 +236,14 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:36.479929617" + "timestamp": "2024-09-16T07:58:54.705460167" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index da2df5e43..62054fc97 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -1,6 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::samtools=1.20 - - bioconda::htslib=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index e002585b9..311756102 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 01a4ee03e..db8df0d50 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -15,38 +15,52 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - crai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - csi: - type: file - description: CSI index file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: CSI index file + pattern: "*.{csi}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index 799d199ce..72d65e81a 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -18,7 +18,7 @@ ], "3": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ], "bai": [ @@ -36,15 +36,15 @@ ] ], "versions": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T16:51:53.9057" + "timestamp": "2024-09-16T08:21:25.261127166" }, "crai - stub": { "content": [ @@ -65,7 +65,7 @@ ] ], "3": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ], "bai": [ @@ -83,15 +83,15 @@ ], "versions": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T16:51:45.931558" + "timestamp": "2024-09-16T08:21:12.653194876" }, "bai - stub": { "content": [ @@ -112,7 +112,7 @@ ], "3": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ], "bai": [ [ @@ -130,28 +130,28 @@ ], "versions": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T16:51:34.807525" + "timestamp": "2024-09-16T08:21:01.854932651" }, "csi": { "content": [ "test.paired_end.sorted.bam.csi", [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T16:52:55.688799" + "timestamp": "2024-09-16T08:20:51.485364222" }, "crai": { "content": [ @@ -172,7 +172,7 @@ ] ], "3": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ], "bai": [ @@ -190,15 +190,15 @@ ], "versions": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T16:51:17.609533" + "timestamp": "2024-09-16T08:20:40.518873972" }, "bai": { "content": [ @@ -219,7 +219,7 @@ ], "3": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ], "bai": [ [ @@ -237,14 +237,14 @@ ], "versions": [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T16:51:04.16585" + "timestamp": "2024-09-16T08:20:21.184050361" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index da2df5e43..62054fc97 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -1,6 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::samtools=1.20 - - bioconda::htslib=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 8e019099c..acfd9252c 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta) , path(bam) @@ -32,7 +32,6 @@ process SAMTOOLS_SORT { """ samtools cat \\ - --threads $task.cpus \\ ${bam} \\ | \\ samtools sort \\ diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 341a7d0eb..a9dbec5a8 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -15,52 +15,73 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file(s) - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference genome FASTA file - pattern: "*.{fa,fasta,fna}" - optional: true + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file(s) + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + optional: true output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: Sorted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Sorted BAM file + pattern: "*.{bam}" - cram: - type: file - description: Sorted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Sorted CRAM file + pattern: "*.{cram}" - crai: - type: file - description: CRAM index file (optional) - pattern: "*.crai" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" - csi: - type: file - description: BAM index file (optional) - pattern: "*.csi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index da38d5d15..2d6b29004 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -20,14 +20,14 @@ ] ], [ - "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T17:19:37.196205" + "timestamp": "2024-09-16T08:49:58.207549273" }, "bam - stub": { "content": [ @@ -57,7 +57,7 @@ ] ], "4": [ - "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ], "bam": [ [ @@ -84,15 +84,15 @@ ] ], "versions": [ - "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T15:54:46.580756" + "timestamp": "2024-09-16T08:50:08.630951018" }, "cram - stub": { "content": [ @@ -122,7 +122,7 @@ ], "4": [ - "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ], "bam": [ @@ -149,15 +149,15 @@ ], "versions": [ - "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T15:57:30.505698" + "timestamp": "2024-09-16T08:50:19.061912443" }, "bam": { "content": [ @@ -167,7 +167,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,21c992d59615936b99f2ad008aa54400" + "test.sorted.bam:md5,34aa85e86abefe637f7a4a9887f016fc" ] ], [ @@ -180,13 +180,13 @@ ] ], [ - "versions.yml:md5,7a360de20e1d7a6f15a5e8fbe0a9c062" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T15:54:25.872954" + "timestamp": "2024-09-16T08:49:43.971158333" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index da2df5e43..62054fc97 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -1,6 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::samtools=1.20 - - bioconda::htslib=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index dc611448c..37e05cec8 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 27be60d08..caa7b0150 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -15,77 +15,120 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - index: - type: file - description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) - pattern: "*.{.bai,.csi,.crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - qname: - type: file - description: Optional file with read names to output only select alignments - pattern: "*.{txt,list}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - index: + type: file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) + pattern: "*.{.bai,.csi,.crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - qname: + type: file + description: Optional file with read names to output only select alignments + pattern: "*.{txt,list}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: optional filtered/converted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: optional filtered/converted BAM file + pattern: "*.{bam}" - cram: - type: file - description: optional filtered/converted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: optional filtered/converted CRAM file + pattern: "*.{cram}" - sam: - type: file - description: optional filtered/converted SAM file - pattern: "*.{sam}" - # bai, csi, and crai are created with `--write-index` + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.sam: + type: file + description: optional filtered/converted SAM file + pattern: "*.{sam}" - bai: - type: file - description: optional BAM file index - pattern: "*.{bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.bai: + type: file + description: optional BAM file index + pattern: "*.{bai}" - csi: - type: file - description: optional tabix BAM file index - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.csi: + type: file + description: optional tabix BAM file index + pattern: "*.{csi}" - crai: - type: file - description: optional CRAM file index - pattern: "*.{crai}" - # unselected and unselected_index are created when passing a qname + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.crai: + type: file + description: optional CRAM file index + pattern: "*.{crai}" - unselected: - type: file - description: optional file with unselected alignments - pattern: "*.unselected.{bam,cram,sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}: + type: file + description: optional file with unselected alignments + pattern: "*.unselected.{bam,cram,sam}" - unselected_index: - type: file - description: index for the "unselected" file - pattern: "*.unselected.{bai,csi,crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}.{bai,csi,crsi}: + type: file + description: index for the "unselected" file + pattern: "*.unselected.{bai,csi,crai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@joseespinosa" diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap index 6bcce9fea..63849b037 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -56,14 +56,14 @@ "bam_stub_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:20.390692583" + "timestamp": "2024-09-16T09:26:24.461775464" }, "cram_to_bam_index_cram": { "content": [ @@ -169,6 +169,16 @@ }, "timestamp": "2024-02-12T19:37:56.490286" }, + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, "bam_csi": { "content": [ [ @@ -208,14 +218,14 @@ "cram_to_bam_index_qname_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:15.007493874" + "timestamp": "2024-09-16T09:25:51.953436682" }, "cram_to_bam_bam": { "content": [ @@ -240,14 +250,14 @@ "cram_to_bam_index_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:09.472376824" + "timestamp": "2024-09-16T09:25:14.475388399" }, "cram_to_bam_bai": { "content": [ @@ -264,14 +274,14 @@ "cram_to_bam_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:04.080050906" + "timestamp": "2024-09-16T09:24:49.673441798" }, "cram_bam": { "content": [ @@ -378,14 +388,14 @@ "bam_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:52.978954857" + "timestamp": "2024-09-16T09:23:27.151650338" }, "cram_to_bam_index_qname_cram": { "content": [ @@ -450,14 +460,24 @@ "cram_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:24:12.95416913" + }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "23.04.3" }, - "timestamp": "2024-05-28T15:42:58.400776109" + "timestamp": "2024-02-12T19:38:23.322874" }, "bam_sam": { "content": [ diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml index e3d1c714d..1debc4c9b 100644 --- a/modules/nf-core/star/align/environment.yml +++ b/modules/nf-core/star/align/environment.yml @@ -1,8 +1,9 @@ channels: - conda-forge - bioconda + dependencies: - - bioconda::star=2.7.10a - - bioconda::samtools=1.18 - bioconda::htslib=1.18 + - bioconda::samtools=1.18 + - bioconda::star=2.7.10a - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index ae67e0040..b5bc9ddf8 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -21,33 +21,34 @@ process STAR_ALIGN { tuple val(meta), path('*Log.progress.out'), emit: log_progress path "versions.yml" , emit: versions - tuple val(meta), path('*d.out.bam') , optional:true, emit: bam - tuple val(meta), path('*sortedByCoord.out.bam') , optional:true, emit: bam_sorted - tuple val(meta), path('*toTranscriptome.out.bam'), optional:true, emit: bam_transcript - tuple val(meta), path('*Aligned.unsort.out.bam') , optional:true, emit: bam_unsorted - tuple val(meta), path('*fastq.gz') , optional:true, emit: fastq - tuple val(meta), path('*.tab') , optional:true, emit: tab - tuple val(meta), path('*.SJ.out.tab') , optional:true, emit: spl_junc_tab - tuple val(meta), path('*.ReadsPerGene.out.tab') , optional:true, emit: read_per_gene_tab - tuple val(meta), path('*.out.junction') , optional:true, emit: junction - tuple val(meta), path('*.out.sam') , optional:true, emit: sam - tuple val(meta), path('*.wig') , optional:true, emit: wig - tuple val(meta), path('*.bg') , optional:true, emit: bedgraph + tuple val(meta), path('*d.out.bam') , optional:true, emit: bam + tuple val(meta), path("${prefix}.sortedByCoord.out.bam") , optional:true, emit: bam_sorted + tuple val(meta), path("${prefix}.Aligned.sortedByCoord.out.bam") , optional:true, emit: bam_sorted_aligned + tuple val(meta), path('*toTranscriptome.out.bam') , optional:true, emit: bam_transcript + tuple val(meta), path('*Aligned.unsort.out.bam') , optional:true, emit: bam_unsorted + tuple val(meta), path('*fastq.gz') , optional:true, emit: fastq + tuple val(meta), path('*.tab') , optional:true, emit: tab + tuple val(meta), path('*.SJ.out.tab') , optional:true, emit: spl_junc_tab + tuple val(meta), path('*.ReadsPerGene.out.tab') , optional:true, emit: read_per_gene_tab + tuple val(meta), path('*.out.junction') , optional:true, emit: junction + tuple val(meta), path('*.out.sam') , optional:true, emit: sam + tuple val(meta), path('*.wig') , optional:true, emit: wig + tuple val(meta), path('*.bg') , optional:true, emit: bedgraph when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def reads1 = [], reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" def seq_center = seq_center ? "'CN:$seq_center'" : "" - def attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center 'SM:$prefix' $seq_platform" + attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center 'SM:$prefix' $seq_platform" def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' - def mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' + mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' """ STAR \\ --genomeDir $index \\ @@ -79,7 +80,7 @@ process STAR_ALIGN { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" """ echo "" | gzip > ${prefix}.unmapped_1.fastq.gz echo "" | gzip > ${prefix}.unmapped_2.fastq.gz diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml index e80dbb7dd..d9cba2aa7 100644 --- a/modules/nf-core/star/align/meta.yml +++ b/modules/nf-core/star/align/meta.yml @@ -14,97 +14,201 @@ tools: manual: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf doi: 10.1093/bioinformatics/bts635 licence: ["MIT"] + identifier: biotools:star input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - index: - type: directory - description: STAR genome index - pattern: "star" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - gtf: - type: file - description: Annotation GTF file - pattern: "*.{gtf}" - - star_ignore_sjdbgtf: - type: boolean - description: Ignore annotation GTF file - - seq_platform: - type: string - description: Sequencing platform - - seq_center: - type: string - description: Sequencing center + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - index: + type: directory + description: STAR genome index + pattern: "star" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: Annotation GTF file + pattern: "*.{gtf}" + - - star_ignore_sjdbgtf: + type: boolean + description: Ignore annotation GTF file + - - seq_platform: + type: string + description: Sequencing platform + - - seq_center: + type: string + description: Sequencing center output: - - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" - log_final: - type: file - description: STAR final log file - pattern: "*Log.final.out" + - meta: + type: file + description: STAR final log file + pattern: "*Log.final.out" + - "*Log.final.out": + type: file + description: STAR final log file + pattern: "*Log.final.out" - log_out: - type: file - description: STAR lot out file - pattern: "*Log.out" + - meta: + type: file + description: STAR lot out file + pattern: "*Log.out" + - "*Log.out": + type: file + description: STAR lot out file + pattern: "*Log.out" - log_progress: - type: file - description: STAR log progress file - pattern: "*Log.progress.out" + - meta: + type: file + description: STAR log progress file + pattern: "*Log.progress.out" + - "*Log.progress.out": + type: file + description: STAR log progress file + pattern: "*Log.progress.out" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + - bam: + - meta: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - "*d.out.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" - bam_sorted: - type: file - description: Sorted BAM file of read alignments (optional) - pattern: "*sortedByCoord.out.bam" + - meta: + type: file + description: Sorted BAM file of read alignments (optional) + pattern: "*sortedByCoord.out.bam" + - ${prefix}.sortedByCoord.out.bam: + type: file + description: Sorted BAM file of read alignments (optional) + pattern: "*sortedByCoord.out.bam" + - bam_sorted_aligned: + - meta: {} + - ${prefix}.Aligned.sortedByCoord.out.bam: {} - bam_transcript: - type: file - description: Output BAM file of transcriptome alignment (optional) - pattern: "*toTranscriptome.out.bam" + - meta: + type: file + description: Output BAM file of transcriptome alignment (optional) + pattern: "*toTranscriptome.out.bam" + - "*toTranscriptome.out.bam": + type: file + description: Output BAM file of transcriptome alignment (optional) + pattern: "*toTranscriptome.out.bam" - bam_unsorted: - type: file - description: Unsorted BAM file of read alignments (optional) - pattern: "*Aligned.unsort.out.bam" + - meta: + type: file + description: Unsorted BAM file of read alignments (optional) + pattern: "*Aligned.unsort.out.bam" + - "*Aligned.unsort.out.bam": + type: file + description: Unsorted BAM file of read alignments (optional) + pattern: "*Aligned.unsort.out.bam" - fastq: - type: file - description: Unmapped FastQ files (optional) - pattern: "*fastq.gz" + - meta: + type: file + description: Unmapped FastQ files (optional) + pattern: "*fastq.gz" + - "*fastq.gz": + type: file + description: Unmapped FastQ files (optional) + pattern: "*fastq.gz" - tab: - type: file - description: STAR output tab file(s) (optional) - pattern: "*.tab" + - meta: + type: file + description: STAR output tab file(s) (optional) + pattern: "*.tab" + - "*.tab": + type: file + description: STAR output tab file(s) (optional) + pattern: "*.tab" + - spl_junc_tab: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.SJ.out.tab" + - "*.SJ.out.tab": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.SJ.out.tab" + - read_per_gene_tab: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.ReadsPerGene.out.tab" + - "*.ReadsPerGene.out.tab": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.ReadsPerGene.out.tab" - junction: - type: file - description: STAR chimeric junction output file (optional) - pattern: "*.out.junction" + - meta: + type: file + description: STAR chimeric junction output file (optional) + pattern: "*.out.junction" + - "*.out.junction": + type: file + description: STAR chimeric junction output file (optional) + pattern: "*.out.junction" + - sam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.out.sam" + - "*.out.sam": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.out.sam" - wig: - type: file - description: STAR output wiggle format file(s) (optional) - pattern: "*.wig" + - meta: + type: file + description: STAR output wiggle format file(s) (optional) + pattern: "*.wig" + - "*.wig": + type: file + description: STAR output wiggle format file(s) (optional) + pattern: "*.wig" - bedgraph: - type: file - description: STAR output bedGraph format file(s) (optional) - pattern: "*.bg" + - meta: + type: file + description: STAR output bedGraph format file(s) (optional) + pattern: "*.bg" + - "*.bg": + type: file + description: STAR output bedGraph format file(s) (optional) + pattern: "*.bg" authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap index c814eb56c..0da28d37c 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -26,7 +26,11 @@ "id": "test", "single_end": true }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "11": [ @@ -35,7 +39,7 @@ "id": "test", "single_end": true }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -44,7 +48,7 @@ "id": "test", "single_end": true }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -53,7 +57,7 @@ "id": "test", "single_end": true }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -62,10 +66,19 @@ "id": "test", "single_end": true }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ [ { "id": "test", @@ -105,10 +118,7 @@ "id": "test", "single_end": true }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ @@ -117,7 +127,7 @@ "id": "test", "single_end": true }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -126,7 +136,7 @@ "id": "test", "single_end": true }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -135,10 +145,7 @@ "id": "test", "single_end": true }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -148,9 +155,8 @@ "single_end": true }, [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -173,10 +179,16 @@ "id": "test", "single_end": true }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_sorted_aligned": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam_transcript": [ @@ -312,7 +324,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T15:16:04.712114" + "timestamp": "2024-10-01T11:39:15.440397" }, "homo_sapiens - paired_end - arriba - stub": { "content": [ @@ -341,7 +353,11 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "11": [ @@ -350,7 +366,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -359,7 +375,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -368,7 +384,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -377,10 +393,19 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ [ { "id": "test", @@ -420,10 +445,7 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ @@ -432,7 +454,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -441,7 +463,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -450,10 +472,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -463,9 +482,8 @@ "single_end": false }, [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -488,10 +506,16 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_sorted_aligned": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam_transcript": [ @@ -627,7 +651,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T15:16:28.874293" + "timestamp": "2024-10-01T11:40:15.472109" }, "homo_sapiens - single_end": { "content": [ @@ -644,13 +668,7 @@ ] ], [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" - ] + ], [ @@ -711,7 +729,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T18:02:34.35338" + "timestamp": "2024-10-01T11:23:08.001162" }, "homo_sapiens - paired_end": { "content": [ @@ -728,13 +746,7 @@ ] ], [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" - ] + ], [ @@ -795,7 +807,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T18:03:16.701923" + "timestamp": "2024-10-01T11:24:46.295219" }, "homo_sapiens - paired_end - multiple - stub": { "content": [ @@ -824,7 +836,11 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "11": [ @@ -833,7 +849,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -842,7 +858,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -851,7 +867,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -860,10 +876,19 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ [ { "id": "test", @@ -903,10 +928,7 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ @@ -915,7 +937,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -924,7 +946,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -933,10 +955,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -946,9 +965,8 @@ "single_end": false }, [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -971,10 +989,16 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_sorted_aligned": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam_transcript": [ @@ -1110,7 +1134,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T15:16:51.360287" + "timestamp": "2024-10-01T11:41:07.310866" }, "homo_sapiens - paired_end - multiple": { "content": [ @@ -1127,13 +1151,7 @@ ] ], [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" - ] + ], [ @@ -1194,7 +1212,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T13:13:28.987438" + "timestamp": "2024-10-01T11:38:46.605044" }, "homo_sapiens - paired_end - stub": { "content": [ @@ -1223,7 +1241,11 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "11": [ @@ -1232,7 +1254,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -1241,7 +1263,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -1250,7 +1272,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -1259,10 +1281,19 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ [ { "id": "test", @@ -1302,10 +1333,7 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ @@ -1314,7 +1342,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -1323,7 +1351,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -1332,10 +1360,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -1345,9 +1370,8 @@ "single_end": false }, [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1370,10 +1394,16 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_sorted_aligned": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam_transcript": [ @@ -1509,7 +1539,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T15:16:16.798018" + "timestamp": "2024-10-01T11:39:51.595873" }, "homo_sapiens - paired_end - starfusion": { "content": [ @@ -1584,7 +1614,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T13:10:55.371956" + "timestamp": "2024-10-01T11:35:43.874508" }, "homo_sapiens - paired_end - arriba": { "content": [ @@ -1653,7 +1683,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T13:05:10.7534" + "timestamp": "2024-10-01T11:28:32.599223" }, "homo_sapiens - paired_end - starfusion - stub": { "content": [ @@ -1682,7 +1712,11 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "11": [ @@ -1691,7 +1725,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -1700,7 +1734,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -1709,7 +1743,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -1718,10 +1752,19 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ [ { "id": "test", @@ -1761,10 +1804,7 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ @@ -1773,7 +1813,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -1782,7 +1822,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -1791,10 +1831,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -1804,9 +1841,8 @@ "single_end": false }, [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1829,10 +1865,16 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_sorted_aligned": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam_transcript": [ @@ -1968,6 +2010,6 @@ "nf-test": "0.9.0", "nextflow": "24.04.3" }, - "timestamp": "2024-07-22T15:16:40.64399" + "timestamp": "2024-10-01T11:40:42.29249" } } \ No newline at end of file diff --git a/modules/nf-core/star/align/tests/nextflow.arriba.config b/modules/nf-core/star/align/tests/nextflow.arriba.config index 2324b9e58..cf09323fc 100644 --- a/modules/nf-core/star/align/tests/nextflow.arriba.config +++ b/modules/nf-core/star/align/tests/nextflow.arriba.config @@ -9,6 +9,3 @@ process { } } - -// Fix chown issue for the output star folder -docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/nextflow.config b/modules/nf-core/star/align/tests/nextflow.config index c4ac58088..18bc2ee8a 100644 --- a/modules/nf-core/star/align/tests/nextflow.config +++ b/modules/nf-core/star/align/tests/nextflow.config @@ -9,6 +9,3 @@ process { } } - -// Fix chown issue for the output star folder -docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/nextflow.starfusion.config b/modules/nf-core/star/align/tests/nextflow.starfusion.config index 467b64977..7880bfcf5 100644 --- a/modules/nf-core/star/align/tests/nextflow.starfusion.config +++ b/modules/nf-core/star/align/tests/nextflow.starfusion.config @@ -9,6 +9,3 @@ process { } } - -// Fix chown issue for the output star folder -docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml index 38611dfa2..1debc4c9b 100644 --- a/modules/nf-core/star/genomegenerate/environment.yml +++ b/modules/nf-core/star/genomegenerate/environment.yml @@ -1,8 +1,9 @@ channels: - conda-forge - bioconda + dependencies: - - bioconda::samtools=1.18 - bioconda::htslib=1.18 + - bioconda::samtools=1.18 - bioconda::star=2.7.10a - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/genomegenerate/meta.yml b/modules/nf-core/star/genomegenerate/meta.yml index 1061e1b8d..33c1f65f3 100644 --- a/modules/nf-core/star/genomegenerate/meta.yml +++ b/modules/nf-core/star/genomegenerate/meta.yml @@ -14,37 +14,40 @@ tools: manual: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf doi: 10.1093/bioinformatics/bts635 licence: ["MIT"] + identifier: biotools:star input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Fasta file of the reference genome - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - gtf: - type: file - description: GTF file of the reference genome + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Fasta file of the reference genome + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: GTF file of the reference genome output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - index: - type: directory - description: Folder containing the star index files - pattern: "star" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - star: + type: directory + description: Folder containing the star index files + pattern: "star" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/stringtie/merge/meta.yml b/modules/nf-core/stringtie/merge/meta.yml index 5d02d6786..cf6902b32 100644 --- a/modules/nf-core/stringtie/merge/meta.yml +++ b/modules/nf-core/stringtie/merge/meta.yml @@ -11,27 +11,29 @@ tools: homepage: https://ccb.jhu.edu/software/stringtie/index.shtml documentation: https://ccb.jhu.edu/software/stringtie/index.shtml?t=manual licence: ["MIT"] + identifier: biotools:stringtie input: - - stringtie_gtf: - type: file - description: | - Stringtie transcript gtf output(s). - pattern: "*.gtf" - - annotation_gtf: - type: file - description: | - Annotation gtf file (optional). - pattern: "*.gtf" + - - stringtie_gtf: + type: file + description: | + Stringtie transcript gtf output(s). + pattern: "*.gtf" + - - annotation_gtf: + type: file + description: | + Annotation gtf file (optional). + pattern: "*.gtf" output: - - merged_gtf: - type: map - description: | - Merged gtf from annotation and stringtie output gtfs. - pattern: "*.gtf" + - gtf: + - stringtie.merged.gtf: + type: file + description: Merged gtf file + pattern: "stringtie.merged.gtf" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yuukiiwa" maintainers: diff --git a/modules/nf-core/stringtie/stringtie/meta.yml b/modules/nf-core/stringtie/stringtie/meta.yml index d8ebdd88a..e55b2abfc 100644 --- a/modules/nf-core/stringtie/stringtie/meta.yml +++ b/modules/nf-core/stringtie/stringtie/meta.yml @@ -12,46 +12,67 @@ tools: homepage: https://ccb.jhu.edu/software/stringtie/index.shtml documentation: https://ccb.jhu.edu/software/stringtie/index.shtml?t=manual licence: ["MIT"] + identifier: biotools:stringtie input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: | - Stringtie transcript gtf output(s). - - annotation_gtf: - type: file - description: | - Annotation gtf file (optional). + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: | + Stringtie transcript gtf output(s). + - - annotation_gtf: + type: file + description: | + Annotation gtf file (optional). output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - transcript_gtf: - type: file - description: transcript gtf - pattern: "*.{transcripts.gtf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.transcripts.gtf": + type: file + description: transcript gtf + pattern: "*.{transcripts.gtf}" + - abundance: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.abundance.txt": + type: file + description: abundance + pattern: "*.{abundance.txt}" - coverage_gtf: - type: file - description: coverage gtf - pattern: "*.{coverage.gtf}" - - abudance: - type: file - description: abudance - pattern: "*.{abudance.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.coverage.gtf": + type: file + description: coverage gtf + pattern: "*.{coverage.gtf}" - ballgown: - type: file - description: for running ballgown - pattern: "*.{ballgown}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ballgown": + type: file + description: for running ballgown + pattern: "*.{ballgown}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/ucsc/gtftogenepred/meta.yml b/modules/nf-core/ucsc/gtftogenepred/meta.yml index 02122e410..cf04154d4 100644 --- a/modules/nf-core/ucsc/gtftogenepred/meta.yml +++ b/modules/nf-core/ucsc/gtftogenepred/meta.yml @@ -11,34 +11,43 @@ tools: description: Convert GTF files to GenePred format homepage: http://hgdownload.cse.ucsc.edu/admin/exe/ licence: ["varies; see http://genome.ucsc.edu/license"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gtf: - type: file - description: GTF file - pattern: "*.{gtf}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gtf: + type: file + description: GTF file + pattern: "*.{gtf}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - genepred: - type: file - description: genepred file - pattern: "*.{genepred}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.genepred": + type: file + description: genepred file + pattern: "*.{genepred}" - refflat: - type: file - description: refflat file - pattern: "*.{refflat}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.refflat": + type: file + description: refflat file + pattern: "*.{refflat}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@BarryDigby" - "@anoronh4" From db7cf556e61235a741160711695af3df75e9d530 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:46:52 +0200 Subject: [PATCH 050/887] updated changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a8ad1d49..fe350b46c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Updated modules and migrated non-specific modules to nf-core/modules [#484](https://github.com/nf-core/rnafusion/pull/484) + ### Fixed - Fixed some Nextflow run-commands in the docs [#491](https://github.com/nf-core/rnafusion/pull/491) From b8c672a4121f758034f1ca3310294487e5fe8deb Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 8 Oct 2024 12:32:59 +0000 Subject: [PATCH 051/887] Template update for nf-core/tools version 3.0.0 --- .editorconfig | 4 + .github/CONTRIBUTING.md | 10 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/awsfulltest.yml | 23 +- .github/workflows/ci.yml | 17 +- .github/workflows/download_pipeline.yml | 53 ++- .github/workflows/linting.yml | 23 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 2 +- .../workflows/template_version_comment.yml | 43 ++ .gitpod.yml | 7 +- .nf-core.yml | 19 +- .pre-commit-config.yaml | 2 +- .prettierignore | 1 + CITATIONS.md | 4 +- README.md | 5 +- assets/schema_input.json | 2 +- conf/base.config | 34 +- conf/igenomes_ignored.config | 9 + conf/modules.config | 1 - conf/test.config | 13 +- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes docs/images/mqc_fastqc_counts.png | Bin 33918 -> 0 bytes docs/images/mqc_fastqc_quality.png | Bin 55769 -> 0 bytes docs/output.md | 11 +- docs/usage.md | 12 +- main.nf | 10 +- modules.json | 12 +- modules/nf-core/fastqc/environment.yml | 2 - modules/nf-core/fastqc/main.nf | 5 +- modules/nf-core/fastqc/meta.yml | 57 +-- modules/nf-core/fastqc/tests/main.nf.test | 225 ++++++++--- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++++++++++++++++-- modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 14 +- modules/nf-core/multiqc/meta.yml | 78 ++-- modules/nf-core/multiqc/tests/main.nf.test | 8 + .../nf-core/multiqc/tests/main.nf.test.snap | 20 +- modules/nf-core/multiqc/tests/nextflow.config | 5 + nextflow.config | 146 ++++--- nextflow_schema.json | 85 +--- .../utils_nfcore_rnafusion_pipeline/main.nf | 56 +-- .../nf-core/utils_nextflow_pipeline/main.nf | 24 +- .../tests/nextflow.config | 2 +- .../nf-core/utils_nfcore_pipeline/main.nf | 45 ++- .../nf-core/utils_nfschema_plugin/main.nf | 46 +++ .../nf-core/utils_nfschema_plugin/meta.yml | 35 ++ .../utils_nfschema_plugin/tests/main.nf.test | 117 ++++++ .../tests/nextflow.config | 8 + .../tests/nextflow_schema.json | 8 +- .../nf-core/utils_nfvalidation_plugin/main.nf | 62 --- .../utils_nfvalidation_plugin/meta.yml | 44 --- .../tests/main.nf.test | 200 ---------- .../utils_nfvalidation_plugin/tests/tags.yml | 2 - workflows/rnafusion.nf | 23 +- 55 files changed, 1206 insertions(+), 806 deletions(-) create mode 100644 .github/workflows/template_version_comment.yml create mode 100644 conf/igenomes_ignored.config delete mode 100755 docs/images/mqc_fastqc_adapter.png delete mode 100755 docs/images/mqc_fastqc_counts.png delete mode 100755 docs/images/mqc_fastqc_quality.png create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/main.nf create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/meta.yml create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config rename subworkflows/nf-core/{utils_nfvalidation_plugin => utils_nfschema_plugin}/tests/nextflow_schema.json (95%) delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/main.nf delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml diff --git a/.editorconfig b/.editorconfig index 72dda289a..e10588156 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,6 +11,7 @@ indent_style = space [*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 + # These files are edited and tested upstream in nf-core/modules [/modules/nf-core/**] charset = unset @@ -25,9 +26,12 @@ insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset + + [/assets/email*] indent_size = unset + # ignore python and markdown [*.{py,md}] indent_style = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 8e5d1fefe..e57bc9213 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/rnafusion, the standard workflow is 1. Check that there isn't already an issue about your idea in the [nf-core/rnafusion issues](https://github.com/nf-core/rnafusion/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/rnafusion repository](https://github.com/nf-core/rnafusion) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core pipelines schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -40,7 +40,7 @@ There are typically two types of tests that run: ### Lint tests `nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core pipelines lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. @@ -75,7 +75,7 @@ If you wish to contribute a new step, please use the following coding standards: 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new parameters to `nextflow.config` with a default (see below). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). +5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines schema build` tool). 6. Add sanity checks and validation for all relevant parameters. 7. Perform local tests to validate that the new code works as expected. 8. If applicable, add a new test command in `.github/workflow/ci.yml`. @@ -86,7 +86,7 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. +Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements @@ -103,7 +103,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### Nextflow version bumping -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core pipelines bump-version --nextflow . [min-nf-version]` ### Images and figures diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ed1d027be..7b8124978 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,7 +17,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rnaf - [ ] If you've fixed a bug or added code that should be tested, add tests! - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/rnafusion/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/rnafusion _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). +- [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 3c5e4c8ac..c67770f7a 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,18 +1,33 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - release: - types: [published] + pull_request: + branches: + - master workflow_dispatch: + pull_request_review: + types: [submitted] + jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/rnafusion' + if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' runs-on: ubuntu-latest steps: + - uses: octokit/request-action@v2.x + id: check_approvals + with: + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: test_variables + run: | + JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' + CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') + test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a776bde84..30fd4427a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,6 +7,7 @@ on: pull_request: release: types: [published] + workflow_dispatch: env: NXF_ANSI_LOG: false @@ -24,7 +25,7 @@ jobs: strategy: matrix: NXF_VER: - - "23.04.0" + - "24.04.2" - "latest-everything" steps: - name: Check out pipeline code @@ -38,9 +39,21 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: Run pipeline with test data + - name: Run pipeline with test data (docker) # TODO nf-core: You can customise CI pipeline run tests as required # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + + - name: Run pipeline with test data (singularity) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,singularity --outdir ./results + if: "${{ github.base_ref == 'master' }}" + + - name: Run pipeline with test data (conda) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,conda --outdir ./results + if: "${{ github.base_ref == 'master' }}" diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2d20d6442..713dc3e73 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -1,4 +1,4 @@ -name: Test successful pipeline download with 'nf-core download' +name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually @@ -8,7 +8,7 @@ on: workflow_dispatch: inputs: testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core download." + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." required: true default: "dev" pull_request: @@ -39,9 +39,11 @@ jobs: with: python-version: "3.12" architecture: "x64" - - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 with: - singularity-version: 3.8.3 + apptainer-version: 1.3.4 - name: Install dependencies run: | @@ -54,33 +56,64 @@ jobs: echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + - name: Make a cache directory for the container images + run: | + mkdir -p ./singularity_container_images + - name: Download the pipeline env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core download ${{ env.REPO_LOWERCASE }} \ + nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ --revision ${{ env.REPO_BRANCH }} \ --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ --container-cache-utilisation 'amend' \ - --download-configuration + --download-configuration 'yes' - name: Inspect download run: tree ./${{ env.REPOTITLE_LOWERCASE }} + - name: Count the downloaded number of container images + id: count_initial + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Initial container image count: $image_count" + echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV} + - name: Run the downloaded pipeline (stub) id: stub_run_pipeline continue-on-error: true env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline if: ${{ job.steps.stub_run_pipeline.status == failure() }} env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + + - name: Count the downloaded number of container images + id: count_afterwards + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Post-pipeline run container image count: $image_count" + echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV} + + - name: Compare container image counts + run: | + if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ env.IMAGE_COUNT_INITIAL }} + final_count=${{ env.IMAGE_COUNT_AFTER }} + difference=$((final_count - initial_count)) + echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" + tree ./singularity_container_images + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 1fcafe880..b882838af 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,6 +1,6 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: push: @@ -41,17 +41,32 @@ jobs: python-version: "3.12" architecture: "x64" + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yaml + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - - name: Run nf-core lint + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 40acc23f5..42e519bfa 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3 + uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 03ecfcf72..c6ba35df4 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,7 +12,7 @@ jobs: - name: get topics and convert to hashtags id: get_topics run: | - echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT - uses: rzr/fediverse-action@master with: diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml new file mode 100644 index 000000000..9dea41f0d --- /dev/null +++ b/.github/workflows/template_version_comment.yml @@ -0,0 +1,43 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: pull_request_target + +jobs: + template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + + - name: Read template version from .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Check nf-core outdated + id: nf_core_outdated + run: pip list --outdated | grep nf-core + + - name: Post nf-core template version comment + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + if: | + ${{ steps.nf_core_outdated.outputs.stdout }} =~ 'nf-core' + with: + repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} + allow-repeats: false + message: | + ## :warning: Newer version of the nf-core template is available. + + Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + Please update your pipeline to the latest version. + + For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + # diff --git a/.gitpod.yml b/.gitpod.yml index 105a1821a..461186376 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -4,17 +4,14 @@ tasks: command: | pre-commit install --install-hooks nextflow self-update - - name: unset JAVA_TOOL_OPTIONS - command: | - unset JAVA_TOOL_OPTIONS vscode: extensions: # based on nf-core.nf-core-extensionpack - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code + #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - # - nextflow.nextflow # Nextflow syntax highlighting + - nextflow.nextflow # Nextflow syntax highlighting - oderwat.indent-rainbow # Highlight indentation level - streetsidesoftware.code-spell-checker # Spelling checker for source code - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index e0b85a77f..01b1f08ca 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,2 +1,19 @@ +bump_version: null +lint: + files_unchanged: + - .github/CONTRIBUTING.md + - .github/PULL_REQUEST_TEMPLATE.md +nf_core_version: 3.0.0 +org_path: null repository_type: pipeline -nf_core_version: "2.14.1" +template: + author: Martin Proks, Annick Renevey + description: Nextflow rnafusion analysis pipeline, part of the nf-core community. + force: false + is_nfcore: true + name: rnafusion + org: nf-core + outdir: . + skip_features: null + version: 4.0.0dev +update: null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4dc0f1dcd..9e9f0e1c4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - prettier@3.2.5 - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "2.7.3" + rev: "3.0.3" hooks: - id: editorconfig-checker alias: ec diff --git a/.prettierignore b/.prettierignore index 437d763d0..610e50692 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ + email_template.html adaptivecard.json slackreport.json diff --git a/CITATIONS.md b/CITATIONS.md index 98bdbc607..0fc81801b 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,11 +12,11 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) - > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. +> Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. ## Software packaging/containerisation tools diff --git a/README.md b/README.md index 5075b862d..932243be4 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -67,8 +67,7 @@ nextflow run nf-core/rnafusion \ ``` > [!WARNING] -> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; -> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). +> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters). diff --git a/assets/schema_input.json b/assets/schema_input.json index fa630b6c0..4f1f739a0 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/rnafusion/master/assets/schema_input.json", "title": "nf-core/rnafusion pipeline - params.input schema", "description": "Schema for the file provided with params.input", diff --git a/conf/base.config b/conf/base.config index 0af2fc0da..f5ec67936 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,9 +11,9 @@ process { // TODO nf-core: Check the defaults for all processes - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 @@ -27,30 +27,30 @@ process { // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { 20.h * task.attempt } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + memory = { 200.GB * task.attempt } } withLabel:error_ignore { errorStrategy = 'ignore' diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 000000000..b4034d824 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index d203d2b6e..d266a387f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -21,7 +21,6 @@ process { withName: FASTQC { ext.args = '--quiet' } - withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/conf/test.config b/conf/test.config index d54c7159b..955708618 100644 --- a/conf/test.config +++ b/conf/test.config @@ -10,15 +10,18 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 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 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56ab2ba88cab87841916eb680a816deae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55769 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�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s diff --git a/docs/output.md b/docs/output.md index 77b376b31..4a655ea18 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,6 +14,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [FastQC](#fastqc) - Raw read QC - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline + - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC @@ -29,16 +30,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -:::note -The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -::: - ### MultiQC
    diff --git a/docs/usage.md b/docs/usage.md index 612cb410f..01ddc7731 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -85,9 +85,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/rnafusion -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -199,14 +199,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/main.nf b/main.nf index 914752471..3941f007e 100644 --- a/main.nf +++ b/main.nf @@ -9,8 +9,6 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS @@ -20,7 +18,6 @@ nextflow.enable.dsl = 2 include { RNAFUSION } from './workflows/rnafusion' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_rnafusion_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_rnafusion_pipeline' - include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_rnafusion_pipeline' /* @@ -56,10 +53,8 @@ workflow NFCORE_RNAFUSION { RNAFUSION ( samplesheet ) - emit: multiqc_report = RNAFUSION.out.multiqc_report // channel: /path/to/multiqc_report.html - } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -70,27 +65,24 @@ workflow NFCORE_RNAFUSION { workflow { main: - // // SUBWORKFLOW: Run initialisation tasks // PIPELINE_INITIALISATION ( params.version, - params.help, params.validate_params, params.monochrome_logs, args, params.outdir, params.input ) - + // // WORKFLOW: Run main workflow // NFCORE_RNAFUSION ( PIPELINE_INITIALISATION.out.samplesheet ) - // // SUBWORKFLOW: Run completion tasks // diff --git a/modules.json b/modules.json index c253f7934..68b131a5d 100644 --- a/modules.json +++ b/modules.json @@ -7,12 +7,12 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", + "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", "installed_by": ["subworkflows"] }, - "utils_nfvalidation_plugin": { + "utils_nfschema_plugin": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38a9..691d4c763 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d79f1c862..d8989f481 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -26,7 +26,10 @@ process FASTQC { def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) + // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 + // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e06..4827da7af 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4d9..e9d79a074 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
    Mon 2 Oct 2023
    test.gz
    - // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
    Mon 2 Oct 2023
    test.gz
    + // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -54,16 +51,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,13 +78,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -109,13 +102,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -138,22 +129,20 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -173,21 +162,18 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } test("sarscov2 single-end [fastq] - stub") { - options "-stub" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 86f7c3115..d5db3092f 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb67e..f1cd99b07 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.24.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352f9..b9ccebdbb 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' def config = multiqc_config ? "--config $multiqc_config" : '' def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ $args \\ $config \\ + $prefix \\ $extra_config \\ $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35e..b16c18792 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,40 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. - pattern: "*.{yml,yaml}" - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. + pattern: "*.{yml,yaml}" + - - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + - - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index f1c4242ef..33316a7dd 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -8,6 +8,8 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { @@ -17,6 +19,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -41,6 +45,8 @@ nextflow_process { input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -66,6 +72,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index bfebd8029..b779e4692 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:48:55.657331" + "timestamp": "2024-07-10T12:41:34.562023" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:49.071937" + "timestamp": "2024-07-10T11:27:11.933869532" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:25.457567" + "timestamp": "2024-07-10T11:26:56.709849369" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 000000000..c537a6a3e --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/nextflow.config b/nextflow.config index 172afb674..12203c3dd 100644 --- a/nextflow.config +++ b/nextflow.config @@ -16,7 +16,6 @@ params { genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false - // MultiQC options multiqc_config = null multiqc_title = null @@ -33,48 +32,26 @@ params { monochrome_logs = false hook_url = null help = false + help_full = false + show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - // Config options config_profile_name = null config_profile_description = null + custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null - - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true - + validate_params = true + } // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/rnafusion custom profiles from different institutions. -try { - includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") -} profiles { debug { dumpHashes = true @@ -89,7 +66,7 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false - conda.channels = ['conda-forge', 'bioconda', 'defaults'] + conda.channels = ['conda-forge', 'bioconda'] apptainer.enabled = false } mamba { @@ -178,25 +155,23 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled -// Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' -singularity.registry = 'quay.io' +// Load nf-core custom profiles from different Institutions +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} +// Load nf-core/rnafusion custom profiles from different institutions. +// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs +// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/rnafusion.config" : "/dev/null" +// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' +charliecloud.registry = 'quay.io' // Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} +includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -208,8 +183,15 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// Set bash options +process.shell = """\ +bash + +set -e # Exit if a tool returns a non-zero status/exit code +set -u # Treat unset variables and parameters as an error +set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute +set -C # No clobber - prevent output redirection from overwriting files. +""" // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -238,43 +220,47 @@ manifest { homePage = 'https://github.com/nf-core/rnafusion' description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' - nextflowVersion = '!>=23.04.0' + nextflowVersion = '!>=24.04.2' version = '4.0.0dev' doi = '' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +// Nextflow plugins +plugins { + id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} + +validation { + defaultIgnoreParams = ["genomes"] + help { + enabled = true + command = "nextflow run $manifest.name -profile --input samplesheet.csv --outdir " + fullParameter = "help_full" + showHiddenParameter = "show_hidden" + beforeText = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m ${manifest.name} ${manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } +* Software dependencies + https://github.com/${manifest.name}/blob/master/CITATIONS.md +""" + } + summary { + beforeText = validation.help.beforeText + afterText = validation.help.afterText } } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' + diff --git a/nextflow_schema.json b/nextflow_schema.json index 91bbdef8c..021e105a2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/rnafusion/master/nextflow_schema.json", "title": "nf-core/rnafusion pipeline parameters", "description": "Nextflow rnafusion analysis pipeline, part of the nf-core community.", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -71,6 +71,14 @@ "fa_icon": "fas fa-ban", "hidden": true, "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + }, + "igenomes_base": { + "type": "string", + "format": "directory-path", + "description": "The base path to the igenomes reference files", + "fa_icon": "fas fa-ban", + "hidden": true, + "default": "s3://ngi-igenomes/igenomes/" } } }, @@ -122,41 +130,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -164,12 +137,6 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", @@ -245,27 +212,6 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." - }, "pipelines_testdata_base_path": { "type": "string", "fa_icon": "far fa-check-circle", @@ -278,19 +224,16 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/reference_genome_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/institutional_config_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 8d187230d..10054a02d 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -8,17 +8,14 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { fromSamplesheet } from 'plugin/nf-validation' -include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' -include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' -include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* ======================================================================================== @@ -30,7 +27,6 @@ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit - help // boolean: Display help text validate_params // boolean: Boolean whether to validate parameters against the schema at runtime monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args @@ -51,20 +47,16 @@ workflow PIPELINE_INITIALISATION { workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 ) + // // Validate parameters and generate parameter summary to stdout // - pre_help_text = nfCoreLogo(monochrome_logs) - post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) - def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " - UTILS_NFVALIDATION_PLUGIN ( - help, - workflow_command, - pre_help_text, - post_help_text, + UTILS_NFSCHEMA_PLUGIN ( + workflow, validate_params, - "nextflow_schema.json" + null ) + // // Check config provided to the pipeline @@ -80,8 +72,9 @@ workflow PIPELINE_INITIALISATION { // // Create channel from input file provided through params.input // + Channel - .fromSamplesheet("input") + .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { meta, fastq_1, fastq_2 -> if (!fastq_2) { @@ -91,8 +84,8 @@ workflow PIPELINE_INITIALISATION { } } .groupTuple() - .map { - validateInputSamplesheet(it) + .map { samplesheet -> + validateInputSamplesheet(samplesheet) } .map { meta, fastqs -> @@ -117,13 +110,13 @@ workflow PIPELINE_COMPLETION { email // string: email address email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML + outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications multiqc_report // string: Path to MultiQC report main: - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") // @@ -131,11 +124,18 @@ workflow PIPELINE_COMPLETION { // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_report.toList() + ) } completionSummary(monochrome_logs) - if (hook_url) { imNotification(summary_params, hook_url) } @@ -165,7 +165,7 @@ def validateInputSamplesheet(input) { def (metas, fastqs) = input[1..2] // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end - def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 + def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1 if (!endedness_ok) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } @@ -197,7 +197,6 @@ def genomeExistsError() { error(error_string) } } - // // Generate methods description for MultiQC // @@ -239,8 +238,10 @@ def methodsDescriptionText(mqc_methods_yaml) { // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list def temp_doi_ref = "" - String[] manifest_doi = meta.manifest_map.doi.tokenize(",") - for (String doi_ref: manifest_doi) temp_doi_ref += "(doi:
    ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) } else meta["doi_text"] = "" meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " @@ -261,3 +262,4 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } + diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index ac31f28f6..28e32b200 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -2,10 +2,6 @@ // Subworkflow with functionality that may be useful for any Nextflow pipeline // -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -58,7 +54,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Generate version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -79,10 +75,10 @@ def dumpParametersToJSON(outdir) { def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') def filename = "params_${timestamp}.json" def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) - FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() } @@ -90,7 +86,7 @@ def dumpParametersToJSON(outdir) { // When running with -profile conda, warn if channels have not been set-up appropriately // def checkCondaChannels() { - Yaml parser = new Yaml() + def parser = new org.yaml.snakeyaml.Yaml() def channels = [] try { def config = parser.load("conda config --show channels".execute().text) @@ -102,14 +98,16 @@ def checkCondaChannels() { // Check that all channels are present // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def required_channels_in_order = ['conda-forge', 'bioconda'] def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) + + required_channels_in_order.eachWithIndex { channel, index -> + if (index < required_channels_in_order.size() - 1) { + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + } } if (channels_missing | channel_priority_violation) { diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config index d0a926bf6..a09572e5b 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -3,7 +3,7 @@ manifest { author = """nf-core""" homePage = 'https://127.0.0.1' description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' + nextflowVersion = '!>=23.04.0' version = '9.9.9' doi = 'https://doi.org/10.5281/zenodo.5070524' } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 14558c392..cbd8495bb 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -2,9 +2,6 @@ // Subworkflow with utility functions specific to the nf-core pipeline template // -import org.yaml.snakeyaml.Yaml -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -34,7 +31,7 @@ workflow UTILS_NFCORE_PIPELINE { // Warn if a -profile or Nextflow config has not been provided to run the pipeline // def checkConfigProvided() { - valid_config = true + def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + @@ -66,11 +63,13 @@ def checkProfileProvided(nextflow_cli_args) { // def workflowCitation() { def temp_doi_ref = "" - String[] manifest_doi = workflow.manifest.doi.tokenize(",") + def manifest_doi = workflow.manifest.doi.tokenize(",") // Using a loop to handle multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list - for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + manifest_doi.each { doi_ref -> + temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + } return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + @@ -84,7 +83,7 @@ def workflowCitation() { // Generate workflow version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -102,8 +101,8 @@ def getWorkflowVersion() { // Get software versions for pipeline // def processVersionsFromYAML(yaml_file) { - Yaml yaml = new Yaml() - versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } return yaml.dumpAsMap(versions).trim() } @@ -124,7 +123,7 @@ def workflowVersionToYAML() { def softwareVersionsToYAML(ch_versions) { return ch_versions .unique() - .map { processVersionsFromYAML(it) } + .map { version -> processVersionsFromYAML(version) } .unique() .mix(Channel.of(workflowVersionToYAML())) } @@ -134,19 +133,19 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - for (group in summary_params.keySet()) { + summary_params.keySet().each { group -> def group_params = summary_params.get(group) // This gets the parameters of that particular group if (group_params) { summary_section += "

    $group

    \n" summary_section += "
    \n" - for (param in group_params.keySet()) { + group_params.keySet().sort().each { param -> summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" } summary_section += "
    \n" } } - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" @@ -161,7 +160,7 @@ def paramsSummaryMultiqc(summary_params) { // nf-core logo // def nfCoreLogo(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map String.format( """\n ${dashedLine(monochrome_logs)} @@ -180,7 +179,7 @@ def nfCoreLogo(monochrome_logs=true) { // Return dashed line // def dashedLine(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map return "-${colors.dim}----------------------------------------------------${colors.reset}-" } @@ -188,7 +187,7 @@ def dashedLine(monochrome_logs=true) { // ANSII colours used for terminal logging // def logColours(monochrome_logs=true) { - Map colorcodes = [:] + def colorcodes = [:] as Map // Reset / Meta colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" @@ -287,7 +286,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi } def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } @@ -344,10 +343,10 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } @@ -364,13 +363,13 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); output_tf.delete() } @@ -378,7 +377,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Print pipeline summary on completion // def completionSummary(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" @@ -395,7 +394,7 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf new file mode 100644 index 000000000..4994303ea --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,46 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // when this input is empty it will automatically use the configured schema or + // "${projectDir}/nextflow_schema.json" as default. This input should not be empty + // for meta pipelines + + main: + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + if(parameters_schema) { + log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) + } else { + log.info paramsSummaryLog(input_workflow) + } + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + if(parameters_schema) { + validateParameters(parameters_schema:parameters_schema) + } else { + validateParameters() + } + } + + emit: + dummy_emit = true +} + diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 000000000..f7d9f0288 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test new file mode 100644 index 000000000..842dc432a --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -0,0 +1,117 @@ +nextflow_workflow { + + name "Test Subworkflow UTILS_NFSCHEMA_PLUGIN" + script "../main.nf" + workflow "UTILS_NFSCHEMA_PLUGIN" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" + + config "./nextflow.config" + + test("Should run nothing") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should run nothing - custom schema") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params - custom schema") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config new file mode 100644 index 000000000..0907ac58f --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -0,0 +1,8 @@ +plugins { + id "nf-schema@2.1.0" +} + +validation { + parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + monochromeLogs = true +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json similarity index 95% rename from subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json rename to subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json index 7626c1c93..331e0d2f4 100644 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", "title": ". pipeline parameters", "description": "", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -87,10 +87,10 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf deleted file mode 100644 index 2585b65d1..000000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -// -// Subworkflow that uses the nf-validation plugin to render help text and parameter summary -// - -/* -======================================================================================== - IMPORT NF-VALIDATION PLUGIN -======================================================================================== -*/ - -include { paramsHelp } from 'plugin/nf-validation' -include { paramsSummaryLog } from 'plugin/nf-validation' -include { validateParameters } from 'plugin/nf-validation' - -/* -======================================================================================== - SUBWORKFLOW DEFINITION -======================================================================================== -*/ - -workflow UTILS_NFVALIDATION_PLUGIN { - - take: - print_help // boolean: print help - workflow_command // string: default commmand used to run pipeline - pre_help_text // string: string to be printed before help text and summary log - post_help_text // string: string to be printed after help text and summary log - validate_params // boolean: validate parameters - schema_filename // path: JSON schema file, null to use default value - - main: - - log.debug "Using schema file: ${schema_filename}" - - // Default values for strings - pre_help_text = pre_help_text ?: '' - post_help_text = post_help_text ?: '' - workflow_command = workflow_command ?: '' - - // - // Print help message if needed - // - if (print_help) { - log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text - System.exit(0) - } - - // - // Print parameter summary to stdout - // - log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text - - // - // Validate parameters relative to the parameter JSON schema - // - if (validate_params){ - validateParameters(parameters_schema: schema_filename) - } - - emit: - dummy_emit = true -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml deleted file mode 100644 index 3d4a6b04f..000000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "UTILS_NFVALIDATION_PLUGIN" -description: Use nf-validation to initiate and validate a pipeline -keywords: - - utility - - pipeline - - initialise - - validation -components: [] -input: - - print_help: - type: boolean - description: | - Print help message and exit - - workflow_command: - type: string - description: | - The command to run the workflow e.g. "nextflow run main.nf" - - pre_help_text: - type: string - description: | - Text to print before the help message - - post_help_text: - type: string - description: | - Text to print after the help message - - validate_params: - type: boolean - description: | - Validate the parameters and error if invalid. - - schema_filename: - type: string - description: | - The filename of the schema to validate against. -output: - - dummy_emit: - type: boolean - description: | - Dummy emit to make nf-core subworkflows lint happy -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" - - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test deleted file mode 100644 index 5784a33f2..000000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test +++ /dev/null @@ -1,200 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFVALIDATION_PLUGIN" - script "../main.nf" - workflow "UTILS_NFVALIDATION_PLUGIN" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "plugin/nf-validation" - tag "'plugin/nf-validation'" - tag "utils_nfvalidation_plugin" - tag "subworkflows/utils_nfvalidation_plugin" - - test("Should run nothing") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should run help") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with command") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with extra text") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = "pre-help-text" - post_help_text = "post-help-text" - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('pre-help-text') } }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } }, - { assert workflow.stdout.any { it.contains('post-help-text') } } - ) - } - } - - test("Should validate params") { - - when { - - params { - monochrome_logs = true - test_data = '' - outdir = 1 - } - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = true - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.failed }, - { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml deleted file mode 100644 index 60b1cfff4..000000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfvalidation_plugin: - - subworkflows/nf-core/utils_nfvalidation_plugin/** diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 2b01b6da0..8192c8229 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -3,10 +3,9 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { paramsSummaryMap } from 'plugin/nf-validation' +include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' @@ -21,12 +20,10 @@ workflow RNAFUSION { take: ch_samplesheet // channel: samplesheet read in from --input - main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // // MODULE: Run FastQC // @@ -42,11 +39,12 @@ workflow RNAFUSION { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_pipeline_software_mqc_versions.yml', + name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } + // // MODULE: MultiQC // @@ -59,18 +57,19 @@ workflow RNAFUSION { Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() + summary_params = paramsSummaryMap( workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - + ch_multiqc_files = ch_multiqc_files.mix( + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) ch_methods_description = Channel.value( methodsDescriptionText(ch_multiqc_custom_methods_description)) - ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( @@ -83,12 +82,14 @@ workflow RNAFUSION { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) - emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] + } /* From 3dcb0585c01fa7142a46a353ddcc9ffb90223d01 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 9 Oct 2024 11:07:31 +0000 Subject: [PATCH 052/887] Template update for nf-core/tools version 3.0.1 --- .editorconfig | 4 - .github/CONTRIBUTING.md | 2 +- .github/workflows/awsfulltest.yml | 6 +- .github/workflows/linting.yml | 4 +- .nf-core.yml | 2 +- .prettierignore | 1 - docs/output.md | 1 - modules.json | 6 +- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 26 +- nextflow.config | 8 +- .../utils_nfcore_rnafusion_pipeline/main.nf | 12 +- .../nf-core/utils_nextflow_pipeline/main.nf | 46 ++- .../nf-core/utils_nfcore_pipeline/main.nf | 279 ++++++++++-------- 15 files changed, 209 insertions(+), 194 deletions(-) diff --git a/.editorconfig b/.editorconfig index e10588156..72dda289a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,6 @@ indent_style = space [*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 - # These files are edited and tested upstream in nf-core/modules [/modules/nf-core/**] charset = unset @@ -26,12 +25,9 @@ insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset - - [/assets/email*] indent_size = unset - # ignore python and markdown [*.{py,md}] indent_style = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e57bc9213..7d143af54 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -90,7 +90,7 @@ Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json ### Default processes resource requirements -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index c67770f7a..68975fb0d 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,16 +14,18 @@ on: jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' + # run only if the PR is approved by at least 2 reviewers and against the master branch or manually triggered + if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - uses: octokit/request-action@v2.x id: check_approvals with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - id: test_variables + if: github.event_name != 'workflow_dispatch' run: | JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index b882838af..a502573c5 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -42,10 +42,10 @@ jobs: architecture: "x64" - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.0.0 + uses: pietrobolcato/action-read-yaml@1.1.0 id: read_yml with: - config: ${{ github.workspace }}/.nf-core.yaml + config: ${{ github.workspace }}/.nf-core.yml - name: Install dependencies run: | diff --git a/.nf-core.yml b/.nf-core.yml index 01b1f08ca..d7c8a21e4 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -3,7 +3,7 @@ lint: files_unchanged: - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md -nf_core_version: 3.0.0 +nf_core_version: 3.0.1 org_path: null repository_type: pipeline template: diff --git a/.prettierignore b/.prettierignore index 610e50692..437d763d0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,3 @@ - email_template.html adaptivecard.json slackreport.json diff --git a/docs/output.md b/docs/output.md index 4a655ea18..501e19501 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,7 +14,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [FastQC](#fastqc) - Raw read QC - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC diff --git a/modules.json b/modules.json index 68b131a5d..243717102 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", "installed_by": ["modules"] } } @@ -21,12 +21,12 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", + "git_sha": "9d05360da397692321d377b6102d2fb22507c6ef", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", + "git_sha": "772684d9d66f37b650c8ba5146ac1ee3ecba2acb", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index f1cd99b07..6f5b867b7 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.24.1 + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index b9ccebdbb..9724d2f34 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index b779e4692..2fcbb5ff7 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T12:41:34.562023" + "timestamp": "2024-10-02T17:51:46.317523" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:27:11.933869532" + "timestamp": "2024-10-02T17:52:20.680978" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:26:56.709849369" + "timestamp": "2024-10-02T17:52:09.185842" } -} +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 12203c3dd..d6f438520 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,10 +12,12 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = null + // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false + // MultiQC options multiqc_config = null multiqc_title = null @@ -36,6 +38,7 @@ params { show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + // Config options config_profile_name = null config_profile_description = null @@ -44,9 +47,9 @@ params { custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null + // Schema validation default options validate_params = true - } // Load base.config by default for all pipelines @@ -161,6 +164,7 @@ includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${pa // Load nf-core/rnafusion custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs // includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/rnafusion.config" : "/dev/null" + // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers @@ -172,6 +176,7 @@ charliecloud.registry = 'quay.io' // Load igenomes.config if required includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' + // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -263,4 +268,3 @@ validation { // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' - diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 10054a02d..71a09c15b 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -18,9 +18,9 @@ include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW TO INITIALISE PIPELINE -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_INITIALISATION { @@ -99,9 +99,9 @@ workflow PIPELINE_INITIALISATION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW FOR PIPELINE COMPLETION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_COMPLETION { @@ -147,9 +147,9 @@ workflow PIPELINE_COMPLETION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Check and validate pipeline parameters diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 28e32b200..2b0dc67a6 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { - take: print_version // boolean: print version dump_parameters // boolean: dump parameters @@ -22,7 +21,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Print workflow version and exit on --version // if (print_version) { - log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") System.exit(0) } @@ -45,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -72,11 +71,11 @@ def getWorkflowVersion() { // Dump pipeline parameters to a JSON file // def dumpParametersToJSON(outdir) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = groovy.json.JsonOutput.toJson(params) - temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() @@ -91,9 +90,14 @@ def checkCondaChannels() { try { def config = parser.load("conda config --show channels".execute().text) channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return + } + catch (NullPointerException e) { + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.warn("Could not verify conda channel configuration.") + return null } // Check that all channels are present @@ -106,19 +110,13 @@ def checkCondaChannels() { required_channels_in_order.eachWithIndex { channel, index -> if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index + 1])) } } if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + log.warn( + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " There is a problem with your Conda configuration!\n\n" + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + " Please refer to https://bioconda.github.io/\n" + " The observed channel order is \n" + " ${channels}\n" + " but the following channel order is required:\n" + " ${required_channels_in_order}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index cbd8495bb..b78273ca4 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { - take: nextflow_cli_args @@ -22,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -33,12 +32,9 @@ workflow UTILS_NFCORE_PIPELINE { def checkConfigProvided() { def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) valid_config = false } return valid_config @@ -49,12 +45,14 @@ def checkConfigProvided() { // def checkProfileProvided(nextflow_cli_args) { if (workflow.profile.endsWith(',')) { - error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } if (nextflow_cli_args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } } @@ -70,13 +68,7 @@ def workflowCitation() { manifest_doi.each { doi_ref -> temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - temp_doi_ref + "\n" + - "* The nf-core framework\n" + - " https://doi.org/10.1038/s41587-020-0439-x\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" } // @@ -102,7 +94,7 @@ def getWorkflowVersion() { // def processVersionsFromYAML(yaml_file) { def yaml = new org.yaml.snakeyaml.Yaml() - def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } return yaml.dumpAsMap(versions).trim() } @@ -112,8 +104,8 @@ def processVersionsFromYAML(yaml_file) { def workflowVersionToYAML() { return """ Workflow: - $workflow.manifest.name: ${getWorkflowVersion()} - Nextflow: $workflow.nextflow.version + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} """.stripIndent().trim() } @@ -121,11 +113,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions - .unique() - .map { version -> processVersionsFromYAML(version) } - .unique() - .mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML())) } // @@ -133,25 +121,31 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - summary_params.keySet().each { group -> - def group_params = summary_params.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

    $group

    \n" - summary_section += "
    \n" - group_params.keySet().sort().each { param -> - summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" + summary_params + .keySet() + .each { group -> + def group_params = summary_params.get(group) + // This gets the parameters of that particular group + if (group_params) { + summary_section += "

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" } - summary_section += "
    \n" } - } - def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" return yaml_file_text } @@ -199,54 +193,54 @@ def logColours(monochrome_logs=true) { colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" return colorcodes } @@ -261,14 +255,15 @@ def attachMultiqcReport(multiqc_report) { mqc_report = multiqc_report.getVal() if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") } mqc_report = mqc_report[0] } } - } catch (all) { + } + catch (Exception all) { if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" + log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") } } return mqc_report @@ -280,26 +275,35 @@ def attachMultiqcReport(multiqc_report) { def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" } def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete misc_fields['Pipeline script file path'] = workflow.scriptFile misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] @@ -337,7 +341,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Render the sendmail template def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() @@ -346,30 +350,32 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { +new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { + ['sendmail', '-t'].execute() << sendmail_html + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") + } + catch (Exception all) { // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") } } // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") output_tf.delete() } @@ -380,12 +386,14 @@ def completionSummary(monochrome_logs=true) { def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } @@ -394,21 +402,30 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp + misc_fields['start'] = workflow.start + misc_fields['complete'] = workflow.complete + misc_fields['scriptfile'] = workflow.scriptFile + misc_fields['scriptid'] = workflow.scriptId + if (workflow.repository) { + misc_fields['repository'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['commitid'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['revision'] = workflow.revision + } + misc_fields['nxf_version'] = workflow.nextflow.version + misc_fields['nxf_build'] = workflow.nextflow.build + misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] msg_fields['version'] = getWorkflowVersion() @@ -433,13 +450,13 @@ def imNotification(summary_params, hook_url) { def json_message = json_template.toString() // POST - def post = new URL(hook_url).openConnection(); + def post = new URL(hook_url).openConnection() post.setRequestMethod("POST") post.setDoOutput(true) post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); + post.getOutputStream().write(json_message.getBytes("UTF-8")) + def postRC = post.getResponseCode() + if (!postRC.equals(200)) { + log.warn(post.getErrorStream().getText()) } } From 5073208e98aeee573c296ff5dfdaf840eababe71 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:32:46 +0200 Subject: [PATCH 053/887] remove fusiongdb --- CHANGELOG.md | 2 ++ docs/usage.md | 2 +- modules/local/fusionreport/download/main.nf | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe350b46c..aa3eb2b3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +- Remove fusionGDB from documentation and fusion-report download stubs + ## v3.0.2 - [2024-04-10] ### Added diff --git a/docs/usage.md b/docs/usage.md index 80ff457c5..180664a48 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -98,7 +98,7 @@ process { } ``` -The four `fusion-report` files: `cosmic.db`, `fusiongdb.db`, `fusiongdb2.db`, `mitelman.db` +The four `fusion-report` files: `cosmic.db`, `fusiongdb2.db`, `mitelman.db` should then be copied into the HPC `/references/fusion_report_db`. #### Note about fusioncatcher references diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index ac288ade9..971db1b7f 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -28,7 +28,6 @@ process FUSIONREPORT_DOWNLOAD { """ touch cosmic.db touch fusiongdb2.db - touch fusiongdb.db touch mitelman.db cat <<-END_VERSIONS > versions.yml "${task.process}": From 3de8b312040e68a4b4e9e1c59e84f86115db0623 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:33:53 +0200 Subject: [PATCH 054/887] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa3eb2b3e..1e5a81e76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -- Remove fusionGDB from documentation and fusion-report download stubs +- Remove fusionGDB from documentation and fusion-report download stubs [#503](https://github.com/nf-core/rnafusion/pull/503) ## v3.0.2 - [2024-04-10] From 2c08d0cfefa83a7746ee146d44d1fea2cddb39ea Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 10 Oct 2024 14:09:25 +0200 Subject: [PATCH 055/887] remove fusiongdb --- docs/output.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index 128a2f365..62859668a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -18,7 +18,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [StringTie](#stringtie) - StringTie assembly - [FusionCatcher](#fusioncatcher) - Fusion catcher fusion detection - [Samtools](#samtools) - SAM/BAM file manipulation -- [Fusion-report](#fusion-report) - Summary of the findings of each tool and comparison to COSMIC, Mitelman, FusionGBD and FusionGDB2 databases +- [Fusion-report](#fusion-report) - Summary of the findings of each tool and comparison to COSMIC, Mitelman, and FusionGDB2 databases - [FusionInspector](#fusionInspector) - Supervised analysis of fusion predictions from fusion-report, recover and re-score evidence for such predictions - [Arriba visualisation](#arriba-visualisation) - Arriba visualisation report for FusionInspector fusions - [Picard](#picard) - Collect QC metrics @@ -50,7 +50,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `human_v` - dir with all references for fusioncatcher - `fusion_report_db` - `cosmic.db` - - `fusiongdb.db` - `fusiongdb2.db` - `mitelman.db` - `star` - dir with STAR index From fedf17f056f7e40a955b53df49a169e277eb5df5 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 11 Oct 2024 12:38:33 +0000 Subject: [PATCH 056/887] Template update for nf-core/tools version 3.0.2 --- .github/workflows/ci.yml | 60 +++++++++++++------ .../workflows/template_version_comment.yml | 21 ++++--- .gitignore | 1 + .nf-core.yml | 2 +- main.nf | 2 +- modules.json | 6 +- modules/nf-core/multiqc/main.nf | 2 +- nextflow.config | 4 +- .../utils_nfcore_rnafusion_pipeline/main.nf | 4 +- .../nf-core/utils_nextflow_pipeline/main.nf | 30 +++++----- .../nf-core/utils_nfcore_pipeline/main.nf | 10 ++-- workflows/rnafusion.nf | 2 - 12 files changed, 86 insertions(+), 58 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30fd4427a..04fba0396 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,8 @@ on: env: NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity concurrency: group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" @@ -18,7 +20,7 @@ concurrency: jobs: test: - name: Run pipeline with test data + name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" # Only run on push if this is the nf-core dev branch (merged PRs) if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/rnafusion') }}" runs-on: ubuntu-latest @@ -27,33 +29,57 @@ jobs: NXF_VER: - "24.04.2" - "latest-everything" + profile: + - "conda" + - "docker" + - "singularity" + test_name: + - "test" + isMaster: + - ${{ github.base_ref == 'master' }} + # Exclude conda and singularity on dev + exclude: + - isMaster: false + profile: "conda" + - isMaster: false + profile: "singularity" steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - name: Install Nextflow + - name: Set up Nextflow uses: nf-core/setup-nextflow@v2 with: version: "${{ matrix.NXF_VER }}" - - name: Disk space cleanup - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + - name: Set up Apptainer + if: matrix.profile == 'singularity' + uses: eWaterCycle/setup-apptainer@main - - name: Run pipeline with test data (docker) - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix + - name: Set up Singularity + if: matrix.profile == 'singularity' run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR + + - name: Set up Miniconda + if: matrix.profile == 'conda' + uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 + with: + miniconda-version: "latest" + auto-update-conda: true + conda-solver: libmamba + channels: conda-forge,bioconda - - name: Run pipeline with test data (singularity) - # TODO nf-core: You can customise CI pipeline run tests as required + - name: Set up Conda + if: matrix.profile == 'conda' run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,singularity --outdir ./results - if: "${{ github.base_ref == 'master' }}" + echo $(realpath $CONDA)/condabin >> $GITHUB_PATH + echo $(realpath python) >> $GITHUB_PATH + + - name: Clean up Disk space + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: Run pipeline with test data (conda) - # TODO nf-core: You can customise CI pipeline run tests as required + - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,conda --outdir ./results - if: "${{ github.base_ref == 'master' }}" + nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml index 9dea41f0d..e8aafe44d 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template_version_comment.yml @@ -10,9 +10,11 @@ jobs: steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + ref: ${{ github.event.pull_request.head.sha }} - name: Read template version from .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.0.0 + uses: nichmor/minimal-read-yaml@v0.0.2 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml @@ -24,20 +26,21 @@ jobs: - name: Check nf-core outdated id: nf_core_outdated - run: pip list --outdated | grep nf-core + run: echo "OUTPUT=$(pip list --outdated | grep nf-core)" >> ${GITHUB_ENV} - name: Post nf-core template version comment uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 if: | - ${{ steps.nf_core_outdated.outputs.stdout }} =~ 'nf-core' + contains(env.OUTPUT, 'nf-core') with: repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} allow-repeats: false message: | - ## :warning: Newer version of the nf-core template is available. - - Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. - Please update your pipeline to the latest version. - - For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + > [!WARNING] + > Newer version of the nf-core template is available. + > + > Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + > Please update your pipeline to the latest version. + > + > For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). # diff --git a/.gitignore b/.gitignore index 5124c9ac7..a42ce0162 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ results/ testing/ testing* *.pyc +null/ diff --git a/.nf-core.yml b/.nf-core.yml index d7c8a21e4..097a52b0e 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -3,7 +3,7 @@ lint: files_unchanged: - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md -nf_core_version: 3.0.1 +nf_core_version: 3.0.2 org_path: null repository_type: pipeline template: diff --git a/main.nf b/main.nf index 3941f007e..6532daeed 100644 --- a/main.nf +++ b/main.nf @@ -76,7 +76,7 @@ workflow { params.outdir, params.input ) - + // // WORKFLOW: Run main workflow // diff --git a/modules.json b/modules.json index 243717102..01a6c107b 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] } } @@ -21,12 +21,12 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "9d05360da397692321d377b6102d2fb22507c6ef", + "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "772684d9d66f37b650c8ba5146ac1ee3ecba2acb", + "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 9724d2f34..cc0643e1d 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -52,7 +52,7 @@ process MULTIQC { stub: """ mkdir multiqc_data - touch multiqc_plots + mkdir multiqc_plots touch multiqc_report.html cat <<-END_VERSIONS > versions.yml diff --git a/nextflow.config b/nextflow.config index d6f438520..872c08044 100644 --- a/nextflow.config +++ b/nextflow.config @@ -254,10 +254,10 @@ validation { """ afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} * The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x + https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/${manifest.name}/blob/master/CITATIONS.md + https://github.com/${manifest.name}/blob/master/CITATIONS.md """ } summary { diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 71a09c15b..834a4e5c6 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -47,7 +47,6 @@ workflow PIPELINE_INITIALISATION { workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 ) - // // Validate parameters and generate parameter summary to stdout // @@ -56,7 +55,6 @@ workflow PIPELINE_INITIALISATION { validate_params, null ) - // // Check config provided to the pipeline @@ -64,6 +62,7 @@ workflow PIPELINE_INITIALISATION { UTILS_NFCORE_PIPELINE ( nextflow_cli_args ) + // // Custom validation for pipeline parameters // @@ -110,7 +109,6 @@ workflow PIPELINE_COMPLETION { email // string: email address email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML - outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 2b0dc67a6..0fcbf7b3f 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,9 +3,9 @@ // /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { @@ -44,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -106,17 +106,19 @@ def checkCondaChannels() { def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order - def channel_priority_violation = false - - required_channels_in_order.eachWithIndex { channel, index -> - if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index + 1])) - } - } + def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order } if (channels_missing | channel_priority_violation) { - log.warn( - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " There is a problem with your Conda configuration!\n\n" + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + " Please refer to https://bioconda.github.io/\n" + " The observed channel order is \n" + " ${channels}\n" + " but the following channel order is required:\n" + " ${required_channels_in_order}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - ) + log.warn """\ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + There is a problem with your Conda configuration! + You will need to set-up the conda-forge and bioconda channels correctly. + Please refer to https://bioconda.github.io/ + The observed channel order is + ${channels} + but the following channel order is required: + ${required_channels_in_order} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + """.stripIndent(true) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index b78273ca4..5cb7bafef 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,9 +3,9 @@ // /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { @@ -21,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -62,7 +62,7 @@ def checkProfileProvided(nextflow_cli_args) { def workflowCitation() { def temp_doi_ref = "" def manifest_doi = workflow.manifest.doi.tokenize(",") - // Using a loop to handle multiple DOIs + // Handling multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list manifest_doi.each { doi_ref -> diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 8192c8229..53c51b00d 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -57,13 +57,11 @@ workflow RNAFUSION { Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() - summary_params = paramsSummaryMap( workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_files = ch_multiqc_files.mix( ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) From 7a889713da5ee69696daf159cb45d94e577cc483 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 09:27:26 +0200 Subject: [PATCH 057/887] ensembl to gencode, removing chrgtf --- conf/modules.config | 11 +- modules.json | 10 ++ modules/local/ensembl/main.nf | 55 ------- modules/local/fusioncatcher/build/main.nf | 12 +- modules/local/gencode_download/main.nf | 49 +++++++ modules/local/hgnc/main.nf | 2 +- modules/local/starfusion/download/main.nf | 1 - .../nf-core/arriba/download/environment.yml | 5 + modules/nf-core/arriba/download/main.nf | 46 ++++++ modules/nf-core/arriba/download/meta.yml | 30 ++++ .../arriba/download/tests/main.nf.test | 35 +++++ .../arriba/download/tests/main.nf.test.snap | 35 +++++ modules/nf-core/gunzip/environment.yml | 7 + modules/nf-core/gunzip/main.nf | 55 +++++++ modules/nf-core/gunzip/meta.yml | 47 ++++++ modules/nf-core/gunzip/tests/main.nf.test | 121 ++++++++++++++++ .../nf-core/gunzip/tests/main.nf.test.snap | 134 ++++++++++++++++++ modules/nf-core/gunzip/tests/nextflow.config | 5 + modules/nf-core/gunzip/tests/tags.yml | 2 + nextflow.config | 19 ++- nextflow_schema.json | 19 +-- subworkflows/local/build_references.nf | 96 ++++++------- subworkflows/local/qc_workflow.nf | 2 +- subworkflows/local/starfusion_workflow.nf | 4 +- subworkflows/local/stringtie_workflow.nf | 6 +- workflows/rnafusion.nf | 10 +- 26 files changed, 663 insertions(+), 155 deletions(-) delete mode 100644 modules/local/ensembl/main.nf create mode 100644 modules/local/gencode_download/main.nf create mode 100644 modules/nf-core/arriba/download/environment.yml create mode 100644 modules/nf-core/arriba/download/main.nf create mode 100644 modules/nf-core/arriba/download/meta.yml create mode 100644 modules/nf-core/arriba/download/tests/main.nf.test create mode 100644 modules/nf-core/arriba/download/tests/main.nf.test.snap create mode 100644 modules/nf-core/gunzip/environment.yml create mode 100644 modules/nf-core/gunzip/main.nf create mode 100644 modules/nf-core/gunzip/meta.yml create mode 100644 modules/nf-core/gunzip/tests/main.nf.test create mode 100644 modules/nf-core/gunzip/tests/main.nf.test.snap create mode 100644 modules/nf-core/gunzip/tests/nextflow.config create mode 100644 modules/nf-core/gunzip/tests/tags.yml diff --git a/conf/modules.config b/conf/modules.config index bbafa80d6..af8324983 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -49,10 +49,9 @@ process { ext.when = { !params.build_references } } - withName: '.*BUILD_REFERENCES:ENSEMBL_DOWNLOAD' { - ext.when = { !params.fasta || ! params.gtf } + withName: 'GENCODE_DOWNLOAD' { publishDir = [ - path: { "${params.genomes_base}/ensembl" }, + path: { "${params.genomes_base}/gencode" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -122,7 +121,7 @@ process { withName: 'GATK4_BEDTOINTERVALLIST' { publishDir = [ - path: { "${params.genomes_base}/ensembl" }, + path: { "${params.genomes_base}/gencode" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -139,7 +138,7 @@ process { withName: 'GTF_TO_REFFLAT' { publishDir = [ - path: { "${params.genomes_base}/ensembl" }, + path: { "${params.genomes_base}/gencode" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -209,7 +208,7 @@ process { withName: 'SAMTOOLS_FAIDX' { publishDir = [ - path: { "${params.genomes_base}/ensembl" }, + path: { "${params.genomes_base}/gencode" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] diff --git a/modules.json b/modules.json index 7f4cf0efc..886af9756 100644 --- a/modules.json +++ b/modules.json @@ -15,6 +15,11 @@ "git_sha": "bbaeb3a3149def237b9d0acb9ab749ae98088e29", "installed_by": ["modules"] }, + "arriba/download": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "cat/cat": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", @@ -55,6 +60,11 @@ "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", "installed_by": ["modules"] }, + "gunzip": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", diff --git a/modules/local/ensembl/main.nf b/modules/local/ensembl/main.nf deleted file mode 100644 index 695ab3123..000000000 --- a/modules/local/ensembl/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -process ENSEMBL_DOWNLOAD { - tag "ensembl" - label 'process_low' - - conda "bioconda::gnu-wget=1.18" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : - 'quay.io/biocontainers/gnu-wget:1.18--h5bf99c6_5' }" - - input: - val ensembl_version - val genome - val meta - - output: - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.gtf") , emit: gtf - tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa") , emit: fasta - path "versions.yml" , emit: versions - - - script: - """ - if [ ${genome} == 'GRCh37' ]; then - wget ftp://ftp.ensembl.org/pub/grch37/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${genome}.87.gtf.gz -O Homo_sapiens.${genome}.${ensembl_version}.gtf.gz - wget ftp://ftp.ensembl.org/pub/grch37/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${genome}.dna.primary_assembly.fa.gz -O Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz - - - else: - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/gtf/homo_sapiens/Homo_sapiens.${genome}.${ensembl_version}.gtf.gz - wget ftp://ftp.ensembl.org/pub/release-${ensembl_version}/fasta/homo_sapiens/dna/Homo_sapiens.${genome}.dna.primary_assembly.fa.gz -O Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz - - gunzip Homo_sapiens.${genome}.${ensembl_version}.gtf.gz - gunzip Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - - END_VERSIONS - """ - - stub: - """ - touch "Homo_sapiens.${genome}.${ensembl_version}.gtf" - touch "Homo_sapiens.${genome}.${ensembl_version}.dna.primary_assembly.fa" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS - """ - -} diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 15f7afedc..51153253a 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -6,11 +6,11 @@ process FUSIONCATCHER_BUILD { container "docker.io/clinicalgenomics/fusioncatcher:1.33" input: - val ensembl_version + val genome_gencode_version output: - path "human_v${ensembl_version}" , emit: reference - path "versions.yml" , emit: versions + path "human_v${genome_gencode_version}" , emit: reference + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -21,7 +21,7 @@ process FUSIONCATCHER_BUILD { """ fusioncatcher-build.py \\ -g homo_sapiens \\ - -o human_v${ensembl_version} \\ + -o human_v${genome_gencode_version} \\ $args cat <<-END_VERSIONS > versions.yml @@ -32,8 +32,8 @@ process FUSIONCATCHER_BUILD { stub: """ - mkdir human_v${ensembl_version} - touch human_v${ensembl_version}/ensembl_fully_overlapping_genes.txt + mkdir human_v${genome_gencode_version} + touch human_v${genome_gencode_version}/ensembl_fully_overlapping_genes.txt cat <<-END_VERSIONS > versions.yml "${task.process}": fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) diff --git a/modules/local/gencode_download/main.nf b/modules/local/gencode_download/main.nf new file mode 100644 index 000000000..e9416cf4d --- /dev/null +++ b/modules/local/gencode_download/main.nf @@ -0,0 +1,49 @@ +process GENCODE_DOWNLOAD { + tag "gencode_download" + label 'process_low' + + conda "bioconda::gnu-wget=1.18" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : + 'quay.io/biocontainers/gnu-wget:1.18--h5bf99c6_5' }" + + input: + val genome_gencode_version + val genome + + output: + path "*.fa" , emit: fasta + path "*.gtf" , emit: gtf + path "versions.yml", emit: versions + + + when: + task.ext.when == null || task.ext.when + + script: + def folder_gencode = genome.contains("38") ? "" : "/${genome}_mapping" + def gtf_file_name = genome.contains("38") ? "gencode.v${genome_gencode_version}.primary_assembly.annotation.gtf.gz" : "gencode.v${genome_gencode_version}lift${genome_gencode_version}.annotation.gtf.gz" + """ + wget ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_${genome_gencode_version}/${folder_gencode}${genome}.primary_assembly.genome.fa.gz -O Homo_sapiens_${genome}_${genome_gencode_version}_dna_primary_assembly.fa.gz + gunzip Homo_sapiens_${genome}_${genome_gencode_version}_dna_primary_assembly.fa.gz + wget ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_${genome_gencode_version}/${folder_gencode}${gtf_file_name} -O Homo_sapiens_${genome}_${genome_gencode_version}.gtf.gz + gunzip Homo_sapiens_${genome}_${genome_gencode_version}.gtf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + END_VERSIONS + """ + + stub: + """ + touch Homo_sapiens.${genome}.${genome_gencode_version}_dna_primary_assembly.fa + touch Homo_sapiens.${genome}.${genome_gencode_version}.gtf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + END_VERSIONS + """ + +} diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 1b3808f6d..6a0556314 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -18,7 +18,7 @@ process HGNC_DOWNLOAD { script: """ - wget https://ftp.ebi.ac.uk/pub/databases/genenames/hgnc/tsv/hgnc_complete_set.txt + wget https://ftp.ebi.ac.uk/pub/databases/genenames/out_of_date_hgnc/tsv/hgnc_complete_set.txt date +%Y-%m-%d/%H:%M > HGNC-DB-timestamp.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index fedadfa0b..17bfa72eb 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -6,7 +6,6 @@ process STARFUSION_DOWNLOAD { output: path "ctat_genome_lib_build_dir/*" , emit: reference - path "ctat_genome_lib_build_dir/ref_annot.gtf", emit: chrgtf // TODO: move to my sourceforge diff --git a/modules/nf-core/arriba/download/environment.yml b/modules/nf-core/arriba/download/environment.yml new file mode 100644 index 000000000..d0883a0d2 --- /dev/null +++ b/modules/nf-core/arriba/download/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::arriba=2.4.0 diff --git a/modules/nf-core/arriba/download/main.nf b/modules/nf-core/arriba/download/main.nf new file mode 100644 index 000000000..96a4e3362 --- /dev/null +++ b/modules/nf-core/arriba/download/main.nf @@ -0,0 +1,46 @@ +process ARRIBA_DOWNLOAD { + tag "arriba" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/arriba:2.4.0--h0033a41_2' : + 'biocontainers/arriba:2.4.0--h0033a41_2' }" + + input: + + output: + path "*" , emit: reference + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + wget https://github.com/suhrig/arriba/releases/download/v2.4.0/arriba_v2.4.0.tar.gz -O arriba_v2.4.0.tar.gz + tar -xzvf arriba_v2.4.0.tar.gz + rm arriba_v2.4.0.tar.gz + mv arriba_v2.4.0/database/* . + rm -r arriba_v2.4.0 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + arriba_download: \$(arriba -h | grep 'Version:' 2>&1 | sed 's/Version:\s//') + END_VERSIONS + """ + + stub: + """ + touch blacklist_hg38_GRCh38_v2.4.0.tsv.gz + touch protein_domains_hg38_GRCh38_v2.4.0.gff3 + touch cytobands_hg38_GRCh38_v2.4.0.tsv + touch known_fusions_hg38_GRCh38_v2.4.0.tsv.gz + touch protein_domains_hg38_GRCh38_v2.4.0.gff3 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + arriba_download: \$(arriba -h | grep 'Version:' 2>&1 | sed 's/Version:\s//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/arriba/download/meta.yml b/modules/nf-core/arriba/download/meta.yml new file mode 100644 index 000000000..531c66c2f --- /dev/null +++ b/modules/nf-core/arriba/download/meta.yml @@ -0,0 +1,30 @@ +name: arriba_download +description: Arriba is a command-line tool for the detection of gene fusions from + RNA-Seq data. +keywords: + - fusion + - arriba + - reference +tools: + - arriba: + description: Fast and accurate gene fusion detection from RNA-Seq data + homepage: https://github.com/suhrig/arriba + documentation: https://arriba.readthedocs.io/en/latest/ + tool_dev_url: https://github.com/suhrig/arriba + doi: "10.1101/gr.257246.119" + licence: ["MIT"] + identifier: biotools:Arriba + +output: + - reference: + - "*": + type: directory + description: Folder with arriba references + pattern: "*" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@peterpru" diff --git a/modules/nf-core/arriba/download/tests/main.nf.test b/modules/nf-core/arriba/download/tests/main.nf.test new file mode 100644 index 000000000..cccc95db2 --- /dev/null +++ b/modules/nf-core/arriba/download/tests/main.nf.test @@ -0,0 +1,35 @@ + +nextflow_process { + + name "Test Process ARRIBA_DOWNLOAD" + script "../main.nf" + process "ARRIBA_DOWNLOAD" + + tag "modules" + tag "modules_nfcore" + tag "arriba" + tag "arriba/download" + + test("test-arriba-download") { + + when { + process { + """ + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.reference[0].collect { file(it).name }.toSorted(), + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/arriba/download/tests/main.nf.test.snap b/modules/nf-core/arriba/download/tests/main.nf.test.snap new file mode 100644 index 000000000..eda3f7066 --- /dev/null +++ b/modules/nf-core/arriba/download/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "test-arriba-download": { + "content": [ + [ + "CREDITS", + "RefSeq_viral_genomes_v2.4.0.fa.gz", + "blacklist_hg19_hs37d5_GRCh37_v2.4.0.tsv.gz", + "blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "blacklist_mm10_GRCm38_v2.4.0.tsv.gz", + "blacklist_mm39_GRCm39_v2.4.0.tsv.gz", + "cytobands_hg19_hs37d5_GRCh37_v2.4.0.tsv", + "cytobands_hg38_GRCh38_v2.4.0.tsv", + "cytobands_mm10_GRCm38_v2.4.0.tsv", + "cytobands_mm39_GRCm39_v2.4.0.tsv", + "known_fusions_hg19_hs37d5_GRCh37_v2.4.0.tsv.gz", + "known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "known_fusions_mm10_GRCm38_v2.4.0.tsv.gz", + "known_fusions_mm39_GRCm39_v2.4.0.tsv.gz", + "protein_domains_hg19_hs37d5_GRCh37_v2.4.0.gff3", + "protein_domains_hg38_GRCh38_v2.4.0.gff3", + "protein_domains_mm10_GRCm38_v2.4.0.gff3", + "protein_domains_mm39_GRCm39_v2.4.0.gff3", + "versions.yml" + ], + [ + "versions.yml:md5,98c69df5eaea5caf0b4af7b8d7af4893" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-22T17:00:38.086459" + } +} \ No newline at end of file diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml new file mode 100644 index 000000000..c7794856d --- /dev/null +++ b/modules/nf-core/gunzip/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::grep=3.11 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf new file mode 100644 index 000000000..5e67e3b9b --- /dev/null +++ b/modules/nf-core/gunzip/main.nf @@ -0,0 +1,55 @@ +process GUNZIP { + tag "$archive" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" + + input: + tuple val(meta), path(archive) + + output: + tuple val(meta), path("$gunzip"), emit: gunzip + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" + """ + # Not calling gunzip itself because it creates files + # with the original group ownership rather than the + # default one for that user / the work directory + gzip \\ + -cd \\ + $args \\ + $archive \\ + > $gunzip + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" + """ + touch $gunzip + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml new file mode 100644 index 000000000..9066c0353 --- /dev/null +++ b/modules/nf-core/gunzip/meta.yml @@ -0,0 +1,47 @@ +name: gunzip +description: Compresses and decompresses files. +keywords: + - gunzip + - compression + - decompression +tools: + - gunzip: + description: | + gzip is a file format and a software application used for file compression and decompression. + documentation: https://www.gnu.org/software/gzip/manual/gzip.html + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - meta: + type: map + description: | + Optional groovy Map containing meta information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" +output: + - gunzip: + - meta: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - $gunzip: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" + - "@gallvp" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test new file mode 100644 index 000000000..776211adf --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -0,0 +1,121 @@ +nextflow_process { + + name "Test Process GUNZIP" + script "../main.nf" + process "GUNZIP" + tag "gunzip" + tag "modules_nfcore" + tag "modules" + + test("Should run without failures") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix") { + + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix - stub") { + + options '-stub' + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap new file mode 100644 index 000000000..069967e76 --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "Should run without failures - prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:10.861293" + }, + "Should run without failures - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:05.857145" + }, + "Should run without failures": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2023-10-17T15:35:37.690477896" + }, + "Should run without failures - prefix": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:33:32.921739" + } +} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/nextflow.config b/modules/nf-core/gunzip/tests/nextflow.config new file mode 100644 index 000000000..dec776425 --- /dev/null +++ b/modules/nf-core/gunzip/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GUNZIP { + ext.prefix = { "${meta.id}.xyz" } + } +} diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml new file mode 100644 index 000000000..fd3f69154 --- /dev/null +++ b/modules/nf-core/gunzip/tests/tags.yml @@ -0,0 +1,2 @@ +gunzip: + - modules/nf-core/gunzip/** diff --git a/nextflow.config b/nextflow.config index db5a3f633..63369d6c4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,7 +12,6 @@ params { // Input options input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - build_references = false cosmic_username = null cosmic_passwd = null qiagen = false @@ -27,7 +26,7 @@ params { // Genome genome = 'GRCh38' genomes_base = "${params.outdir}/references" - ensembl_version = 112 + genome_gencode_version = 46 read_length = 100 starfusion_build = true genomes = [:] @@ -69,16 +68,16 @@ params { download_refs = true // Path to references - fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa" - fai = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.dna.primary_assembly.fa.fai" - gtf = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf" - refflat = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.gtf.refflat" - rrna_intervals = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.interval_list" - ensembl_ref = "${params.genomes_base}/ensembl" + fasta = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}_dna_primary_assembly.fa" + fai = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}_dna_primary_assembly.fa.fai" + gtf = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}.gtf" + refflat = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}.gtf.refflat" + rrna_intervals = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}.interval_list" + gencode_ref = "${params.genomes_base}/gencode" arriba_ref_blacklist = "${params.genomes_base}/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz" arriba_ref_known_fusions = "${params.genomes_base}/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz" arriba_ref_protein_domains = "${params.genomes_base}/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3" - fusioncatcher_ref = "${params.genomes_base}/fusioncatcher/human_v${params.ensembl_version}" + fusioncatcher_ref = "${params.genomes_base}/fusioncatcher/human_v${params.genome_gencode_version}" hgnc_ref = "${params.genomes_base}/hgnc/hgnc_complete_set.txt" hgnc_date = "${params.genomes_base}/hgnc/HGNC-DB-timestamp.txt" salmon_index = "${params.genomes_base}/salmon/salmon" @@ -91,7 +90,7 @@ params { salmon_index_stub_check = "${params.genomes_base}/salmon/salmon/complete_ref_lens.bin" starindex_ref_stub_check = "${params.genomes_base}/star/star/Genome" fusionreport_ref_stub_check = "${params.genomes_base}/fusion_report_db/mitelman.db" - fusioncatcher_ref_stub_check = "${params.genomes_base}/fusioncatcher/human_v${params.ensembl_version}/ensembl_fully_overlapping_genes.txt" + fusioncatcher_ref_stub_check = "${params.genomes_base}/fusioncatcher/human_v${params.genome_gencode_version}/ensembl_fully_overlapping_genes.txt" starfusion_ref_stub_check = "${params.genomes_base}/starfusion/Pfam-A.hmm" // Path to fusion outputs diff --git a/nextflow_schema.json b/nextflow_schema.json index 95238d65d..be31bcc30 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -62,11 +62,6 @@ "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", "fa_icon": "fas fa-file-signature" }, - "build_references": { - "type": "boolean", - "fa_icon": "far fa-file-code", - "description": "Specifies which analysis type for the pipeline - either build references or analyse data" - }, "cosmic_username": { "type": "string", "fa_icon": "far fa-file-code", @@ -82,7 +77,7 @@ "fa_icon": "far fa-file-code", "description": "Path to reference folder" }, - "ensembl_version": { + "genome_gencode_version": { "type": "integer", "fa_icon": "far fa-file-code", "description": "ensembl version", @@ -134,10 +129,10 @@ "fa_icon": "far fa-file-code", "description": "Download references instead of building them (for fusioncatcher and starfusion)" }, - "ensembl_ref": { + "gencode_ref": { "type": "string", "fa_icon": "far fa-file-code", - "description": "Path to ensembl references" + "description": "Path to gencode references" }, "fusioncatcher": { "type": "boolean", @@ -342,14 +337,6 @@ "description": "Path to GTF genome file.", "fa_icon": "far fa-file-code" }, - "chrgtf": { - "type": "string", - "format": "file-path", - "mimetype": "text/plain", - "pattern": "^\\S+\\.gtf?(\\.gz)?$", - "description": "Path to GTF genome file.", - "fa_icon": "far fa-file-code" - }, "refflat": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index cfb4258ba..8017f6346 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -5,7 +5,7 @@ */ include { ARRIBA_DOWNLOAD } from '../../modules/local/arriba/download/main' -include { ENSEMBL_DOWNLOAD } from '../../modules/local/ensembl/main' +include { GENCODE_DOWNLOAD } from '../../modules/local/gencode_download/main' include { FUSIONCATCHER_DOWNLOAD } from '../../modules/local/fusioncatcher/download/main' include { FUSIONCATCHER_BUILD } from '../../modules/local/fusioncatcher/build/main' include { FUSIONREPORT_DOWNLOAD } from '../../modules/local/fusionreport/download/main' @@ -37,26 +37,24 @@ include { GFFREAD } from '../../modules/nf-core/gffread/ workflow BUILD_REFERENCES { take: genome // channel: [mandatory] val(genome) - ensembl_version // channel: [mandatory] val(ensembl_version) + genome_gencode_version // channel: [mandatory] val(genome_gencode_version) main: ch_versions = Channel.empty() if (!file(params.fasta).exists() || file(params.fasta).isEmpty() || !file(params.gtf).exists() || file(params.gtf).isEmpty()){ - fake_meta = [:] - fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" - ENSEMBL_DOWNLOAD(params.ensembl_version, params.genome, fake_meta) - ch_versions = ENSEMBL_DOWNLOAD.out.versions - ch_fasta = ENSEMBL_DOWNLOAD.out.primary_assembly - ch_gtf = ENSEMBL_DOWNLOAD.out.gtf + GENCODE_DOWNLOAD(params.genome_gencode_version, params.genome) + ch_versions = GENCODE_DOWNLOAD.out.versions + ch_fasta = GENCODE_DOWNLOAD.out.fasta.map { that -> [[id:that.Name], that] } + ch_gtf = GENCODE_DOWNLOAD.out.gtf.map { that -> [[id:that.Name], that] } } else { ch_fasta = Channel.fromPath(params.fasta).map { that -> [[id:that.Name], that] } ch_gtf = Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] } } if (!file(params.fai).exists() || file(params.fai).isEmpty()){ - SAMTOOLS_FAIDX(ch_fasta, [[],[]]).fai + SAMTOOLS_FAIDX(ch_fasta, [[],[]]) ch_versions = SAMTOOLS_FAIDX.out.versions ch_fai = SAMTOOLS_FAIDX.out.fai } else { @@ -121,39 +119,39 @@ workflow BUILD_REFERENCES { // } - if ((params.fusioncatcher || params.all) && - (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || - !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { - if (params.download_refs) { - FUSIONCATCHER_DOWNLOAD(params.ensembl_version) - ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference} - else { - FUSIONCATCHER_BUILD(params.ensembl_version) - ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference} - } else { - ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } - } - - - if ((params.starfusion || params.all) && - (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || - !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { - if (params.download_refs) { - ch_starfusion_ref = STARFUSION_DOWNLOAD( ch_fasta, ch_gtf ).out.reference } - else { - ch_starfusion_ref = STARFUSION_BUILD( ch_fasta, ch_gtf ).out.reference } - } else { - ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] }} - - - if ((params.fusionreport || params.all) && - (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || - !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { - if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } - ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ).out.reference - } else { - ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } - } + // if ((params.fusioncatcher || params.all) && + // (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || + // !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { + // if (params.download_refs) { + // FUSIONCATCHER_DOWNLOAD(params.genome_gencode_version) + // ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference} + // else { + // FUSIONCATCHER_BUILD(params.genome_gencode_version) + // ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference} + // } else { + // ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } + // } + + + // if ((params.starfusion || params.all) && + // (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || + // !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { + // if (params.download_refs) { + // ch_starfusion_ref = STARFUSION_DOWNLOAD( ch_fasta, ch_gtf ).out.reference } + // else { + // ch_starfusion_ref = STARFUSION_BUILD( ch_fasta, ch_gtf ).out.reference } + // } else { + // ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] }} + + + // if ((params.fusionreport || params.all) && + // (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || + // !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { + // if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } + // ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ).out.reference + // } else { + // ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } + // } emit: ch_fasta @@ -162,16 +160,16 @@ workflow BUILD_REFERENCES { ch_hgnc_ref ch_hgnc_date - ch_rrna_interval - ch_refflat - ch_salmon_index - ch_starindex_ref + // ch_rrna_interval + // ch_refflat + // ch_salmon_index + // ch_starindex_ref // ch_arriba_ref_blacklist // ch_arriba_ref_known_fusions // ch_arriba_ref_protein_domains - ch_fusioncatcher_ref - ch_starfusion_ref - ch_fusionreport_ref + // ch_fusioncatcher_ref + // ch_starfusion_ref + // ch_fusionreport_ref versions = ch_versions } diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index d7958fecc..177f42d29 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -11,7 +11,7 @@ workflow QC_WORKFLOW { ch_reads_all ch_bam_sorted ch_bam_sorted_indexed - ch_chrgtf + ch_gtf ch_refflat ch_fasta ch_fai diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index de99d8e51..d6a0668a1 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -7,7 +7,7 @@ include { STARFUSION } from '../../mod workflow STARFUSION_WORKFLOW { take: reads - ch_chrgtf + ch_gtf ch_starindex_ref ch_fasta @@ -23,7 +23,7 @@ workflow STARFUSION_WORKFLOW { ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) .map { meta, reads, fusions -> [ meta, fusions ] } } else { - STAR_FOR_STARFUSION( reads, ch_starindex_ref, ch_chrgtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') + STAR_FOR_STARFUSION( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) ch_align = STAR_FOR_STARFUSION.out.bam_sorted diff --git a/subworkflows/local/stringtie_workflow.nf b/subworkflows/local/stringtie_workflow.nf index 60bd4f38b..d66ec0ee4 100644 --- a/subworkflows/local/stringtie_workflow.nf +++ b/subworkflows/local/stringtie_workflow.nf @@ -5,14 +5,14 @@ include { STRINGTIE_MERGE } from '../../modules/nf-core/stringtie/merge/m workflow STRINGTIE_WORKFLOW { take: bam_sorted - ch_chrgtf + ch_gtf main: ch_versions = Channel.empty() ch_stringtie_gtf = Channel.empty() if ((params.stringtie || params.all) && !params.fusioninspector_only) { - STRINGTIE_STRINGTIE(bam_sorted, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + STRINGTIE_STRINGTIE(bam_sorted, ch_gtf.map { meta, gtf -> [ gtf ]}) ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) STRINGTIE_STRINGTIE @@ -23,7 +23,7 @@ workflow STRINGTIE_WORKFLOW { ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - STRINGTIE_MERGE (stringtie_gtf, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + STRINGTIE_MERGE (stringtie_gtf, ch_gtf.map { meta, gtf -> [ gtf ]}) ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 67dedb4b1..bb24df1f4 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -65,7 +65,7 @@ workflow RNAFUSION { // Create references if necessary // - BUILD_REFERENCES(params.genome, params.ensembl_version) + BUILD_REFERENCES(params.genome, params.genome_gencode_version) ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) // // Optional @@ -177,7 +177,7 @@ workflow RNAFUSION { // //Run STAR fusion // STARFUSION_WORKFLOW ( // ch_reads_all, -// ch_chrgtf, +// ch_gtf, // ch_starindex_ref, // ch_fasta // ) @@ -194,7 +194,7 @@ workflow RNAFUSION { // //Run stringtie // STRINGTIE_WORKFLOW ( // STARFUSION_WORKFLOW.out.ch_bam_sorted, -// ch_chrgtf +// ch_gtf // ) // ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) @@ -218,7 +218,7 @@ workflow RNAFUSION { // FUSIONREPORT_WORKFLOW.out.report, // FUSIONREPORT_WORKFLOW.out.csv, // STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, -// ch_chrgtf, +// ch_gtf, // ch_arriba_ref_protein_domains, // ch_arriba_ref_cytobands, // ch_hgnc_ref, @@ -232,7 +232,7 @@ workflow RNAFUSION { // ch_reads_all, // STARFUSION_WORKFLOW.out.ch_bam_sorted, // STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, -// ch_chrgtf, +// ch_gtf, // ch_refflat, // ch_fasta, // ch_fai, From d6ca5b580223b139ce77a95cfcc05912a7155558 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:12:27 +0200 Subject: [PATCH 058/887] prettier --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 07a31e4c8..60770738f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -515,7 +515,7 @@ }, "allOf": [ { - "$ref": "#/$defs/input_output_options" + "$ref": "#/$defs/input_output_options" }, { "$ref": "#/$defs/skip_steps" From e918b8229e9d0c781da5eb7b25f6b663614e98de Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:57:00 +0200 Subject: [PATCH 059/887] linitng --- nextflow.config | 18 +--- workflows/rnafusion.nf | 195 +---------------------------------------- 2 files changed, 3 insertions(+), 210 deletions(-) diff --git a/nextflow.config b/nextflow.config index 6f2725f83..3ea4afd11 100644 --- a/nextflow.config +++ b/nextflow.config @@ -125,21 +125,6 @@ params { // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/rnafusion custom profiles from different institutions. -// Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! -try { - includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") -} - profiles { debug { dumpHashes = true @@ -252,8 +237,7 @@ profiles { includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" // Load nf-core/rnafusion custom profiles from different institutions. -// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs -// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/rnafusion.config" : "/dev/null" +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/rnafusion.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index c3831c47d..53c51b00d 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -9,58 +9,7 @@ include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' -include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-validation' - -ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() -ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() -ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() -ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() -ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() -ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() -ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() -ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() -ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT LOCAL MODULES/SUBWORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules -// - -include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' -include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' -include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' -include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' -include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow' -include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' -include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' -include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' -include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT NF-CORE MODULES/SUBWORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// MODULE: Installed directly from nf-core/modules -// -include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' -include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -71,148 +20,18 @@ workflow RNAFUSION { take: ch_samplesheet // channel: samplesheet read in from --input - main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // - // Create channel from input file provided through params.input - // - Channel - .fromSamplesheet("input") - .map { - meta, fastq_1, fastq_2, strandedness -> - if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } - } - .groupTuple() - .map { - validateInputSamplesheet(it) - } - .branch { - meta, fastqs -> - single : fastqs.size() == 1 - return [ meta, fastqs.flatten() ] - multiple: fastqs.size() > 1 - return [ meta, fastqs.flatten() ] - } - .set { ch_fastq } - - // - // MODULE: Concatenate FastQ files from same sample if required - // - CAT_FASTQ ( - ch_fastq.multiple - ) - .reads - .mix(ch_fastq.single) - .set { ch_cat_fastq } - ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) - - // // MODULE: Run FastQC // FASTQC ( - ch_cat_fastq + ch_samplesheet ) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions) - - TRIM_WORKFLOW ( - ch_cat_fastq - ) - ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher - ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - - - SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') - - - // - // SUBWORKFLOW: Run STAR alignment and Arriba - // - ARRIBA_WORKFLOW ( - ch_reads_all, - ch_gtf, - ch_fasta, - ch_starindex_ensembl_ref, - ch_arriba_ref_blacklist, - ch_arriba_ref_known_fusions, - ch_arriba_ref_protein_domains - ) - ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) - - -//Run STAR fusion - STARFUSION_WORKFLOW ( - ch_reads_all, - ch_chrgtf, - ch_starindex_ref, - ch_fasta - ) - ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - - -//Run fusioncatcher - FUSIONCATCHER_WORKFLOW ( - ch_reads_fusioncatcher - ) - ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) - - -//Run stringtie - STRINGTIE_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, - ch_chrgtf - ) - ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) - - - //Run fusion-report - FUSIONREPORT_WORKFLOW ( - ch_reads_all, - ch_fusionreport_ref, - ARRIBA_WORKFLOW.out.fusions, - STARFUSION_WORKFLOW.out.fusions, - FUSIONCATCHER_WORKFLOW.out.fusions - ) - ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) - - - //Run fusionInpector - FUSIONINSPECTOR_WORKFLOW ( - ch_reads_all, - FUSIONREPORT_WORKFLOW.out.fusion_list, - FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, - FUSIONREPORT_WORKFLOW.out.report, - FUSIONREPORT_WORKFLOW.out.csv, - STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, - ch_chrgtf, - ch_arriba_ref_protein_domains, - ch_arriba_ref_cytobands, - ch_hgnc_ref, - ch_hgnc_date - ) - ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - - - //QC - QC_WORKFLOW ( - ch_reads_all, - STARFUSION_WORKFLOW.out.ch_bam_sorted, - ch_chrgtf, - ch_refflat, - ch_fasta, - ch_fai, - ch_rrna_interval - ) - ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // // Collate and save software versions @@ -256,16 +75,6 @@ workflow RNAFUSION { sort: true ) ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) MULTIQC ( ch_multiqc_files.collect(), From 90fab1933ac9a0047f84d8ddfd9cb4dff65cd481 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:57:50 +0200 Subject: [PATCH 060/887] fix input checks --- assets/schema_input.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 96879f358..9747d48aa 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -29,9 +29,7 @@ }, "strandedness": { "type": "string", - "format": "string", - "exists": true, - "pattern": "forward|reverse|unstranded|unknown", + "enum": ["forward", "reverse", "unstranded", "unknown"], "errorMessage": "Strandedness has to be forward, reverse, unstranded or unknown" } }, From 82da72980c223cffb750b92befab1ae3dde95303 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:06:33 +0200 Subject: [PATCH 061/887] add igenomes to linting exclusion --- .nf-core.yml | 2 ++ conf/igenomes_ignored.config | 9 --------- 2 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 conf/igenomes_ignored.config diff --git a/.nf-core.yml b/.nf-core.yml index 097a52b0e..49964714b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -3,6 +3,8 @@ lint: files_unchanged: - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md + - conf/igenomes.config + - conf/igenomes_ignored.config nf_core_version: 3.0.2 org_path: null repository_type: pipeline diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config deleted file mode 100644 index b4034d824..000000000 --- a/conf/igenomes_ignored.config +++ /dev/null @@ -1,9 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for iGenomes paths -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Empty genomes dictionary to use when igenomes is ignored. ----------------------------------------------------------------------------------------- -*/ - -params.genomes = [:] From 4b93703cc841ae65497bc9db20d666d4ca4bc4cf Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:13:46 +0200 Subject: [PATCH 062/887] remove exist false for input as logic changed --- nextflow_schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 60770738f..470b1300b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -32,7 +32,6 @@ "input": { "type": "string", "format": "file-path", - "exists": false, "schema": "assets/schema_input.json", "mimetype": "text/csv", "pattern": "^\\S+\\.csv$", From 046c74d6e9ea9c246c61d0fd057e470810cf8854 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:47:38 +0200 Subject: [PATCH 063/887] declare samplesheet as input --- main.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.nf b/main.nf index d6d7364c5..2508e74bb 100644 --- a/main.nf +++ b/main.nf @@ -42,6 +42,8 @@ include { RNAFUSION } from './workflows/rnafusion' // WORKFLOW: Run main analysis pipeline depending on type of input // workflow NFCORE_RNAFUSION { + take: + samplesheet main: From e8949e00f5d215e5bf8cefc784d4ff47ac30bac2 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:30:20 +0200 Subject: [PATCH 064/887] adapt samplesheet --- main.nf | 1 - subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/main.nf b/main.nf index 2508e74bb..ced04ca91 100644 --- a/main.nf +++ b/main.nf @@ -54,7 +54,6 @@ workflow NFCORE_RNAFUSION { if (params.build_references) { BUILD_REFERENCES () } else { - ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) RNAFUSION(samplesheet) } diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 72a6c82a7..ae62c8d4c 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -77,11 +77,11 @@ workflow PIPELINE_INITIALISATION { Channel .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { - meta, fastq_1, fastq_2 -> + meta, fastq_1, fastq_2, strandedness -> if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] + return [ meta.id, meta + [ single_end:true ], [ fastq_1 ], strandedness ] } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] + return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ], strandedness ] } } .groupTuple() From 94fb2461b6ea8ad9763bfa16865ace07f95272b1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:25:00 +0200 Subject: [PATCH 065/887] change output dir to avoid overwriting --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f84c77191..a729acf88 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,12 +87,12 @@ jobs: run: | nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} \ -stub --build_references \ - --outdir /home/runner/work/rnafusion/rnafusion/results --all \ - --genomes_base /home/runner/work/rnafusion/rnafusion/results/references \ + --outdir ./results --all \ + --genomes_base ./results/references \ --cosmic_username ${{ secrets.COSMIC_USERNAME }} --cosmic_passwd ${{ secrets.COSMIC_PASSWD }} - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | nextflow run ${GITHUB_WORKSPACE} -profile -profile ${{ matrix.test_name }},${{ matrix.profile }} -stub \ - --outdir /home/runner/work/rnafusion/rnafusion/results --all ${{ matrix.trim_parameters }} \ - --genomes_base /home/runner/work/rnafusion/rnafusion/results/references + --outdir ./results --all ${{ matrix.trim_parameters }} \ + --genomes_base ./results/references From 4e029f81c2bc4e364be6d464bfc91241b72dc108 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:33:44 +0200 Subject: [PATCH 066/887] correct error in output of version in hgcn --- modules/local/hgnc/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 1b3808f6d..27c4321f7 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -23,7 +23,7 @@ process HGNC_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) END_VERSIONS """ @@ -34,7 +34,7 @@ process HGNC_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) END_VERSIONS """ From 8d7f7a9a75e555a1e1edeeee10a83a3641ebb450 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:34:34 +0200 Subject: [PATCH 067/887] revert change of dir --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a729acf88..f84c77191 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,12 +87,12 @@ jobs: run: | nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} \ -stub --build_references \ - --outdir ./results --all \ - --genomes_base ./results/references \ + --outdir /home/runner/work/rnafusion/rnafusion/results --all \ + --genomes_base /home/runner/work/rnafusion/rnafusion/results/references \ --cosmic_username ${{ secrets.COSMIC_USERNAME }} --cosmic_passwd ${{ secrets.COSMIC_PASSWD }} - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | nextflow run ${GITHUB_WORKSPACE} -profile -profile ${{ matrix.test_name }},${{ matrix.profile }} -stub \ - --outdir ./results --all ${{ matrix.trim_parameters }} \ - --genomes_base ./results/references + --outdir /home/runner/work/rnafusion/rnafusion/results --all ${{ matrix.trim_parameters }} \ + --genomes_base /home/runner/work/rnafusion/rnafusion/results/references From 33e394c33c5eafc8b1a8ad5e832e33b349baf863 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:43:24 +0200 Subject: [PATCH 068/887] correct for ensembl too --- modules/local/ensembl/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/ensembl/main.nf b/modules/local/ensembl/main.nf index 8297e2901..4715690c6 100644 --- a/modules/local/ensembl/main.nf +++ b/modules/local/ensembl/main.nf @@ -31,7 +31,7 @@ process ENSEMBL_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') END_VERSIONS @@ -45,7 +45,7 @@ process ENSEMBL_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') END_VERSIONS """ From 93254d2523f8e4cc5db9d8c62d49110fb974e3ff Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:52:06 +0200 Subject: [PATCH 069/887] remove check max --- conf/modules.config | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 25169abb3..699720400 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -304,9 +304,9 @@ process { withName: 'STAR_GENOMEGENERATE' { ext.args = "--sjdbOverhang ${params.read_length - 1}" - cpus = { check_max( 24 * task.attempt, 'cpus' ) } - memory = { check_max( 100.GB * task.attempt, 'memory' ) } - time = { check_max( 2.d * task.attempt, 'time' ) } + cpus = { 24 * task.attempt } + memory = { 100.GB * task.attempt } + time = { 2.d * task.attempt } publishDir = [ path: { "${params.genomes_base}" }, mode: params.publish_dir_mode, @@ -315,9 +315,9 @@ process { } withName: 'STARFUSION_BUILD' { - cpus = { check_max( 24 * task.attempt, 'cpus' ) } - memory = { check_max( 100.GB * task.attempt, 'memory' ) } - time = { check_max( 2.d * task.attempt, 'time' ) } + cpus = { 24 * task.attempt } + memory = { 100.GB * task.attempt } + time = { 2.d * task.attempt } publishDir = [ path: { "${params.genomes_base}/starfusion" }, mode: params.publish_dir_mode, @@ -326,9 +326,9 @@ process { } withName: 'STARFUSION_DOWNLOAD' { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 24.GB * task.attempt, 'memory' ) } - time = { check_max( 6.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 24.GB * task.attempt } + time = { 6.h * task.attempt } publishDir = [ path: { "${params.genomes_base}/starfusion" }, mode: params.publish_dir_mode, From 533a7daca15138b107e9c2e82225430f84e1599e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:01:28 +0200 Subject: [PATCH 070/887] remove duplicate profile --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f84c77191..e1028ed8e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,6 +93,6 @@ jobs: - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | - nextflow run ${GITHUB_WORKSPACE} -profile -profile ${{ matrix.test_name }},${{ matrix.profile }} -stub \ + nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} -stub \ --outdir /home/runner/work/rnafusion/rnafusion/results --all ${{ matrix.trim_parameters }} \ --genomes_base /home/runner/work/rnafusion/rnafusion/results/references From b3a67f5ad7bd551af5bb252bf2087a4389920aed Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:56:30 +0200 Subject: [PATCH 071/887] backtrack rnafusion main --- workflows/rnafusion.nf | 131 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 53c51b00d..dd1dedb40 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -3,13 +3,44 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' +include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' +include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' +include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' +include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow' +include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' +include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' +include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' +include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' +include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' + +ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() +ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() +ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() +ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() +ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() +ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() +ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() +ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() +ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() +ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() +ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() +ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() +ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() + + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -33,6 +64,100 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + + + TRIM_WORKFLOW ( + ch_samplesheet + ) + ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher + ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all + ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + + + SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + + + // + // SUBWORKFLOW: Run STAR alignment and Arriba + // + ARRIBA_WORKFLOW ( + ch_reads_all, + ch_gtf, + ch_fasta, + ch_starindex_ensembl_ref, + ch_arriba_ref_blacklist, + ch_arriba_ref_known_fusions, + ch_arriba_ref_protein_domains + ) + ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) + + + //Run STAR fusion + STARFUSION_WORKFLOW ( + ch_reads_all, + ch_chrgtf, + ch_starindex_ref, + ch_fasta + ) + ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + + + //Run fusioncatcher + FUSIONCATCHER_WORKFLOW ( + ch_reads_fusioncatcher + ) + ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + + + //Run stringtie + STRINGTIE_WORKFLOW ( + STARFUSION_WORKFLOW.out.ch_bam_sorted, + ch_chrgtf + ) + ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) + + + //Run fusion-report + FUSIONREPORT_WORKFLOW ( + ch_reads_all, + ch_fusionreport_ref, + ARRIBA_WORKFLOW.out.fusions, + STARFUSION_WORKFLOW.out.fusions, + FUSIONCATCHER_WORKFLOW.out.fusions + ) + ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) + + + //Run fusionInpector + FUSIONINSPECTOR_WORKFLOW ( + ch_reads_all, + FUSIONREPORT_WORKFLOW.out.fusion_list, + FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, + FUSIONREPORT_WORKFLOW.out.report, + FUSIONREPORT_WORKFLOW.out.csv, + STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, + ch_chrgtf, + ch_arriba_ref_protein_domains, + ch_arriba_ref_cytobands, + ch_hgnc_ref, + ch_hgnc_date + ) + ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) + + + //QC + QC_WORKFLOW ( + ch_reads_all, + STARFUSION_WORKFLOW.out.ch_bam_sorted, + ch_chrgtf, + ch_refflat, + ch_fasta, + ch_fai, + ch_rrna_interval + ) + ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + + // // Collate and save software versions // @@ -44,7 +169,6 @@ workflow RNAFUSION { newLine: true ).set { ch_collated_versions } - // // MODULE: MultiQC // @@ -85,7 +209,10 @@ workflow RNAFUSION { [] ) - emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + + + emit: + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] } From 6773f5bac62303753976b3949ad90b3e2b227f07 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 14:35:13 +0200 Subject: [PATCH 072/887] update containers to nf-core and quay registry --- modules/local/ensembl/main.nf | 2 +- modules/local/fusioncatcher/detect/main.nf | 2 +- modules/local/fusioncatcher/download/main.nf | 2 +- modules/local/fusioninspector/main.nf | 2 +- modules/local/fusionreport/detect/main.nf | 2 +- modules/local/fusionreport/download/main.nf | 2 +- modules/local/hgnc/main.nf | 2 +- modules/local/rrnatranscripts/main.nf | 2 +- modules/local/starfusion/build/main.nf | 2 +- modules/local/starfusion/detect/main.nf | 2 +- modules/local/starfusion/download/main.nf | 2 +- modules/local/vcf_collect/main.nf | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/local/ensembl/main.nf b/modules/local/ensembl/main.nf index 4715690c6..8f708fc26 100644 --- a/modules/local/ensembl/main.nf +++ b/modules/local/ensembl/main.nf @@ -5,7 +5,7 @@ process ENSEMBL_DOWNLOAD { conda "bioconda::gnu-wget=1.18" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : - 'quay.io/biocontainers/gnu-wget:1.18--h5bf99c6_5' }" + 'biocontainers/gnu-wget:1.18--h5bf99c6_5' }" input: val ensembl_version diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 2977d6686..30e641db2 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER { label 'process_high' conda "bioconda::fusioncatcher=1.33" - container "docker.io/clinicalgenomics/fusioncatcher:1.33" + container "nf-core/fusioncatcher:1.33" input: tuple val(meta), path(fasta) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 156e70b65..0f9178c84 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER_DOWNLOAD { label 'process_medium' conda "bioconda::fusioncatcher=1.33" - container "docker.io/clinicalgenomics/fusioncatcher:1.33" + container "nf-core/fusioncatcher:1.33" output: path "*" , emit: reference diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 2f99c7111..1b04ce2c8 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -3,7 +3,7 @@ process FUSIONINSPECTOR { label 'process_high' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container 'docker.io/trinityctat/starfusion:1.13.0' + container "nf-core/starfusion:1.13.0" input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 8024d8f8e..386bb3ae4 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -3,7 +3,7 @@ process FUSIONREPORT { label 'process_medium' conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:2.1.8" + container "nf-core/fusion-report:2.1.8" input: diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index ac288ade9..3d08360ca 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -3,7 +3,7 @@ process FUSIONREPORT_DOWNLOAD { label 'process_medium' conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:2.1.8" + container "nf-core/fusion-report:2.1.8" input: val(username) diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 27c4321f7..865c59d24 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -5,7 +5,7 @@ process HGNC_DOWNLOAD { conda "bioconda::gnu-wget=1.18" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : - 'quay.io/biocontainers/gnu-wget:1.18--h5bf99c6_5' }" + 'biocontainers/gnu-wget:1.18--h5bf99c6_5' }" input: diff --git a/modules/local/rrnatranscripts/main.nf b/modules/local/rrnatranscripts/main.nf index c31de7076..fb4ec2d62 100644 --- a/modules/local/rrnatranscripts/main.nf +++ b/modules/local/rrnatranscripts/main.nf @@ -6,7 +6,7 @@ process RRNA_TRANSCRIPTS { container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.12' : - 'quay.io/biocontainers/python:3.12' }" + 'biocontainers/python:3.12' }" input: tuple val(meta), path(gtf) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index a768cc5c9..14b0eaf7c 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -2,7 +2,7 @@ process STARFUSION_BUILD { tag 'star-fusion' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container "docker.io/trinityctat/starfusion:1.13.0" + container "nf-core/starfusion:1.13.0" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 9a46cc00d..cc13e4f4c 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -3,7 +3,7 @@ process STARFUSION { label 'process_high' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container 'docker.io/trinityctat/starfusion:1.13.0' + container "nf-core/starfusion:1.13.0" input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 221d12dd9..5eb5bdef7 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -2,7 +2,7 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container 'docker.io/trinityctat/starfusion:1.13.0' + container "nf-core/starfusion:1.13.0" output: path "ctat_genome_lib_build_dir/*" , emit: reference diff --git a/modules/local/vcf_collect/main.nf b/modules/local/vcf_collect/main.nf index 3ede7936c..3a1bf2217 100644 --- a/modules/local/vcf_collect/main.nf +++ b/modules/local/vcf_collect/main.nf @@ -5,7 +5,7 @@ process VCF_COLLECT { conda "conda-forge::pandas=1.5.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/pandas:1.5.2' : - 'quay.io/biocontainers/pandas:1.5.2' }" + 'biocontainers/pandas:1.5.2' }" input: tuple val(meta), path(fusioninspector_tsv), path(fusioninspector_gtf_tsv), path(fusionreport_report), path(fusionreport_csv) From 1d6304012c4ebf8a07ecd5ee929aa44e21b55153 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:00:58 +0200 Subject: [PATCH 073/887] remove quay but leave the docker.io repo --- modules/local/fusioncatcher/detect/main.nf | 2 +- modules/local/fusioncatcher/download/main.nf | 2 +- modules/local/fusioninspector/main.nf | 2 +- modules/local/fusionreport/detect/main.nf | 2 +- modules/local/fusionreport/download/main.nf | 2 +- modules/local/starfusion/build/main.nf | 2 +- modules/local/starfusion/detect/main.nf | 2 +- modules/local/starfusion/download/main.nf | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 30e641db2..2977d6686 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER { label 'process_high' conda "bioconda::fusioncatcher=1.33" - container "nf-core/fusioncatcher:1.33" + container "docker.io/clinicalgenomics/fusioncatcher:1.33" input: tuple val(meta), path(fasta) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 0f9178c84..156e70b65 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER_DOWNLOAD { label 'process_medium' conda "bioconda::fusioncatcher=1.33" - container "nf-core/fusioncatcher:1.33" + container "docker.io/clinicalgenomics/fusioncatcher:1.33" output: path "*" , emit: reference diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 1b04ce2c8..2f99c7111 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -3,7 +3,7 @@ process FUSIONINSPECTOR { label 'process_high' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container "nf-core/starfusion:1.13.0" + container 'docker.io/trinityctat/starfusion:1.13.0' input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 386bb3ae4..8024d8f8e 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -3,7 +3,7 @@ process FUSIONREPORT { label 'process_medium' conda "bioconda::star=2.7.9a" - container "nf-core/fusion-report:2.1.8" + container "docker.io/clinicalgenomics/fusion-report:2.1.8" input: diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 3d08360ca..ac288ade9 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -3,7 +3,7 @@ process FUSIONREPORT_DOWNLOAD { label 'process_medium' conda "bioconda::star=2.7.9a" - container "nf-core/fusion-report:2.1.8" + container "docker.io/clinicalgenomics/fusion-report:2.1.8" input: val(username) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 14b0eaf7c..a768cc5c9 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -2,7 +2,7 @@ process STARFUSION_BUILD { tag 'star-fusion' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container "nf-core/starfusion:1.13.0" + container "docker.io/trinityctat/starfusion:1.13.0" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index cc13e4f4c..9a46cc00d 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -3,7 +3,7 @@ process STARFUSION { label 'process_high' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container "nf-core/starfusion:1.13.0" + container 'docker.io/trinityctat/starfusion:1.13.0' input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 5eb5bdef7..221d12dd9 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -2,7 +2,7 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container "nf-core/starfusion:1.13.0" + container 'docker.io/trinityctat/starfusion:1.13.0' output: path "ctat_genome_lib_build_dir/*" , emit: reference From 898306eb79717f81f2205018ce865a48cdb35a2c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:25:00 +0200 Subject: [PATCH 074/887] add files to multiqc --- workflows/rnafusion.nf | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index dd1dedb40..b4e4517b6 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -199,6 +199,16 @@ workflow RNAFUSION { sort: true ) ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) MULTIQC ( ch_multiqc_files.collect(), From b1891c56af96984de3e1174aee76612d4f70a986 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:27:22 +0200 Subject: [PATCH 075/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe350b46c..4d4e4e5c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated modules and migrated non-specific modules to nf-core/modules [#484](https://github.com/nf-core/rnafusion/pull/484) +- Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) ### Fixed From 0b1a0672a59a31918c9fddb54fdffc883768800d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:03:44 +0100 Subject: [PATCH 076/887] syntax --- conf/modules.config | 2 +- modules/local/arriba/visualisation/main.nf | 8 ++++---- modules/local/hgnc/main.nf | 2 -- modules/nf-core/arriba/download/main.nf | 2 -- modules/nf-core/arriba/main.nf | 20 ++++++++++---------- subworkflows/local/build_references.nf | 18 +++++++++--------- 6 files changed, 24 insertions(+), 28 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index af8324983..232efdd16 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -63,7 +63,7 @@ process { withName: 'FASTQC' { ext.args = '--quiet' - ext.when = { !params.skip_qc and not !params.build_references } + ext.when = { !params.skip_qc && !params.build_references } publishDir = [ path: { "${params.outdir}/fastqc" }, mode: params.publish_dir_mode, diff --git a/modules/local/arriba/visualisation/main.nf b/modules/local/arriba/visualisation/main.nf index cc1201191..f1aa097b6 100644 --- a/modules/local/arriba/visualisation/main.nf +++ b/modules/local/arriba/visualisation/main.nf @@ -22,17 +22,17 @@ process ARRIBA_VISUALISATION { script: def args = task.ext.args ?: '' - def cytobands = cytobands ? " --cytobands=$cytobands" : "" + def arg_cytobands = cytobands ? " --cytobands=$cytobands" : "" + def arg_protein_domains = protein_domains ? "--proteinDomains=$protein_domains" : "" def prefix = task.ext.prefix ?: "${meta.id}" - def protein_domains = protein_domains ? "--proteinDomains=$protein_domains" : "" """ draw_fusions.R \\ --fusions=$fusions \\ --alignments=$bam \\ --output=${prefix}.pdf \\ --annotation=${gtf} \\ - $cytobands \\ - $protein_domains \\ + $arg_cytobands \\ + $arg_protein_domains \\ $args cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 6a0556314..5a250f0f5 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -7,8 +7,6 @@ process HGNC_DOWNLOAD { 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : 'quay.io/biocontainers/gnu-wget:1.18--h5bf99c6_5' }" - input: - output: path "hgnc_complete_set.txt" , emit: hgnc_ref path "HGNC-DB-timestamp.txt" , emit: hgnc_date diff --git a/modules/nf-core/arriba/download/main.nf b/modules/nf-core/arriba/download/main.nf index 96a4e3362..7f11898bd 100644 --- a/modules/nf-core/arriba/download/main.nf +++ b/modules/nf-core/arriba/download/main.nf @@ -7,8 +7,6 @@ process ARRIBA_DOWNLOAD { 'https://depot.galaxyproject.org/singularity/arriba:2.4.0--h0033a41_2' : 'biocontainers/arriba:2.4.0--h0033a41_2' }" - input: - output: path "*" , emit: reference path "versions.yml" , emit: versions diff --git a/modules/nf-core/arriba/main.nf b/modules/nf-core/arriba/main.nf index 2537d05b8..66809530d 100644 --- a/modules/nf-core/arriba/main.nf +++ b/modules/nf-core/arriba/main.nf @@ -28,11 +28,11 @@ process ARRIBA { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def blacklist = blacklist ? "-b $blacklist" : "-f blacklist" - def known_fusions = known_fusions ? "-k $known_fusions" : "" - def structural_variants = structural_variants ? "-d $structual_variants" : "" - def tags = tags ? "-t $tags" : "" - def protein_domains = protein_domains ? "-p $protein_domains" : "" + def arg_blacklist = blacklist ? "-b $blacklist" : "-f blacklist" + def arg_known_fusions = known_fusions ? "-k $known_fusions" : "" + def arg_structural_variants = structural_variants ? "-d $structural_variants" : "" + def arg_tags = tags ? "-t $tags" : "" + def arg_protein_domains = protein_domains ? "-p $protein_domains" : "" """ arriba \\ @@ -41,11 +41,11 @@ process ARRIBA { -g $gtf \\ -o ${prefix}.fusions.tsv \\ -O ${prefix}.fusions.discarded.tsv \\ - $blacklist \\ - $known_fusions \\ - $structural_variants \\ - $tags \\ - $protein_domains \\ + $arg_blacklist \\ + $arg_known_fusions \\ + $arg_structural_variants \\ + $arg_tags \\ + $arg_protein_domains \\ $args cat <<-END_VERSIONS > versions.yml diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 8017f6346..1d45e74ca 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -133,15 +133,15 @@ workflow BUILD_REFERENCES { // } - // if ((params.starfusion || params.all) && - // (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || - // !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { - // if (params.download_refs) { - // ch_starfusion_ref = STARFUSION_DOWNLOAD( ch_fasta, ch_gtf ).out.reference } - // else { - // ch_starfusion_ref = STARFUSION_BUILD( ch_fasta, ch_gtf ).out.reference } - // } else { - // ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] }} + if ((params.starfusion || params.all) && + (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || + !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { + if (params.download_refs) { + ch_starfusion_ref = STARFUSION_DOWNLOAD( ch_fasta, ch_gtf ).out.reference } + else { + ch_starfusion_ref = STARFUSION_BUILD( ch_fasta, ch_gtf ).out.reference } + } else { + ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] }} // if ((params.fusionreport || params.all) && From f134b84c8a5977cee935aa5396eef504f6c278fd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:35:46 +0100 Subject: [PATCH 077/887] merging --- conf/modules.config | 14 -------------- modules/nf-core/salmon/quant/main.nf | 2 +- workflows/rnafusion.nf | 1 + 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7afa2817e..113c406ce 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -127,7 +127,6 @@ process { ] } -<<<<<<< HEAD withName: 'GFFREAD' { ext.args = { '-w' } publishDir = [ @@ -145,8 +144,6 @@ process { ] } -======= ->>>>>>> 22d0e803ca87786359cf582bfb4ac8114adde8fd withName: 'HGNC_DOWNLOAD' { publishDir = [ path: { "${params.genomes_base}/hgnc" }, @@ -369,20 +366,9 @@ process { ] } -<<<<<<< HEAD withName: 'TRIM_WORKFLOW:*' { ext.when = { !params.build_references } -======= - withName: 'UCSC_GTFTOGENEPRED' { - ext.args = "-genePredExt -geneNameAsName2" - publishDir = [ - path: { "${params.genomes_base}/ensembl" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] ->>>>>>> 22d0e803ca87786359cf582bfb4ac8114adde8fd - } withName: 'VCF_COLLECT' { ext.when = {!params.fusioninspector_only} diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index 6c528b240..6d624e751 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -28,7 +28,7 @@ process SALMON_QUANT { def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def reference = "--index $index" + def reference = "--index $index" def reads1 = [], reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 9b615d403..8f7f8ae8a 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -39,6 +39,7 @@ include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW From 7a5a91700ad963723a0a837d7f8cdb212947e8fd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Nov 2024 14:20:16 +0100 Subject: [PATCH 078/887] cleanup --- conf/modules.config | 2 +- main.nf | 7 +- modules.json | 142 ++++++++++++------ modules/local/fusioncatcher/build/main.nf | 1 - modules/local/fusioncatcher/download/main.nf | 20 +-- modules/local/gencode_download/main.nf | 4 +- modules/local/get_rrna_transcripts.nf | 43 ++++++ modules/nf-core/arriba/arriba/environment.yml | 3 + modules/nf-core/arriba/arriba/main.nf | 29 ++-- modules/nf-core/arriba/arriba/meta.yml | 39 +---- .../nf-core/arriba/arriba/tests/main.nf.test | 107 +++++++++++++ .../arriba/arriba/tests/main.nf.test.snap | 55 +++++++ .../arriba/arriba/tests/nextflow.config | 8 + modules/nf-core/arriba/download/main.nf | 13 +- modules/nf-core/arriba/download/meta.yml | 32 +++- .../arriba/download/tests/main.nf.test | 29 +++- .../arriba/download/tests/main.nf.test.snap | 62 ++++---- .../nf-core/arriba/download/tests/tags.yml | 2 + modules/nf-core/gunzip/environment.yml | 7 - modules/nf-core/gunzip/main.nf | 55 ------- modules/nf-core/gunzip/meta.yml | 47 ------ modules/nf-core/gunzip/tests/main.nf.test | 121 --------------- .../nf-core/gunzip/tests/main.nf.test.snap | 134 ----------------- modules/nf-core/gunzip/tests/nextflow.config | 5 - modules/nf-core/gunzip/tests/tags.yml | 2 - modules/nf-core/salmon/quant/environment.yml | 2 +- modules/nf-core/salmon/quant/main.nf | 6 +- .../salmon/quant/tests/main.nf.test.snap | 64 ++++---- nextflow.config | 3 +- nextflow_schema.json | 19 ++- subworkflows/local/build_references.nf | 102 +++++++------ workflows/rnafusion.nf | 52 ++----- 32 files changed, 564 insertions(+), 653 deletions(-) create mode 100644 modules/local/get_rrna_transcripts.nf create mode 100644 modules/nf-core/arriba/arriba/tests/main.nf.test create mode 100644 modules/nf-core/arriba/arriba/tests/main.nf.test.snap create mode 100644 modules/nf-core/arriba/arriba/tests/nextflow.config create mode 100644 modules/nf-core/arriba/download/tests/tags.yml delete mode 100644 modules/nf-core/gunzip/environment.yml delete mode 100644 modules/nf-core/gunzip/main.nf delete mode 100644 modules/nf-core/gunzip/meta.yml delete mode 100644 modules/nf-core/gunzip/tests/main.nf.test delete mode 100644 modules/nf-core/gunzip/tests/main.nf.test.snap delete mode 100644 modules/nf-core/gunzip/tests/nextflow.config delete mode 100644 modules/nf-core/gunzip/tests/tags.yml diff --git a/conf/modules.config b/conf/modules.config index 113c406ce..123e02b08 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -368,7 +368,7 @@ process { withName: 'TRIM_WORKFLOW:*' { ext.when = { !params.build_references } - + } withName: 'VCF_COLLECT' { ext.when = {!params.fusioninspector_only} diff --git a/main.nf b/main.nf index ce7352f13..09216f56b 100644 --- a/main.nf +++ b/main.nf @@ -41,6 +41,8 @@ include { RNAFUSION } from './workflows/rnafusion' // WORKFLOW: Run main analysis pipeline depending on type of input // workflow NFCORE_RNAFUSION { + take: + samplesheet main: @@ -48,8 +50,7 @@ workflow NFCORE_RNAFUSION { // WORKFLOW: Run pipeline // - ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) - RNAFUSION(ch_samplesheet) + RNAFUSION(samplesheet) } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -75,7 +76,7 @@ workflow { // // WORKFLOW: Run main workflow // - NFCORE_RNAFUSION () + NFCORE_RNAFUSION (PIPELINE_INITIALISATION.out.samplesheet) // // SUBWORKFLOW: Run completion tasks diff --git a/modules.json b/modules.json index e71954a61..7e5065489 100644 --- a/modules.json +++ b/modules.json @@ -8,152 +8,198 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba/arriba": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "7741dfc830e77a8ead2fcb50b01461ee09d0cdfe", + "installed_by": [ + "modules" + ] }, "arriba/download": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "467c202a876d26af544fa8c4b22a050a535462a7", + "installed_by": [ + "modules" + ] }, "bedops/convert2bed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, - "arriba/download": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/fastq": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastp": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gffread": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, - "gunzip": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectrnaseqmetrics": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "rrnatranscripts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/quant": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/align": { "branch": "master", "git_sha": "30a97c755895b7dfe40a730b0695c554a10f1cdd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/genomegenerate": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/stringtie": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/gtftogenepred": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -162,20 +208,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 51153253a..f6ff09878 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -2,7 +2,6 @@ process FUSIONCATCHER_BUILD { tag "fusioncatcher_build" label 'process_medium' - conda "bioconda::fusioncatcher=1.33" container "docker.io/clinicalgenomics/fusioncatcher:1.33" input: diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 916b4673a..20e3681fa 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -7,10 +7,10 @@ process FUSIONCATCHER_DOWNLOAD { input: - val ensembl_version + val genome_gencode_version output: - path "human_v${ensembl_version}" , emit: reference + path "human_v${genome_gencode_version}" , emit: reference path "versions.yml" , emit: versions when: @@ -24,12 +24,12 @@ process FUSIONCATCHER_DOWNLOAD { // def url = """ - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.aa - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ab - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ac - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${ensembl_version}.tar.gz.ad - cat human_${ensembl_version}.tar.gz.* | tar xz - rm human_${ensembl_version}.tar* + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.aa + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.ab + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.ac + wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.ad + cat human_${genome_gencode_version}.tar.gz.* | tar xz + rm human_${genome_gencode_version}.tar* cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -39,8 +39,8 @@ process FUSIONCATCHER_DOWNLOAD { stub: """ - mkdir human_v${ensembl_version} - touch human_v${ensembl_version}/ensembl_fully_overlapping_genes.txt + mkdir human_v${genome_gencode_version} + touch human_v${genome_gencode_version}/ensembl_fully_overlapping_genes.txt cat <<-END_VERSIONS > versions.yml "${task.process}": fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) diff --git a/modules/local/gencode_download/main.nf b/modules/local/gencode_download/main.nf index e9416cf4d..1f466d264 100644 --- a/modules/local/gencode_download/main.nf +++ b/modules/local/gencode_download/main.nf @@ -31,7 +31,7 @@ process GENCODE_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) END_VERSIONS """ @@ -42,7 +42,7 @@ process GENCODE_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3 > versions.yml) + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) END_VERSIONS """ diff --git a/modules/local/get_rrna_transcripts.nf b/modules/local/get_rrna_transcripts.nf new file mode 100644 index 000000000..cb39b3e4c --- /dev/null +++ b/modules/local/get_rrna_transcripts.nf @@ -0,0 +1,43 @@ +process GET_RRNA_TRANSCRIPTS { + tag 'get_rrna_bed' + label 'process_low' + + conda "bioconda::pirate=1.0.4 bioconda::perl-bioperl=1.7.2" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pirate:1.0.4--hdfd78af_2' : + 'biocontainers/pirate:1.0.4--hdfd78af_2' }" + + input: + tuple val(meta), path(gtf) + + output: + path('rrna.gtf') , emit: rrnagtf + path('rrna.bed') , emit: bed + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + $baseDir/bin/get_rrna_transcripts.py --gtf ${gtf} --output rrna.gtf + + $baseDir/bin/gtf2bed rrna.gtf > rrna.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + get_rrna_transcripts: v1.0 + END_VERSIONS + """ + + stub: + """ + touch rrna.gtf + touch rrna.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + get_rrna_transcripts: v1.0 + END_VERSIONS + """ +} diff --git a/modules/nf-core/arriba/arriba/environment.yml b/modules/nf-core/arriba/arriba/environment.yml index d0883a0d2..c3a88ffbd 100644 --- a/modules/nf-core/arriba/arriba/environment.yml +++ b/modules/nf-core/arriba/arriba/environment.yml @@ -1,5 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda + dependencies: - bioconda::arriba=2.4.0 diff --git a/modules/nf-core/arriba/arriba/main.nf b/modules/nf-core/arriba/arriba/main.nf index df6d4e395..75dbf93ad 100644 --- a/modules/nf-core/arriba/arriba/main.nf +++ b/modules/nf-core/arriba/arriba/main.nf @@ -8,14 +8,13 @@ process ARRIBA_ARRIBA { 'biocontainers/arriba:2.4.0--h0033a41_2' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam) tuple val(meta2), path(fasta) tuple val(meta3), path(gtf) - tuple val(meta4), path(blacklist) - tuple val(meta5), path(known_fusions) - tuple val(meta6), path(structural_variants) - tuple val(meta7), path(tags) - tuple val(meta8), path(protein_domains) + path(blacklist) + path(known_fusions) + path(cytobands) + path(protein_domains) output: tuple val(meta), path("*.fusions.tsv") , emit: fusions @@ -28,11 +27,10 @@ process ARRIBA_ARRIBA { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def arg_blacklist = blacklist ? "-b $blacklist" : "-f blacklist" - def arg_known_fusions = known_fusions ? "-k $known_fusions" : "" - def arg_structural_variants = structural_variants ? "-d $structural_variants" : "" - def arg_tags = tags ? "-t $tags" : "" - def arg_protein_domains = protein_domains ? "-p $protein_domains" : "" + def blacklist = blacklist ? "-b $blacklist" : "-f blacklist" + def known_fusions = known_fusions ? "-k $known_fusions" : "" + def cytobands = cytobands ? "-d $cytobands" : "" + def protein_domains = protein_domains ? "-p $protein_domains" : "" """ arriba \\ @@ -41,11 +39,10 @@ process ARRIBA_ARRIBA { -g $gtf \\ -o ${prefix}.fusions.tsv \\ -O ${prefix}.fusions.discarded.tsv \\ - $arg_blacklist \\ - $arg_known_fusions \\ - $arg_structural_variants \\ - $arg_tags \\ - $arg_protein_domains \\ + $blacklist \\ + $known_fusions \\ + $cytobands \\ + $protein_domains \\ $args cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/arriba/arriba/meta.yml b/modules/nf-core/arriba/arriba/meta.yml index f230dda1f..91ba21039 100644 --- a/modules/nf-core/arriba/arriba/meta.yml +++ b/modules/nf-core/arriba/arriba/meta.yml @@ -43,48 +43,19 @@ input: type: file description: Annotation GTF file pattern: "*.{gtf}" - - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - blacklist: + - - blacklist: type: file description: Blacklist file pattern: "*.{tsv}" - - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - known_fusions: + - - known_fusions: type: file description: Known fusions file pattern: "*.{tsv}" - - - meta6: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - structural_variants: - type: file - description: Structural variants file - pattern: "*.{tsv}" - - - meta7: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - tags: + - - cytobands: type: file - description: Tags file + description: Cytobands file pattern: "*.{tsv}" - - - meta8: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - protein_domains: + - - protein_domains: type: file description: Protein domains file pattern: "*.{gff3}" diff --git a/modules/nf-core/arriba/arriba/tests/main.nf.test b/modules/nf-core/arriba/arriba/tests/main.nf.test new file mode 100644 index 000000000..4cff86e50 --- /dev/null +++ b/modules/nf-core/arriba/arriba/tests/main.nf.test @@ -0,0 +1,107 @@ + +nextflow_process { + + name "Test Process ARRIBA_ARRIBA" + script "../main.nf" + process "ARRIBA_ARRIBA" + + tag "modules" + tag "modules_nfcore" + tag "arriba" + tag "arriba/arriba" + tag "arriba/download" + tag "star/genomegenerate" + tag "star/align" + + setup { + config "./nextflow.config" + options "-stub" + run("ARRIBA_DOWNLOAD") { + script "../../../arriba/download/main.nf" + process { + """ + input[0] = 'GRCh38' + """ + } + } + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + options "-stub" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + run("STAR_ALIGN") { + script "../../../star/align/main.nf" + options "-stub" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + } + + test("homo_sapiens - paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.rna.paired_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = [] + + input[4] = [] + + input[5] = [] + + input[6] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/arriba/arriba/tests/main.nf.test.snap b/modules/nf-core/arriba/arriba/tests/main.nf.test.snap new file mode 100644 index 000000000..14d46f6b8 --- /dev/null +++ b/modules/nf-core/arriba/arriba/tests/main.nf.test.snap @@ -0,0 +1,55 @@ +{ + "homo_sapiens - paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "2": [ + "versions.yml:md5,d323796555db4a58fe4c6bc08d1dec30" + ], + "fusions": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "fusions_fail": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "versions": [ + "versions.yml:md5,d323796555db4a58fe4c6bc08d1dec30" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-08T15:41:23.945072" + } +} \ No newline at end of file diff --git a/modules/nf-core/arriba/arriba/tests/nextflow.config b/modules/nf-core/arriba/arriba/tests/nextflow.config new file mode 100644 index 000000000..d3d5b00f6 --- /dev/null +++ b/modules/nf-core/arriba/arriba/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + withName: STAR_GENOMEGENERATE { + ext.args = '--genomeSAindexNbases 11' + } + withName: STAR_ALIGN { + ext.args = '--readFilesCommand zcat --outSAMtype BAM Unsorted --outSAMunmapped Within --outBAMcompression 0 --outFilterMultimapNmax 50 --peOverlapNbasesMin 10 --alignSplicedMateMapLminOverLmate 0.5 --alignSJstitchMismatchNmax 5 -1 5 5 --chimSegmentMin 10 --chimOutType WithinBAM HardClip --chimJunctionOverhangMin 10 --chimScoreDropMax 30 --chimScoreJunctionNonGTAG 0 --chimScoreSeparation 1 --chimSegmentReadGapMax 3 --chimMultimapNmax 50' + } +} diff --git a/modules/nf-core/arriba/download/main.nf b/modules/nf-core/arriba/download/main.nf index 7f11898bd..c45120adb 100644 --- a/modules/nf-core/arriba/download/main.nf +++ b/modules/nf-core/arriba/download/main.nf @@ -7,16 +7,22 @@ process ARRIBA_DOWNLOAD { 'https://depot.galaxyproject.org/singularity/arriba:2.4.0--h0033a41_2' : 'biocontainers/arriba:2.4.0--h0033a41_2' }" + input: + val(genome) + output: - path "*" , emit: reference - path "versions.yml" , emit: versions + path "blacklist*${genome}*.tsv.gz" , emit: blacklist + path "cytobands*${genome}*.tsv" , emit: cytobands + path "protein_domains*${genome}*.gff3" , emit: protein_domains + path "known_fusions*${genome}*.tsv.gz" , emit: known_fusions + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: """ - wget https://github.com/suhrig/arriba/releases/download/v2.4.0/arriba_v2.4.0.tar.gz -O arriba_v2.4.0.tar.gz + wget https://github.com/suhrig/arriba/releases/download/v2.4.0/arriba_v2.4.0.tar.gz -O arriba_v2.4.0.tar.gz --no-check-certificate tar -xzvf arriba_v2.4.0.tar.gz rm arriba_v2.4.0.tar.gz mv arriba_v2.4.0/database/* . @@ -34,7 +40,6 @@ process ARRIBA_DOWNLOAD { touch protein_domains_hg38_GRCh38_v2.4.0.gff3 touch cytobands_hg38_GRCh38_v2.4.0.tsv touch known_fusions_hg38_GRCh38_v2.4.0.tsv.gz - touch protein_domains_hg38_GRCh38_v2.4.0.gff3 cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/arriba/download/meta.yml b/modules/nf-core/arriba/download/meta.yml index 531c66c2f..bdf542ebc 100644 --- a/modules/nf-core/arriba/download/meta.yml +++ b/modules/nf-core/arriba/download/meta.yml @@ -15,12 +15,34 @@ tools: licence: ["MIT"] identifier: biotools:Arriba +input: + - - genome: + type: string + description: hg38, hg19, GRCh38, GRCh37 for humans are accepted output: - - reference: - - "*": - type: directory - description: Folder with arriba references - pattern: "*" + - blacklist: + - blacklist*${genome}*.tsv.gz: + type: string + description: The blacklist removes recurrent alignment artifacts and transcripts + which are present in healthy tissue + pattern: ".tsv.gz" + - cytobands: + - cytobands*${genome}*.tsv: + type: file + description: Coordinates of the Giemsa staining bands. This information is used + to draw ideograms + pattern: ".tsv" + - protein_domains: + - protein_domains*${genome}*.gff3: + type: file + description: Protein domain annotations + patter: "*.gff3" + - known_fusions: + - known_fusions*${genome}*.tsv.gz: + type: file + description: Arriba is more sensitive to those fusions to improve the detection + rate of expected or highly relevant events, such as recurrent fusions + patter: "*.tsv.gz" - versions: - versions.yml: type: file diff --git a/modules/nf-core/arriba/download/tests/main.nf.test b/modules/nf-core/arriba/download/tests/main.nf.test index cccc95db2..2c32c7a0f 100644 --- a/modules/nf-core/arriba/download/tests/main.nf.test +++ b/modules/nf-core/arriba/download/tests/main.nf.test @@ -11,11 +11,10 @@ nextflow_process { tag "arriba/download" test("test-arriba-download") { - when { process { """ - + input[0] = 'GRCh38' """ } } @@ -23,11 +22,27 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - process.out.reference[0].collect { file(it).name }.toSorted(), - process.out.versions - ).match() - } + { assert snapshot(process.out).match() } + ) + } + + } + + test("download - stub") { + + options "-stub" + + when { + process { + """ + input[0] = 'GRCh38' + """ + } + } + + then { + assertAll( + { assert process.success } ) } } diff --git a/modules/nf-core/arriba/download/tests/main.nf.test.snap b/modules/nf-core/arriba/download/tests/main.nf.test.snap index eda3f7066..fe9b18b94 100644 --- a/modules/nf-core/arriba/download/tests/main.nf.test.snap +++ b/modules/nf-core/arriba/download/tests/main.nf.test.snap @@ -1,35 +1,43 @@ { - "test-arriba-download": { + "download": { "content": [ - [ - "CREDITS", - "RefSeq_viral_genomes_v2.4.0.fa.gz", - "blacklist_hg19_hs37d5_GRCh37_v2.4.0.tsv.gz", - "blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "blacklist_mm10_GRCm38_v2.4.0.tsv.gz", - "blacklist_mm39_GRCm39_v2.4.0.tsv.gz", - "cytobands_hg19_hs37d5_GRCh37_v2.4.0.tsv", - "cytobands_hg38_GRCh38_v2.4.0.tsv", - "cytobands_mm10_GRCm38_v2.4.0.tsv", - "cytobands_mm39_GRCm39_v2.4.0.tsv", - "known_fusions_hg19_hs37d5_GRCh37_v2.4.0.tsv.gz", - "known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "known_fusions_mm10_GRCm38_v2.4.0.tsv.gz", - "known_fusions_mm39_GRCm39_v2.4.0.tsv.gz", - "protein_domains_hg19_hs37d5_GRCh37_v2.4.0.gff3", - "protein_domains_hg38_GRCh38_v2.4.0.gff3", - "protein_domains_mm10_GRCm38_v2.4.0.gff3", - "protein_domains_mm39_GRCm39_v2.4.0.gff3", - "versions.yml" - ], - [ - "versions.yml:md5,98c69df5eaea5caf0b4af7b8d7af4893" - ] + { + "0": [ + "blacklist_hg38_GRCh38_v2.4.0.tsv.gz:md5,e3098a4be51aece78aede64b55c39318" + ], + "1": [ + "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,7bd504feefb33fcfc9be0517439a423c" + ], + "2": [ + "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,43c387a784ebeed71b4147076cebf978" + ], + "3": [ + "known_fusions_hg38_GRCh38_v2.4.0.tsv.gz:md5,4f00f81ccb5f4db283f1a22b8b0da67c" + ], + "4": [ + "versions.yml:md5,98c69df5eaea5caf0b4af7b8d7af4893" + ], + "blacklist": [ + "blacklist_hg38_GRCh38_v2.4.0.tsv.gz:md5,e3098a4be51aece78aede64b55c39318" + ], + "cytobands": [ + "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,7bd504feefb33fcfc9be0517439a423c" + ], + "known_fusions": [ + "known_fusions_hg38_GRCh38_v2.4.0.tsv.gz:md5,4f00f81ccb5f4db283f1a22b8b0da67c" + ], + "protein_domains": [ + "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,43c387a784ebeed71b4147076cebf978" + ], + "versions": [ + "versions.yml:md5,98c69df5eaea5caf0b4af7b8d7af4893" + ] + } ], "meta": { - "nf-test": "0.8.4", + "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-22T17:00:38.086459" + "timestamp": "2024-10-08T11:12:17.010496" } } \ No newline at end of file diff --git a/modules/nf-core/arriba/download/tests/tags.yml b/modules/nf-core/arriba/download/tests/tags.yml new file mode 100644 index 000000000..f510bbf1a --- /dev/null +++ b/modules/nf-core/arriba/download/tests/tags.yml @@ -0,0 +1,2 @@ +arriba/download: + - "modules/nf-core/arriba/download/**" diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml deleted file mode 100644 index c7794856d..000000000 --- a/modules/nf-core/gunzip/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - conda-forge::grep=3.11 - - conda-forge::sed=4.8 - - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf deleted file mode 100644 index 5e67e3b9b..000000000 --- a/modules/nf-core/gunzip/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -process GUNZIP { - tag "$archive" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : - 'nf-core/ubuntu:22.04' }" - - input: - tuple val(meta), path(archive) - - output: - tuple val(meta), path("$gunzip"), emit: gunzip - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" - """ - # Not calling gunzip itself because it creates files - # with the original group ownership rather than the - # default one for that user / the work directory - gzip \\ - -cd \\ - $args \\ - $archive \\ - > $gunzip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" - """ - touch $gunzip - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml deleted file mode 100644 index 9066c0353..000000000 --- a/modules/nf-core/gunzip/meta.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: gunzip -description: Compresses and decompresses files. -keywords: - - gunzip - - compression - - decompression -tools: - - gunzip: - description: | - gzip is a file format and a software application used for file compression and decompression. - documentation: https://www.gnu.org/software/gzip/manual/gzip.html - licence: ["GPL-3.0-or-later"] - identifier: "" -input: - - - meta: - type: map - description: | - Optional groovy Map containing meta information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be compressed/uncompressed - pattern: "*.*" -output: - - gunzip: - - meta: - type: file - description: Compressed/uncompressed file - pattern: "*.*" - - $gunzip: - type: file - description: Compressed/uncompressed file - pattern: "*.*" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@joseespinosa" - - "@drpatelh" - - "@jfy133" -maintainers: - - "@joseespinosa" - - "@drpatelh" - - "@jfy133" - - "@gallvp" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test deleted file mode 100644 index 776211adf..000000000 --- a/modules/nf-core/gunzip/tests/main.nf.test +++ /dev/null @@ -1,121 +0,0 @@ -nextflow_process { - - name "Test Process GUNZIP" - script "../main.nf" - process "GUNZIP" - tag "gunzip" - tag "modules_nfcore" - tag "modules" - - test("Should run without failures") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("Should run without failures - prefix") { - - config './nextflow.config' - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [ id: 'test' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("Should run without failures - stub") { - - options '-stub' - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("Should run without failures - prefix - stub") { - - options '-stub' - config './nextflow.config' - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [ id: 'test' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap deleted file mode 100644 index 069967e76..000000000 --- a/modules/nf-core/gunzip/tests/main.nf.test.snap +++ /dev/null @@ -1,134 +0,0 @@ -{ - "Should run without failures - prefix - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:35:10.861293" - }, - "Should run without failures - stub": { - "content": [ - { - "0": [ - [ - [ - - ], - "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - [ - - ], - "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:35:05.857145" - }, - "Should run without failures": { - "content": [ - { - "0": [ - [ - [ - - ], - "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - [ - - ], - "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2023-10-17T15:35:37.690477896" - }, - "Should run without failures - prefix": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:33:32.921739" - } -} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/nextflow.config b/modules/nf-core/gunzip/tests/nextflow.config deleted file mode 100644 index dec776425..000000000 --- a/modules/nf-core/gunzip/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GUNZIP { - ext.prefix = { "${meta.id}.xyz" } - } -} diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml deleted file mode 100644 index fd3f69154..000000000 --- a/modules/nf-core/gunzip/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gunzip: - - modules/nf-core/gunzip/** diff --git a/modules/nf-core/salmon/quant/environment.yml b/modules/nf-core/salmon/quant/environment.yml index 471164faa..b3f75777e 100644 --- a/modules/nf-core/salmon/quant/environment.yml +++ b/modules/nf-core/salmon/quant/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::salmon=1.10.1 + - bioconda::salmon=1.10.3 diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index 6d624e751..f1e3b5cda 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -4,8 +4,8 @@ process SALMON_QUANT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/salmon:1.10.1--h7e5ed60_0' : - 'biocontainers/salmon:1.10.1--h7e5ed60_0' }" + 'https://depot.galaxyproject.org/singularity/salmon:1.10.3--h6dccd9a_2' : + 'biocontainers/salmon:1.10.3--h6dccd9a_2' }" input: tuple val(meta), path(reads) @@ -28,7 +28,7 @@ process SALMON_QUANT { def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def reference = "--index $index" + def reference = "--index $index" def reads1 = [], reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test.snap b/modules/nf-core/salmon/quant/tests/main.nf.test.snap index 547ce2de1..ea22a80ce 100644 --- a/modules/nf-core/salmon/quant/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/quant/tests/main.nf.test.snap @@ -2,7 +2,7 @@ "sarscov2 - single_end": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -15,15 +15,15 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:51:22.424672" + "timestamp": "2024-10-18T10:01:16.989080539" }, "sarscov2 - single_end stub": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -36,15 +36,15 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:51:32.292277" + "timestamp": "2024-10-18T10:01:29.340996235" }, "sarscov2 - single_end lib type A": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -57,15 +57,15 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:51:42.656382" + "timestamp": "2024-10-18T10:01:43.056167576" }, "sarscov2 - pair_end multiple": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -78,15 +78,15 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:52:33.03647" + "timestamp": "2024-10-18T10:03:05.500792631" }, "sarscov2 - pair_end multiple stub": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -99,15 +99,15 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:52:43.388379" + "timestamp": "2024-10-18T10:03:26.428959203" }, "sarscov2 - single_end lib type A stub": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -120,15 +120,15 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:51:52.612664" + "timestamp": "2024-10-18T10:02:03.420850208" }, "sarscov2 - pair_end": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -141,15 +141,15 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:52:05.577881" + "timestamp": "2024-10-18T10:02:16.130074696" }, "sarscov2 - pair_end stub": { "content": [ [ - "versions.yml:md5,80eb3d2ad36960c7e9263f81ede9d263" + "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" ], [ [ @@ -162,9 +162,9 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-14T09:52:15.286461" + "timestamp": "2024-10-18T10:02:39.470004547" } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 3e4e4b4d1..98535a017 100644 --- a/nextflow.config +++ b/nextflow.config @@ -11,7 +11,7 @@ params { // Input options input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - build_references = false + references_only = false cosmic_username = null cosmic_passwd = null qiagen = false @@ -75,6 +75,7 @@ params { rrna_intervals = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}.interval_list" gencode_ref = "${params.genomes_base}/gencode" arriba_ref_blacklist = "${params.genomes_base}/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz" + arriba_ref_cytobands = "${params.genomes_base}/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv" arriba_ref_known_fusions = "${params.genomes_base}/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz" arriba_ref_protein_domains = "${params.genomes_base}/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3" fusioncatcher_ref = "${params.genomes_base}/fusioncatcher/human_v${params.genome_gencode_version}" diff --git a/nextflow_schema.json b/nextflow_schema.json index 480aa0917..159155108 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -79,8 +79,7 @@ "genome_gencode_version": { "type": "integer", "fa_icon": "far fa-file-code", - "description": "ensembl version", - "default": 102 + "description": "gencode version" }, "starfusion_build": { "type": "boolean", @@ -108,6 +107,11 @@ "fa_icon": "far fa-file-code", "description": "Path to arriba reference blacklist" }, + "arriba_ref_cytobands": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Path to arriba reference cytobands" + }, "arriba_ref_known_fusions": { "type": "string", "fa_icon": "far fa-file-code", @@ -307,9 +311,9 @@ "fa_icon": "fas fa-dna", "description": "Reference genome related files and options required for the workflow.", "properties": { - "genome": { - "type": "string", - "description": "Name of iGenomes reference.", + "references_only": { + "type": "boolean", + "description": "Skip running the analysis, only builds the references", "fa_icon": "fas fa-book" }, "fasta": { @@ -328,6 +332,11 @@ "description": "Path to FASTA genome index file.", "fa_icon": "far fa-file-code" }, + "genome": { + "type": "string", + "description": "Name of iGenomes reference.", + "fa_icon": "fas fa-book" + }, "gtf": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 1d45e74ca..0c6c99164 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -4,7 +4,6 @@ ======================================================================================== */ -include { ARRIBA_DOWNLOAD } from '../../modules/local/arriba/download/main' include { GENCODE_DOWNLOAD } from '../../modules/local/gencode_download/main' include { FUSIONCATCHER_DOWNLOAD } from '../../modules/local/fusioncatcher/download/main' include { FUSIONCATCHER_BUILD } from '../../modules/local/fusioncatcher/build/main' @@ -14,13 +13,14 @@ include { STARFUSION_BUILD } from '../../modules/local/starfusion include { STARFUSION_DOWNLOAD } from '../../modules/local/starfusion/download/main' include { GTF_TO_REFFLAT } from '../../modules/local/uscs/custom_gtftogenepred/main' include { RRNA_TRANSCRIPTS } from '../../modules/local/rrnatranscripts/main' -include { CONVERT2BED } from '../../modules/local/convert2bed/main' +include { GET_RRNA_TRANSCRIPTS } from '../../modules/local/get_rrna_transcripts' +// include { CONVERT2BED } from '../../modules/local/convert2bed/main' /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS ======================================================================================== */ - +include { ARRIBA_DOWNLOAD } from '../../modules/nf-core/arriba/download/main' include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate/main' include { GATK4_CREATESEQUENCEDICTIONARY } from '../../modules/nf-core/gatk4/createsequencedictionary/main' @@ -73,9 +73,8 @@ workflow BUILD_REFERENCES { if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty()){ GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) - RRNA_TRANSCRIPTS(ch_gtf) - CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) - GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) + GET_RRNA_TRANSCRIPTS(ch_gtf) + GATK4_BEDTOINTERVALLIST(GET_RRNA_TRANSCRIPTS.out.bed.map { it -> [ [id:it.name], it ] }, GATK4_CREATESEQUENCEDICTIONARY.out.dict ) ch_rrna_interval = GATK4_BEDTOINTERVALLIST.out.interval_list } else { ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } @@ -106,31 +105,35 @@ workflow BUILD_REFERENCES { ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } } -// if ((params.arriba || params.all) && -// (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || -// !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || -// !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { -// ARRIBA_DOWNLOAD() -// ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } -// ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } -// ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } -// } else { -// // TODO need to update the module to emit blacklist,knownfusions etc -// } - - - // if ((params.fusioncatcher || params.all) && - // (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || - // !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { - // if (params.download_refs) { - // FUSIONCATCHER_DOWNLOAD(params.genome_gencode_version) - // ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference} - // else { - // FUSIONCATCHER_BUILD(params.genome_gencode_version) - // ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference} - // } else { - // ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } - // } + if ((params.arriba || params.all) && + (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || + !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || + !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { + ARRIBA_DOWNLOAD(genome) + ch_arriba_ref_blacklist = ARRIBA_DOWNLOAD.out.blacklist + ch_arriba_ref_cytobands = ARRIBA_DOWNLOAD.out.cytobands + ch_arriba_ref_known_fusions = ARRIBA_DOWNLOAD.out.known_fusions + ch_arriba_ref_protein_domains = ARRIBA_DOWNLOAD.out.protein_domains + } else { + ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } + ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { that -> [[id:that.Name], that] } + ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } + ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } + } + + + if ((params.fusioncatcher || params.all) && + (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || + !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { + if (params.download_refs) { + FUSIONCATCHER_DOWNLOAD(params.genome_gencode_version) + ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference} + else { + FUSIONCATCHER_BUILD(params.genome_gencode_version) + ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference} + } else { + ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } + } if ((params.starfusion || params.all) && @@ -144,14 +147,14 @@ workflow BUILD_REFERENCES { ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] }} - // if ((params.fusionreport || params.all) && - // (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || - // !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { - // if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } - // ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ).out.reference - // } else { - // ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } - // } + if ((params.fusionreport || params.all) && + (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || + !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { + if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } + ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ).out.reference + } else { + ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } + } emit: ch_fasta @@ -160,16 +163,17 @@ workflow BUILD_REFERENCES { ch_hgnc_ref ch_hgnc_date - // ch_rrna_interval - // ch_refflat - // ch_salmon_index - // ch_starindex_ref - // ch_arriba_ref_blacklist - // ch_arriba_ref_known_fusions - // ch_arriba_ref_protein_domains - // ch_fusioncatcher_ref - // ch_starfusion_ref - // ch_fusionreport_ref + ch_rrna_interval + ch_refflat + ch_salmon_index + ch_starindex_ref + ch_arriba_ref_blacklist + ch_arriba_ref_cytobands + ch_arriba_ref_known_fusions + ch_arriba_ref_protein_domains + ch_fusioncatcher_ref + ch_starfusion_ref + ch_fusionreport_ref versions = ch_versions } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 8f7f8ae8a..5e34db974 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -4,41 +4,21 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT LOCAL MODULES/SUBWORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules -// include { BUILD_REFERENCES } from '../subworkflows/local/build_references' -include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' -include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' -include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' -include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' -include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow' -include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' -include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' -include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' -include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT NF-CORE MODULES/SUBWORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// MODULE: Installed directly from nf-core/modules -// -include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' +// include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' +// include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' +// include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' +// include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' +// include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow' +// include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' +// include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' +// include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' +// include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' + +include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +// include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -54,7 +34,7 @@ workflow RNAFUSION { ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + // ch_multiqc_files = Channel.empty() // // Create references if necessary @@ -268,7 +248,7 @@ workflow RNAFUSION { // QC_WORKFLOW ( // ch_reads_all, // STARFUSION_WORKFLOW.out.ch_bam_sorted, - // ch_chrgtf, + // ch_gtf, // ch_refflat, // ch_fasta, // ch_fai, From d18b303eb7a1644405fe877bc7a2a80f88197f19 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:45:10 +0100 Subject: [PATCH 079/887] update modules, remove chrgtf, adapt with meta/no meta --- .github/workflows/awsfulltest.yml | 18 +- .github/workflows/awstest.yml | 26 -- .github/workflows/ci.yml | 9 +- AAA_BBB.html | 0 README.md | 6 +- conf/modules.config | 6 +- docs/usage.md | 16 +- modules.json | 146 +++------ modules/local/fusionreport/detect/main.nf | 12 +- modules/nf-core/cat/fastq/environment.yml | 2 +- modules/nf-core/cat/fastq/main.nf | 4 +- .../nf-core/cat/fastq/tests/main.nf.test.snap | 100 +++--- .../collectinsertsizemetrics/environment.yml | 2 +- .../picard/collectinsertsizemetrics/main.nf | 4 +- .../tests/main.nf.test.snap | 14 +- .../collectrnaseqmetrics/environment.yml | 2 +- .../picard/collectrnaseqmetrics/main.nf | 4 +- .../collectrnaseqmetrics/tests/main.nf.test | 81 +++++ .../tests/main.nf.test.snap | 60 ++++ .../tests/nextflow.config | 13 + .../picard/collectwgsmetrics/environment.yml | 4 +- .../nf-core/picard/collectwgsmetrics/main.nf | 4 +- .../collectwgsmetrics/tests/main.nf.test.snap | 12 +- modules/nf-core/salmon/index/environment.yml | 2 +- modules/nf-core/salmon/index/main.nf | 4 +- .../salmon/index/tests/main.nf.test.snap | 16 +- modules/nf-core/salmon/quant/main.nf | 3 +- modules/nf-core/samtools/sort/main.nf | 10 +- .../nf-core/samtools/sort/tests/main.nf.test | 64 ++++ .../samtools/sort/tests/main.nf.test.snap | 99 +++++- modules/nf-core/samtools/view/environment.yml | 2 + modules/nf-core/samtools/view/main.nf | 4 +- modules/nf-core/star/align/environment.yml | 6 +- modules/nf-core/star/align/main.nf | 4 +- modules/nf-core/star/align/meta.yml | 111 ++++--- modules/nf-core/star/align/tests/main.nf.test | 36 +- .../star/align/tests/main.nf.test.snap | 190 +++-------- .../star/genomegenerate/environment.yml | 6 +- modules/nf-core/star/genomegenerate/main.nf | 4 +- .../genomegenerate/tests/main.nf.test.snap | 28 +- .../stringtie/stringtie/environment.yml | 2 +- modules/nf-core/stringtie/stringtie/main.nf | 4 +- .../stringtie/tests/main.nf.test.snap | 64 ++-- subworkflows/local/arriba_workflow.nf | 3 +- subworkflows/local/build_references.nf | 46 ++- subworkflows/local/fusionreport_workflow.nf | 2 +- test.fusionreport.tsv | 0 test.fusionreport_filtered.tsv | 0 test.fusions.csv | 0 test.fusions.json | 0 test_fusionreport_index.html | 0 tests/main.nf.test | 22 +- workflows/rnafusion.nf | 307 ++++++------------ 53 files changed, 785 insertions(+), 799 deletions(-) create mode 100644 AAA_BBB.html create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config create mode 100644 test.fusionreport.tsv create mode 100644 test.fusionreport_filtered.tsv create mode 100644 test.fusions.csv create mode 100644 test.fusions.json create mode 100644 test_fusionreport_index.html diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index fe30ca560..d1492d8b8 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -46,7 +46,6 @@ jobs: "cosmic_username": "${{ secrets.cosmic_username }}", "cosmic_passwd": "${{ secrets.cosmic_passwd }}", "all": true, - "build_references": true } profiles: test_full,aws_tower - uses: actions/upload-artifact@v4 @@ -55,19 +54,4 @@ jobs: path: | seqera_platform_action_*.log seqera_platform_action_*.json - - name: Launch run workflow via tower - uses: seqeralabs/action-tower-launch@v2 - with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/rnafusion/work-${{ github.sha }} - parameters: | - { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-${{ github.sha }}", - "genomes_base": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-${{ github.sha }}/references", - "cosmic_username": "${{ secrets.cosmic_username }}", - "cosmic_passwd": "${{ secrets.cosmic_passwd }}", - "all": true, - } - profiles: test_full,aws_tower + diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 8f6bfb014..78bdb317c 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -26,8 +26,6 @@ jobs: "cosmic_username": "${{ secrets.cosmic_username }}", "cosmic_passwd": "${{ secrets.cosmic_passwd }}", "all": true, - "stub": true, - "build_references": true } profiles: test,aws_tower - uses: actions/upload-artifact@v4 @@ -36,27 +34,3 @@ jobs: path: | tower_action_*.log tower_action_*.json - - - name: Launch workflow via tower - uses: seqeralabs/action-tower-launch@v2 - with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/rnafusion/work-${{ github.sha }} - parameters: | - { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-${{ github.sha }}", - "genomes_base": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-${{ github.sha }}/references", - "cosmic_username": "${{ secrets.cosmic_username }}", - "cosmic_passwd": "${{ secrets.cosmic_passwd }}", - "all": true, - "stub": true - } - profiles: test,aws_tower - - uses: actions/upload-artifact@v4 - with: - name: Seqera Platform debug log file - path: | - seqera_platform_action_*.log - seqera_platform_action_*.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e1028ed8e..2a87529d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,16 +83,11 @@ jobs: - name: Clean up Disk space uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: "Run pipeline build with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" + - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} \ - -stub --build_references \ + -stub \ --outdir /home/runner/work/rnafusion/rnafusion/results --all \ --genomes_base /home/runner/work/rnafusion/rnafusion/results/references \ --cosmic_username ${{ secrets.COSMIC_USERNAME }} --cosmic_passwd ${{ secrets.COSMIC_PASSWD }} - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" - run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} -stub \ - --outdir /home/runner/work/rnafusion/rnafusion/results --all ${{ matrix.trim_parameters }} \ - --genomes_base /home/runner/work/rnafusion/rnafusion/results/references diff --git a/AAA_BBB.html b/AAA_BBB.html new file mode 100644 index 000000000..e69de29bb diff --git a/README.md b/README.md index 41e2bc96a..a52100916 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,9 @@ In rnafusion the full-sized test includes reference building and fusion detectio ### Build references -`--build_references` triggers a parallel workflow to build references, which is a prerequisite to running the pipeline: +`--references_only` triggers a workflow to ONLY build references, otherwise the references are built with the analysis run: -1. Download ensembl fasta and gtf files +1. Download gencode fasta and gtf files 2. Create [STAR](https://github.com/alexdobin/STAR) index 3. Download [Arriba](https://github.com/suhrig/arriba) references 4. Download [FusionCatcher](https://github.com/ndaniel/fusioncatcher) references @@ -78,7 +78,7 @@ First, build the references: nextflow run nf-core/rnafusion \ -profile test, \ --outdir \ - --build_references \ + --references_only \ -stub ``` diff --git a/conf/modules.config b/conf/modules.config index 123e02b08..b07f53335 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -46,7 +46,7 @@ process { } withName: 'CAT_FASTQ' { - ext.when = { !params.build_references } + ext.when = { !params.references_only } } withName: 'GENCODE_DOWNLOAD' { @@ -63,7 +63,7 @@ process { withName: 'FASTQC' { ext.args = '--quiet' - ext.when = { !params.skip_qc && !params.build_references } + ext.when = { !params.skip_qc && !params.references_only } publishDir = [ path: { "${params.outdir}/fastqc" }, mode: params.publish_dir_mode, @@ -367,7 +367,7 @@ process { } withName: 'TRIM_WORKFLOW:*' { - ext.when = { !params.build_references } + ext.when = { !params.references_only } } withName: 'VCF_COLLECT' { diff --git a/docs/usage.md b/docs/usage.md index b7bc6794c..86ede4ddc 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,7 +10,7 @@ The pipeline is divided into two parts: 1. Download and build references -- specified with `--build_references` parameter +- specified with `--references_only` parameter - required only once before running the pipeline - **Important**: has to be run with each new release @@ -32,7 +32,7 @@ The rnafusion pipeline needs references for the fusion detection tools, so downl ```bash nextflow run nf-core/rnafusion \ -profile \ - --build_references --all \ + --references_only --all \ --cosmic_username --cosmic_passwd \ --genomes_base \ --outdir @@ -43,7 +43,7 @@ References for each tools can also be downloaded separately with: ```bash nextflow run nf-core/rnafusion \ -profile \ - --build_references -- -- ... \ + --references_only -- -- ... \ --cosmic_username --cosmic_passwd \ --genomes_base \ --outdir @@ -62,7 +62,7 @@ Use credentials from QIAGEN and add `--qiagen` ```bash nextflow run nf-core/rnafusion \ -profile \ - --build_references -- -- ... \ + --references_only -- -- ... \ --cosmic_username --cosmic_passwd \ --genomes_base \ --outdir --qiagen @@ -79,7 +79,7 @@ If process `FUSIONREPORT_DOWNLOAD` times out, it could be due to network restric ```bash nextflow run nf-core/rnafusion \ -profile \ - --build_references \ + --references_only \ --cosmic_username --cosmic_passwd \ --fusionreport \ --genomes_base \ @@ -91,7 +91,7 @@ Where the custom configuration could look like (adaptation to local machine nece ```text process { - withName: 'NFCORE_RNAFUSION:BUILD_REFERENCES:FUSIONREPORT_DOWNLOAD' { + withName: 'NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONREPORT_DOWNLOAD' { memory = '8.GB' cpus = 4 } @@ -158,7 +158,7 @@ nextflow run nf-core/rnafusion \ > **IMPORTANT: Either `--all` or `--`** is necessary to run detection tools -`--genomes_base` should be the path to the directory containing the folder `references/` that was built with `--build_references`. +`--genomes_base` should be the path to the directory containing the folder `references/` that was built with `--references_only`. Note that the pipeline will create the following files in your working directory: @@ -393,7 +393,7 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `test` - A profile with a complete configuration for automated testing - Includes links to test data so needs no other parameters - - Needs to run in two steps: with `--build_references` first and then without `--build_references` to run the analysis + - Needs to run in two steps: with `--references_only` first and then without `--references_only` to run the analysis - !!!! Run with `-stub` as all references need to be downloaded otherwise !!!! ### `-resume` diff --git a/modules.json b/modules.json index 7e5065489..358910d4a 100644 --- a/modules.json +++ b/modules.json @@ -8,198 +8,142 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", "git_sha": "7741dfc830e77a8ead2fcb50b01461ee09d0cdfe", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/download": { "branch": "master", "git_sha": "467c202a876d26af544fa8c4b22a050a535462a7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedops/convert2bed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "a1abf90966a2a4016d3c3e41e228bfcbd4811ccc", + "installed_by": ["modules"] }, "fastp": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gffread": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": ["modules"] }, "picard/collectrnaseqmetrics": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": ["modules"] }, "rrnatranscripts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/index": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", + "installed_by": ["modules"] }, "star/align": { "branch": "master", - "git_sha": "30a97c755895b7dfe40a730b0695c554a10f1cdd", - "installed_by": [ - "modules" - ] + "git_sha": "a5ad53288c79fa52c5ae708c317e09ec2dd149ab", + "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "a5ad53288c79fa52c5ae708c317e09ec2dd149ab", + "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": ["modules"] }, "ucsc/gtftogenepred": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -208,26 +152,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 8024d8f8e..f2557bf01 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -8,17 +8,17 @@ process FUSIONREPORT { input: tuple val(meta), path(reads), path(arriba_fusions), path(starfusion_fusions), path(fusioncatcher_fusions) - tuple val(meta2), path(fusionreport_ref) + path(fusionreport_ref) val(tools_cutoff) output: - path "versions.yml" , emit: versions tuple val(meta), path("*fusionreport.tsv") , emit: fusion_list tuple val(meta), path("*fusionreport_filtered.tsv") , emit: fusion_list_filtered - tuple val(meta), path("*index.html") , emit: report + tuple val(meta), path("*index.html") , emit: report tuple val(meta), path("*_*.html") , optional:true, emit: html tuple val(meta), path("*.csv") , optional:true, emit: csv tuple val(meta), path("*.json") , optional:true, emit: json + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -58,7 +58,11 @@ process FUSIONREPORT { cat <<-END_VERSIONS > versions.yml "${task.process}": - fusion_report: \$(fusion_report --version | sed 's/fusion-report //') + fusion_report: sth END_VERSIONS """ } + // cat <<-END_VERSIONS > versions.yml + // "${task.process}": + // fusion_report: \$(fusion_report --version 2>&1 | sed 's/fusion-report //') + // END_VERSIONS diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml index c7eb9bd1c..71e04c3d7 100644 --- a/modules/nf-core/cat/fastq/environment.yml +++ b/modules/nf-core/cat/fastq/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - conda-forge::coreutils=8.30 + - conda-forge::coreutils=9.5 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index b68e5f911..4364a389b 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -4,8 +4,8 @@ process CAT_FASTQ { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c2/c262fc09eca59edb5a724080eeceb00fb06396f510aefb229c2d2c6897e63975/data' : + 'community.wave.seqera.io/library/coreutils:9.5--ae99c88a9b28c264' }" input: tuple val(meta), path(reads, stageAs: "input*/*") diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap index aec119a94..f8689a1ce 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -24,15 +24,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-01-17T17:30:39.816981" + "timestamp": "2024-10-19T20:02:07.519211144" }, "test_cat_fastq_single_end_same_name": { "content": [ @@ -47,7 +47,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -59,15 +59,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-01-17T17:32:35.229332" + "timestamp": "2024-10-19T20:02:31.618628921" }, "test_cat_fastq_single_end_single_file": { "content": [ @@ -82,7 +82,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -94,15 +94,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-01-17T17:34:00.058829" + "timestamp": "2024-10-19T20:02:57.904149581" }, "test_cat_fastq_paired_end_same_name": { "content": [ @@ -120,7 +120,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -135,15 +135,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-01-17T17:33:33.031555" + "timestamp": "2024-10-19T20:02:44.577183829" }, "test_cat_fastq_single_end - stub": { "content": [ @@ -158,7 +158,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -170,15 +170,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-05T12:07:28.244999" + "timestamp": "2024-10-19T20:03:10.603734777" }, "test_cat_fastq_paired_end_same_name - stub": { "content": [ @@ -196,7 +196,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -211,15 +211,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-05T12:07:57.070911" + "timestamp": "2024-10-19T20:03:46.041808828" }, "test_cat_fastq_single_end_same_name - stub": { "content": [ @@ -234,7 +234,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -246,15 +246,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-05T12:07:46.796254" + "timestamp": "2024-10-19T20:03:34.13865402" }, "test_cat_fastq_paired_end": { "content": [ @@ -272,7 +272,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -287,15 +287,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-01-17T17:32:02.270935" + "timestamp": "2024-10-19T20:02:19.64383573" }, "test_cat_fastq_paired_end - stub": { "content": [ @@ -313,7 +313,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -328,15 +328,15 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-05T12:07:37.807553" + "timestamp": "2024-10-19T20:03:22.597246066" }, "test_cat_fastq_single_end_single_file - stub": { "content": [ @@ -351,7 +351,7 @@ ] ], "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ], "reads": [ [ @@ -363,14 +363,14 @@ ] ], "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-05T12:14:51.861264" + "timestamp": "2024-10-19T20:03:58.44849001" } } \ No newline at end of file diff --git a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml index ff4a85edb..1d715d564 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml +++ b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::picard=3.2.0 + - bioconda::picard=3.3.0 diff --git a/modules/nf-core/picard/collectinsertsizemetrics/main.nf b/modules/nf-core/picard/collectinsertsizemetrics/main.nf index 1a49a7f0a..c3014d806 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/main.nf +++ b/modules/nf-core/picard/collectinsertsizemetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTINSERTSIZEMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : - 'biocontainers/picard:3.2.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' : + 'biocontainers/picard:3.3.0--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap index bcb5b4557..cbe9329d0 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap +++ b/modules/nf-core/picard/collectinsertsizemetrics/tests/main.nf.test.snap @@ -9,14 +9,14 @@ ], "test.pdf", [ - "versions.yml:md5,4423bfe2194f61d919c382d2225b0835" + "versions.yml:md5,38d39e9882afe7ac015213c286745056" ] ], "meta": { - "nf-test": "0.8.4", + "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-30T12:23:29.392944" + "timestamp": "2024-10-18T10:55:45.769771444" }, "test-picard-collectinsertsizemetrics-stub": { "content": [ @@ -40,7 +40,7 @@ ] ], "2": [ - "versions.yml:md5,4423bfe2194f61d919c382d2225b0835" + "versions.yml:md5,38d39e9882afe7ac015213c286745056" ], "histogram": [ [ @@ -61,14 +61,14 @@ ] ], "versions": [ - "versions.yml:md5,4423bfe2194f61d919c382d2225b0835" + "versions.yml:md5,38d39e9882afe7ac015213c286745056" ] } ], "meta": { - "nf-test": "0.8.4", + "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-30T12:20:03.841884" + "timestamp": "2024-10-18T10:56:09.914953495" } } \ No newline at end of file diff --git a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml index ff4a85edb..1d715d564 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml +++ b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::picard=3.2.0 + - bioconda::picard=3.3.0 diff --git a/modules/nf-core/picard/collectrnaseqmetrics/main.nf b/modules/nf-core/picard/collectrnaseqmetrics/main.nf index 0c8f2cfa2..eb80fdc70 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/main.nf +++ b/modules/nf-core/picard/collectrnaseqmetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTRNASEQMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : - 'biocontainers/picard:3.2.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' : + 'biocontainers/picard:3.3.0--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test new file mode 100644 index 000000000..9ab185521 --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test @@ -0,0 +1,81 @@ +nextflow_process { + + name "Test Process PICARD_COLLECTRNASEQMETRICS" + script "../main.nf" + process "PICARD_COLLECTRNASEQMETRICS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collectrnaseqmetrics" + tag "ucsc/gtftogenepred" + + setup { + run("UCSC_GTFTOGENEPRED") { + script "../../../ucsc/gtftogenepred/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + test("sarscov2 - fasta - gtf") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false, strandedness:'forward' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = UCSC_GTFTOGENEPRED.out.refflat.map{ it[1] } + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert file(process.out.metrics[0][1]).text.contains('CollectRnaSeqMetrics') }, + { assert snapshot( + process.out.versions, + process.out.pdf + ).match() } + ) + } + } + + test("sarscov2 - fasta - gtf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false, strandedness:'forward' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = UCSC_GTFTOGENEPRED.out.refflat.map{ it[1] } + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap new file mode 100644 index 000000000..ad6503afd --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap @@ -0,0 +1,60 @@ +{ + "sarscov2 - fasta - gtf": { + "content": [ + [ + "versions.yml:md5,8d0867f89947c081711de09338138c2e" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T16:10:39.199344417" + }, + "sarscov2 - fasta - gtf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false, + "strandedness": "forward" + }, + "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,8d0867f89947c081711de09338138c2e" + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false, + "strandedness": "forward" + }, + "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "pdf": [ + + ], + "versions": [ + "versions.yml:md5,8d0867f89947c081711de09338138c2e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T16:10:57.248132065" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config b/modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config new file mode 100644 index 000000000..bc82e10c1 --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config @@ -0,0 +1,13 @@ +process { + withName:UCSC_GTFTOGENEPRED { + ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" + } + withName:PICARD_COLLECTRNASEQMETRICS { + ext.args = { ( meta.strandedness == "forward" || meta.single_end ) ? + "--STRAND_SPECIFICITY FIRST_READ_TRANSCRIPTION_STRAND" : + meta.strandedness == "reverse" ? + "--STRAND_SPECIFICITY SECOND_READ_TRANSCRIPTION_STRAND" : + "--STRAND_SPECIFICITY NONE" + } + } +} diff --git a/modules/nf-core/picard/collectwgsmetrics/environment.yml b/modules/nf-core/picard/collectwgsmetrics/environment.yml index 58d525818..13265842f 100644 --- a/modules/nf-core/picard/collectwgsmetrics/environment.yml +++ b/modules/nf-core/picard/collectwgsmetrics/environment.yml @@ -2,5 +2,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::picard=3.2.0 - - r::r-base + - bioconda::picard=3.3.0 + - conda-forge::r-base=4.4.1 diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 6002a7ca9..39cf7d2b7 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTWGSMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : - 'biocontainers/picard:3.2.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' : + 'biocontainers/picard:3.3.0--hdfd78af_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap index f188382b0..1958fcdeb 100644 --- a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap +++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap @@ -3,26 +3,26 @@ "content": [ true, [ - "versions.yml:md5,06b5898fb06823b736c90e1dcebe75fe" + "versions.yml:md5,9927db69fdd55176be5cdbd427d000c2" ] ], "meta": { - "nf-test": "0.8.4", + "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-23T11:02:46.301176" + "timestamp": "2024-10-18T10:15:18.13771243" }, "test-picard-collectwgsmetrics": { "content": [ true, [ - "versions.yml:md5,06b5898fb06823b736c90e1dcebe75fe" + "versions.yml:md5,9927db69fdd55176be5cdbd427d000c2" ] ], "meta": { - "nf-test": "0.8.4", + "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-23T11:02:25.132069" + "timestamp": "2024-10-18T10:14:57.786056996" } } \ No newline at end of file diff --git a/modules/nf-core/salmon/index/environment.yml b/modules/nf-core/salmon/index/environment.yml index 471164faa..b3f75777e 100644 --- a/modules/nf-core/salmon/index/environment.yml +++ b/modules/nf-core/salmon/index/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::salmon=1.10.1 + - bioconda::salmon=1.10.3 diff --git a/modules/nf-core/salmon/index/main.nf b/modules/nf-core/salmon/index/main.nf index e755d9a34..3d653c0d0 100644 --- a/modules/nf-core/salmon/index/main.nf +++ b/modules/nf-core/salmon/index/main.nf @@ -4,8 +4,8 @@ process SALMON_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/salmon:1.10.1--h7e5ed60_0' : - 'biocontainers/salmon:1.10.1--h7e5ed60_0' }" + 'https://depot.galaxyproject.org/singularity/salmon:1.10.3--h6dccd9a_2' : + 'biocontainers/salmon:1.10.3--h6dccd9a_2' }" input: path genome_fasta diff --git a/modules/nf-core/salmon/index/tests/main.nf.test.snap b/modules/nf-core/salmon/index/tests/main.nf.test.snap index 703e455c5..e5899b511 100644 --- a/modules/nf-core/salmon/index/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/index/tests/main.nf.test.snap @@ -2,25 +2,25 @@ "versions": { "content": [ [ - "versions.yml:md5,563eeafb4577be0b13801d7021c0bf42" + "versions.yml:md5,85337fa0a286ea35073ee5260974e307" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2023-11-22T14:26:33.32036" + "timestamp": "2024-10-18T10:00:47.087293189" }, "versions stub": { "content": [ [ - "versions.yml:md5,563eeafb4577be0b13801d7021c0bf42" + "versions.yml:md5,85337fa0a286ea35073ee5260974e307" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-04-23T09:47:58.828124" + "timestamp": "2024-10-18T10:01:03.89824494" } } \ No newline at end of file diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index f1e3b5cda..e2d273525 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -29,7 +29,8 @@ process SALMON_QUANT { prefix = task.ext.prefix ?: "${meta.id}" def reference = "--index $index" - def reads1 = [], reads2 = [] + def reads1 = [] + def reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" if (alignment_mode) { diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index acfd9252c..caf3c61a8 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -12,11 +12,11 @@ process SAMTOOLS_SORT { tuple val(meta2), path(fasta) output: - tuple val(meta), path("*.bam"), emit: bam, optional: true - tuple val(meta), path("*.cram"), emit: cram, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index c2ea9c72a..b05e6691b 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -39,6 +39,40 @@ nextflow_process { } } + test("multiple bam") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + test("cram") { config "./nextflow_cram.config" @@ -98,6 +132,36 @@ nextflow_process { } } + test("multiple bam - stub") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("cram - stub") { options "-stub" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index 2d6b29004..469891fe3 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -159,6 +159,101 @@ }, "timestamp": "2024-09-16T08:50:19.061912443" }, + "multiple bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:59:55.479443" + }, + "multiple bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:36:13.781404" + }, "bam": { "content": [ [ @@ -185,8 +280,8 @@ ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nextflow": "24.09.0" }, - "timestamp": "2024-09-16T08:49:43.971158333" + "timestamp": "2024-10-08T11:59:46.372244" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index 62054fc97..02cda6e6a 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/htslib - bioconda::htslib=1.21 + # renovate: datasource=conda depName=bioconda/samtools - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 37e05cec8..41fa3d6a0 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/9e/9edc2564215d5cd137a8b25ca8a311600987186d406b092022444adf3c4447f7/data' : + 'community​.wave​.seqera​.io/library/htslib_samtools:1​.21--6cb89bfd40cbaabf' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml index 1debc4c9b..7c57530a3 100644 --- a/modules/nf-core/star/align/environment.yml +++ b/modules/nf-core/star/align/environment.yml @@ -3,7 +3,7 @@ channels: - bioconda dependencies: - - bioconda::htslib=1.18 - - bioconda::samtools=1.18 - - bioconda::star=2.7.10a + - bioconda::htslib=1.20 + - bioconda::samtools=1.20 + - bioconda::star=2.7.11b - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index b5bc9ddf8..417071ba9 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -4,8 +4,8 @@ process STAR_ALIGN { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : - 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b4/b425bc2a95806d878993f9a66dae3ae80ac2dafff4c208c5ae01b7a90a32fa91/data' : + 'community.wave.seqera.io/library/star_samtools_htslib_gawk:10c6e8c834460019' }" input: tuple val(meta), path(reads, stageAs: "input*/*") diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml index d9cba2aa7..5cfe763e3 100644 --- a/modules/nf-core/star/align/meta.yml +++ b/modules/nf-core/star/align/meta.yml @@ -56,27 +56,30 @@ input: output: - log_final: - meta: - type: file - description: STAR final log file - pattern: "*Log.final.out" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*Log.final.out": type: file description: STAR final log file pattern: "*Log.final.out" - log_out: - meta: - type: file - description: STAR lot out file - pattern: "*Log.out" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*Log.out": type: file description: STAR lot out file pattern: "*Log.out" - log_progress: - meta: - type: file - description: STAR log progress file - pattern: "*Log.progress.out" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*Log.progress.out": type: file description: STAR log progress file @@ -88,57 +91,70 @@ output: pattern: "versions.yml" - bam: - meta: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*d.out.bam": type: file description: Output BAM file containing read alignments pattern: "*.{bam}" - bam_sorted: - meta: - type: file - description: Sorted BAM file of read alignments (optional) - pattern: "*sortedByCoord.out.bam" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - ${prefix}.sortedByCoord.out.bam: type: file description: Sorted BAM file of read alignments (optional) pattern: "*sortedByCoord.out.bam" - bam_sorted_aligned: - - meta: {} - - ${prefix}.Aligned.sortedByCoord.out.bam: {} - - bam_transcript: - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.Aligned.sortedByCoord.out.bam: type: file - description: Output BAM file of transcriptome alignment (optional) - pattern: "*toTranscriptome.out.bam" + description: Sorted BAM file of read alignments (optional) + pattern: "*.Aligned.sortedByCoord.out.bam" + - bam_transcript: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*toTranscriptome.out.bam": type: file description: Output BAM file of transcriptome alignment (optional) pattern: "*toTranscriptome.out.bam" - bam_unsorted: - meta: - type: file - description: Unsorted BAM file of read alignments (optional) - pattern: "*Aligned.unsort.out.bam" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*Aligned.unsort.out.bam": type: file description: Unsorted BAM file of read alignments (optional) pattern: "*Aligned.unsort.out.bam" - fastq: - meta: - type: file - description: Unmapped FastQ files (optional) - pattern: "*fastq.gz" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*fastq.gz": type: file description: Unmapped FastQ files (optional) pattern: "*fastq.gz" - tab: - meta: - type: file - description: STAR output tab file(s) (optional) - pattern: "*.tab" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*.tab": type: file description: STAR output tab file(s) (optional) @@ -149,12 +165,9 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*.SJ.out.tab" - "*.SJ.out.tab": - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + type: file + description: STAR output splice junction tab file pattern: "*.SJ.out.tab" - read_per_gene_tab: - meta: @@ -162,18 +175,16 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*.ReadsPerGene.out.tab" - "*.ReadsPerGene.out.tab": + type: file + description: STAR output read per gene tab file + pattern: "*.ReadsPerGene.out.tab" + - junction: + - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*.ReadsPerGene.out.tab" - - junction: - - meta: - type: file - description: STAR chimeric junction output file (optional) - pattern: "*.out.junction" - "*.out.junction": type: file description: STAR chimeric junction output file (optional) @@ -186,25 +197,25 @@ output: e.g. [ id:'test', single_end:false ] pattern: "*.out.sam" - "*.out.sam": + type: file + description: STAR output SAM file(s) (optional) + pattern: "*.out.sam" + - wig: + - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*.out.sam" - - wig: - - meta: - type: file - description: STAR output wiggle format file(s) (optional) - pattern: "*.wig" - "*.wig": type: file description: STAR output wiggle format file(s) (optional) pattern: "*.wig" - bedgraph: - meta: - type: file - description: STAR output bedGraph format file(s) (optional) - pattern: "*.bg" + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - "*.bg": type: file description: STAR output bedGraph format file(s) (optional) diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test index 2d9f72ddc..a62c17db0 100644 --- a/modules/nf-core/star/align/tests/main.nf.test +++ b/modules/nf-core/star/align/tests/main.nf.test @@ -56,13 +56,10 @@ nextflow_process { file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, + bam(process.out.bam[0][1]).getReadsMD5(), + bam(process.out.bam_sorted_aligned[0][1]).getReadsMD5(), process.out.bedgraph, process.out.fastq, - process.out.junction, process.out.read_per_gene_tab, process.out.sam, process.out.spl_junc_tab, @@ -124,13 +121,10 @@ nextflow_process { file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, + bam(process.out.bam[0][1]).getReadsMD5(), + bam(process.out.bam_sorted_aligned[0][1]).getReadsMD5(), process.out.bedgraph, process.out.fastq, - process.out.junction, process.out.read_per_gene_tab, process.out.sam, process.out.spl_junc_tab, @@ -192,13 +186,9 @@ nextflow_process { file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, + bam(process.out.bam[0][1]).getReadsMD5(), process.out.bedgraph, process.out.fastq, - process.out.junction, process.out.read_per_gene_tab, process.out.sam, process.out.spl_junc_tab, @@ -260,13 +250,10 @@ nextflow_process { file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, + file(process.out.junction[0][1]).name, + bam(process.out.bam[0][1]).getReadsMD5(), process.out.bedgraph, process.out.fastq, - process.out.junction, process.out.read_per_gene_tab, process.out.sam, process.out.spl_junc_tab, @@ -330,13 +317,10 @@ nextflow_process { file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, + bam(process.out.bam[0][1]).getReadsMD5(), + bam(process.out.bam_sorted_aligned[0][1]).getReadsMD5(), process.out.bedgraph, process.out.fastq, - process.out.junction, process.out.read_per_gene_tab, process.out.sam, process.out.spl_junc_tab, @@ -606,4 +590,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap index 0da28d37c..b533fb8b4 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -97,7 +97,7 @@ ] ], "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "4": [ [ @@ -307,7 +307,7 @@ ] ], "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "wig": [ [ @@ -322,9 +322,9 @@ ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:39:15.440397" + "timestamp": "2024-10-20T17:09:08.738074176" }, "homo_sapiens - paired_end - arriba - stub": { "content": [ @@ -424,7 +424,7 @@ ] ], "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "4": [ [ @@ -634,7 +634,7 @@ ] ], "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "wig": [ [ @@ -649,33 +649,17 @@ ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:40:15.472109" + "timestamp": "2024-10-20T17:09:36.122131869" }, "homo_sapiens - single_end": { "content": [ "test.Log.final.out", "test.Log.out", "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" - ] - ], - [ - - ], - [ - - ], - [ - - ], + "9f76be49a6607613a64f760101bdddce", + "9f76be49a6607613a64f760101bdddce", [ [ { @@ -696,9 +680,6 @@ ], [ - ], - [ - ], [ [ @@ -722,38 +703,22 @@ ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:23:08.001162" + "timestamp": "2024-10-20T17:01:22.197991909" }, "homo_sapiens - paired_end": { "content": [ "test.Log.final.out", "test.Log.out", "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" - ] - ], - [ - - ], - [ - - ], - [ - - ], + "db9a8324b5163b025bcc0c33e848486", + "db9a8324b5163b025bcc0c33e848486", [ [ { @@ -774,9 +739,6 @@ ], [ - ], - [ - ], [ [ @@ -800,14 +762,14 @@ ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:24:46.295219" + "timestamp": "2024-10-20T17:02:06.988663857" }, "homo_sapiens - paired_end - multiple - stub": { "content": [ @@ -907,7 +869,7 @@ ] ], "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "4": [ [ @@ -1117,7 +1079,7 @@ ] ], "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "wig": [ [ @@ -1132,33 +1094,17 @@ ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:41:07.310866" + "timestamp": "2024-10-20T17:10:12.005468781" }, "homo_sapiens - paired_end - multiple": { "content": [ "test.Log.final.out", "test.Log.out", "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" - ] - ], - [ - - ], - [ - - ], - [ - - ], + "3e54e45f5dc3e9c1f2fc55bc41531a87", + "3e54e45f5dc3e9c1f2fc55bc41531a87", [ [ { @@ -1179,9 +1125,6 @@ ], [ - ], - [ - ], [ [ @@ -1205,14 +1148,14 @@ ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:38:46.605044" + "timestamp": "2024-10-20T17:08:54.877286681" }, "homo_sapiens - paired_end - stub": { "content": [ @@ -1312,7 +1255,7 @@ ] ], "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "4": [ [ @@ -1522,7 +1465,7 @@ ] ], "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "wig": [ [ @@ -1537,24 +1480,17 @@ ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:39:51.595873" + "timestamp": "2024-10-20T17:09:20.911466345" }, "homo_sapiens - paired_end - starfusion": { "content": [ "test.Log.final.out", "test.Log.out", "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.out.bam:md5,bcad07b838f6762fc01eea52b5cd3f84" - ] - ], + "test.Chimeric.out.junction", + "caee9dcda13882d4913456973c25b57a", [ ], @@ -1566,24 +1502,6 @@ ], [ - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,c10ef219f4a30e83711b995bc5e40dba" - ] - ], - [ - - ], - [ - ], [ [ @@ -1607,41 +1525,21 @@ ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:35:43.874508" + "timestamp": "2024-10-20T17:07:25.0639914" }, "homo_sapiens - paired_end - arriba": { "content": [ "test.Log.final.out", "test.Log.out", "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.out.bam:md5,c1b1747f5873f2d17762725636e891d5" - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], + "1a3abe88fb2490589c58497d39921bcc", [ ], @@ -1676,14 +1574,14 @@ ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:28:32.599223" + "timestamp": "2024-10-20T17:04:00.685784211" }, "homo_sapiens - paired_end - starfusion - stub": { "content": [ @@ -1783,7 +1681,7 @@ ] ], "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "4": [ [ @@ -1993,7 +1891,7 @@ ] ], "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" ], "wig": [ [ @@ -2008,8 +1906,8 @@ ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-10-01T11:40:42.29249" + "timestamp": "2024-10-20T17:09:53.173671551" } } \ No newline at end of file diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml index 1debc4c9b..7c57530a3 100644 --- a/modules/nf-core/star/genomegenerate/environment.yml +++ b/modules/nf-core/star/genomegenerate/environment.yml @@ -3,7 +3,7 @@ channels: - bioconda dependencies: - - bioconda::htslib=1.18 - - bioconda::samtools=1.18 - - bioconda::star=2.7.10a + - bioconda::htslib=1.20 + - bioconda::samtools=1.20 + - bioconda::star=2.7.11b - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf index b8855715b..8f0c67e76 100644 --- a/modules/nf-core/star/genomegenerate/main.nf +++ b/modules/nf-core/star/genomegenerate/main.nf @@ -4,8 +4,8 @@ process STAR_GENOMEGENERATE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : - 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b4/b425bc2a95806d878993f9a66dae3ae80ac2dafff4c208c5ae01b7a90a32fa91/data' : + 'community.wave.seqera.io/library/star_samtools_htslib_gawk:10c6e8c834460019' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap index 207f4b4f5..3db256782 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap @@ -3,14 +3,14 @@ "content": [ "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]", [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T14:55:35.478401" + "timestamp": "2024-10-19T20:37:47.410432728" }, "fasta_gtf_stub": { "content": [ @@ -41,7 +41,7 @@ ] ], "1": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" ], "index": [ [ @@ -69,15 +69,15 @@ ] ], "versions": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T14:55:57.247585" + "timestamp": "2024-10-19T20:38:09.165234795" }, "fasta_stub": { "content": [ @@ -101,7 +101,7 @@ ] ], "1": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" ], "index": [ [ @@ -122,27 +122,27 @@ ] ], "versions": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T14:56:07.01742" + "timestamp": "2024-10-19T20:38:19.530862664" }, "fasta": { "content": [ "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]", [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T14:55:45.48784" + "timestamp": "2024-10-19T20:37:58.667436398" } } \ No newline at end of file diff --git a/modules/nf-core/stringtie/stringtie/environment.yml b/modules/nf-core/stringtie/stringtie/environment.yml index 0556de41a..906b7486c 100644 --- a/modules/nf-core/stringtie/stringtie/environment.yml +++ b/modules/nf-core/stringtie/stringtie/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::stringtie=2.2.1 + - bioconda::stringtie=2.2.3 diff --git a/modules/nf-core/stringtie/stringtie/main.nf b/modules/nf-core/stringtie/stringtie/main.nf index 6e25ba27d..4635c8c5b 100644 --- a/modules/nf-core/stringtie/stringtie/main.nf +++ b/modules/nf-core/stringtie/stringtie/main.nf @@ -4,8 +4,8 @@ process STRINGTIE_STRINGTIE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/stringtie:2.2.1--hecb563c_2' : - 'biocontainers/stringtie:2.2.1--hecb563c_2' }" + 'https://depot.galaxyproject.org/singularity/stringtie:2.2.3--h43eeafb_0' : + 'biocontainers/stringtie:2.2.3--h43eeafb_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap b/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap index 124dd4cbe..d4645de3e 100644 --- a/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap +++ b/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap @@ -31,18 +31,18 @@ "id": "test", "strandedness": "forward" }, - "test.transcripts.gtf:md5,f56cf8aba2c4a5673bc7963ba5f12d04" + "test.transcripts.gtf:md5,37154e7bda96544f24506ee902bb561d" ] ], [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:33:44.299962" + "timestamp": "2024-10-18T09:56:50.294157199" }, "sarscov2 [bam] - forward strandedness": { "content": [ @@ -61,18 +61,18 @@ "id": "test", "strandedness": "forward" }, - "test.transcripts.gtf:md5,569137af5be452413086b50653a97203" + "test.transcripts.gtf:md5,6087dfc9700a52d9e4a1ae3fcd1d1dfd" ] ], [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:33:35.177738" + "timestamp": "2024-10-18T09:56:39.4249133" }, "sarscov2 [bam] - forward strandedness - stub": { "content": [ @@ -114,7 +114,7 @@ ] ], "4": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ], "abundance": [ [ @@ -153,15 +153,15 @@ ] ], "versions": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:36:32.885078" + "timestamp": "2024-10-18T09:57:23.008470065" }, "sarscov2 [bam] - forward strandedness + reference annotation - stub": { "content": [ @@ -203,7 +203,7 @@ ] ], "4": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ], "abundance": [ [ @@ -242,15 +242,15 @@ ] ], "versions": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:36:43.325777" + "timestamp": "2024-10-18T09:57:33.622824981" }, "sarscov2 [bam] - reverse strandedness + reference annotation - stub": { "content": [ @@ -292,7 +292,7 @@ ] ], "4": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ], "abundance": [ [ @@ -331,15 +331,15 @@ ] ], "versions": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:37:06.085936" + "timestamp": "2024-10-18T09:57:55.803421433" }, "sarscov2 [bam] - reverse strandedness - stub": { "content": [ @@ -381,7 +381,7 @@ ] ], "4": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ], "abundance": [ [ @@ -420,15 +420,15 @@ ] ], "versions": [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:36:53.837578" + "timestamp": "2024-10-18T09:57:44.825389635" }, "sarscov2 [bam] - reverse strandedness + reference annotation": { "content": [ @@ -462,18 +462,18 @@ "id": "test", "strandedness": "reverse" }, - "test.transcripts.gtf:md5,bb346053a8c156b803b055133376c7fa" + "test.transcripts.gtf:md5,fbabb4e3888bbede67f11f692e484880" ] ], [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:34:03.114695" + "timestamp": "2024-10-18T09:57:11.793664242" }, "sarscov2 [bam] - reverse strandedness": { "content": [ @@ -492,17 +492,17 @@ "id": "test", "strandedness": "reverse" }, - "test.transcripts.gtf:md5,31c34aec2bf36bb0ea3c16c2afeeeb1f" + "test.transcripts.gtf:md5,01d6da00a3c458420841e57427297183" ] ], [ - "versions.yml:md5,3410e8ac349d18c85ddee89337851d38" + "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-22T12:33:52.874479" + "timestamp": "2024-10-18T09:57:01.166309777" } } \ No newline at end of file diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index ce142a749..fd2ec9632 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -11,6 +11,7 @@ workflow ARRIBA_WORKFLOW { ch_fasta ch_starindex_ref ch_arriba_ref_blacklist + ch_arriba_ref_cytobands ch_arriba_ref_known_fusions ch_arriba_ref_protein_domains @@ -28,7 +29,7 @@ workflow ARRIBA_WORKFLOW { .map { meta, reads, fusions -> [ meta, fusions ] } ch_arriba_fusion_fail = ch_dummy_file } else { - ARRIBA_ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, [[],[]], [[],[]], ch_arriba_ref_protein_domains ) + ARRIBA_ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, ch_arriba_ref_cytobands, ch_arriba_ref_protein_domains ) ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 0c6c99164..3de5af74c 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -35,9 +35,6 @@ include { GFFREAD } from '../../modules/nf-core/gffread/ */ workflow BUILD_REFERENCES { - take: - genome // channel: [mandatory] val(genome) - genome_gencode_version // channel: [mandatory] val(genome_gencode_version) main: ch_versions = Channel.empty() @@ -82,7 +79,7 @@ workflow BUILD_REFERENCES { if (!file(params.refflat).exists() || file(params.refflat).isEmpty()){ GTF_TO_REFFLAT(ch_gtf) - ch_refflat = GTF_TO_REFFLAT.out.refflat + ch_refflat = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } } else { ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } } @@ -109,58 +106,55 @@ workflow BUILD_REFERENCES { (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { - ARRIBA_DOWNLOAD(genome) + ARRIBA_DOWNLOAD(params.genome) ch_arriba_ref_blacklist = ARRIBA_DOWNLOAD.out.blacklist ch_arriba_ref_cytobands = ARRIBA_DOWNLOAD.out.cytobands ch_arriba_ref_known_fusions = ARRIBA_DOWNLOAD.out.known_fusions ch_arriba_ref_protein_domains = ARRIBA_DOWNLOAD.out.protein_domains } else { - ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { that -> [[id:that.Name], that] } - ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { that -> [[id:that.Name], that] } - ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { that -> [[id:that.Name], that] } - ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { that -> [[id:that.Name], that] } + ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist) + ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands) + ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions) + ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains) } if ((params.fusioncatcher || params.all) && (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { - if (params.download_refs) { - FUSIONCATCHER_DOWNLOAD(params.genome_gencode_version) - ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference} - else { FUSIONCATCHER_BUILD(params.genome_gencode_version) - ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference} - } else { - ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { that -> [[id:that.Name], that] } - } + ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference + } + else { + ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref) + } if ((params.starfusion || params.all) && (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { - if (params.download_refs) { - ch_starfusion_ref = STARFUSION_DOWNLOAD( ch_fasta, ch_gtf ).out.reference } - else { - ch_starfusion_ref = STARFUSION_BUILD( ch_fasta, ch_gtf ).out.reference } - } else { - ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { that -> [[id:that.Name], that] }} + STARFUSION_BUILD(ch_fasta, ch_gtf) + ch_starfusion_ref = STARFUSION_BUILD.out.reference + } + else { + ch_starfusion_ref = Channel.fromPath(params.starfusion_ref) + } if ((params.fusionreport || params.all) && (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } - ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ).out.reference + FUSIONREPORT_DOWNLOAD(params.cosmic_username, params.cosmic_passwd) + ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.reference } else { - ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } + ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref) } emit: ch_fasta ch_gtf ch_fai - ch_hgnc_ref ch_hgnc_date ch_rrna_interval diff --git a/subworkflows/local/fusionreport_workflow.nf b/subworkflows/local/fusionreport_workflow.nf index 09ec99657..f8fc90dc0 100644 --- a/subworkflows/local/fusionreport_workflow.nf +++ b/subworkflows/local/fusionreport_workflow.nf @@ -23,7 +23,7 @@ workflow FUSIONREPORT_WORKFLOW { FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) ch_fusion_list = FUSIONREPORT.out.fusion_list ch_fusion_list_filtered = FUSIONREPORT.out.fusion_list_filtered - ch_versions = ch_versions.mix(FUSIONREPORT.out.versions) + // ch_versions = ch_versions.mix(FUSIONREPORT.out.versions) ch_report = FUSIONREPORT.out.report ch_csv = FUSIONREPORT.out.csv } else { diff --git a/test.fusionreport.tsv b/test.fusionreport.tsv new file mode 100644 index 000000000..e69de29bb diff --git a/test.fusionreport_filtered.tsv b/test.fusionreport_filtered.tsv new file mode 100644 index 000000000..e69de29bb diff --git a/test.fusions.csv b/test.fusions.csv new file mode 100644 index 000000000..e69de29bb diff --git a/test.fusions.json b/test.fusions.json new file mode 100644 index 000000000..e69de29bb diff --git a/test_fusionreport_index.html b/test_fusionreport_index.html new file mode 100644 index 000000000..e69de29bb diff --git a/tests/main.nf.test b/tests/main.nf.test index 715335d8f..31c71b6f1 100644 --- a/tests/main.nf.test +++ b/tests/main.nf.test @@ -5,11 +5,10 @@ nextflow_pipeline { tag "pipeline" tag "pipeline_rnafusion" - test("Run build references with profile test") { + test("Run fusion detection with profile test") { when { params { - build_references = true outdir = "results" genome_base = "references" max_cpus = 2 @@ -21,25 +20,6 @@ nextflow_pipeline { } } - then { - assertAll( - { assert workflow.success } - ) - } - } - test("Run fusion detection with profile test") { - - when { - params { - outdir = "results" - genome_base = "references" - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - } - } - then { assertAll( { assert workflow.success } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 5e34db974..238bcc3af 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -5,20 +5,20 @@ */ include { BUILD_REFERENCES } from '../subworkflows/local/build_references' -// include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' -// include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' -// include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' -// include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' -// include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow' -// include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' -// include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' -// include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' -// include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' +include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' +include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' +include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' +include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' +include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow' +include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' +include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' +include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' +include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' -// include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' +include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -34,204 +34,123 @@ workflow RNAFUSION { ch_versions = Channel.empty() - // ch_multiqc_files = Channel.empty() + ch_multiqc_files = Channel.empty() // // Create references if necessary // - BUILD_REFERENCES(params.genome, params.genome_gencode_version) + BUILD_REFERENCES() ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) - // // Optional - // ch_fasta = params.fasta ? Channel.fromPath(params.fasta).map {it -> [[id:it[0].simpleName], it]}.collect() - // : BUILD_REFERENCES.out.fasta.map {it -> [[id:it[0].simpleName], it]}.collect() - // ch_gtf = params.gtf ? Channel.fromPath(params.gtf).map {it -> [[id:it[0].simpleName], it]}.collect() - // : downloads.gtf.map {it -> [[id:it[0].simpleName], it]}.collect() - // ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache) - // : Channel.empty().mix(downloads.vep_cache) - // ch_vep_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files) - // : Channel.empty().mix(downloads.vep_plugin) - // ch_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() - // : Channel.empty() - // ch_gene_panel_clinical_filter = params.gene_panel_clinical_filter ? Channel.fromPath(params.gene_panel_clinical_filter).collect() - // : Channel.empty() - // ch_ref_drop_annot_file = params.reference_drop_annot_file ? Channel.fromPath(params.reference_drop_annot_file).collect() - // : Channel.empty() - // ch_ref_drop_count_file = params.reference_drop_count_file ? Channel.fromPath(params.reference_drop_count_file).collect() - // : Channel.empty() - // ch_ref_drop_splice_folder = params.reference_drop_splice_folder ? Channel.fromPath(params.reference_drop_splice_folder).collect() - // : Channel.empty() - // ch_salmon_index = params.salmon_index ? Channel.fromPath(params.salmon_index) - // : Channel.empty() - // ch_star_index = params.star_index ? Channel.fromPath(params.star_index).map {it -> [[id:it[0].simpleName], it]}.collect() - // : Channel.empty() - // ch_transcript_fasta = params.transcript_fasta ? Channel.fromPath(params.transcript_fasta) - // : Channel.empty() - // ch_sequence_dict = params.sequence_dict ? Channel.fromPath(params.sequence_dict).map{ it -> [[id:it[0].simpleName], it] }.collect() - // : Channel.empty() - // ch_subsample_bed = params.subsample_bed ? Channel.fromPath(params.subsample_bed).collect() - // : Channel.empty() // - // Create channel from input file provided through params.input + // QC from FASTQ files // - // Channel - // .fromSamplesheet("input") - // .map { - // meta, fastq_1, fastq_2, strandedness -> - // if (!fastq_2) { - // return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] - // } else { - // return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - // } - // } - // .groupTuple() - // .map { - // validateInputSamplesheet(it) - // } - // .branch { - // meta, fastqs -> - // single : fastqs.size() == 1 - // return [ meta, fastqs.flatten() ] - // multiple: fastqs.size() > 1 - // return [ meta, fastqs.flatten() ] - // } - // .set { ch_fastq } + FASTQC ( + ch_samplesheet + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions) - // // - // // MODULE: Concatenate FastQ files from same sample if required - // // - // CAT_FASTQ ( - // ch_fastq.multiple - // ) - // .reads - // .mix(ch_fastq.single) - // .set { ch_cat_fastq } - // ch_versions = ch_versions.mix(CAT_FASTQ.out.versions) - - - // // - // // QC from FASTQ files - // // - // FASTQC ( - // ch_cat_fastq - // ) - // ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - // ch_versions = ch_versions.mix(FASTQC.out.versions) - // SALMON_QUANT( ch_reads_all, BUILD_REFERENCES.out.ch_salmon_index.map{ meta, index -> index }, BUILD_REFERENCES.out.ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') - // ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.zip.collect{it[1]}) + // + // Trimming + // + TRIM_WORKFLOW ( + ch_samplesheet + ) + ch_reads = TRIM_WORKFLOW.out.trimmed_reads + ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + + // SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ meta, index -> index }, BUILD_REFERENCES.out.ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') + // ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.zi.collect{it[1]}) // ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) - // // - // // Trimming - // // - // TRIM_WORKFLOW ( - // ch_cat_fastq - // ) - // ch_reads = TRIM_WORKFLOW.out.trimmed_reads - // ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + // - // MODULE: Run FastQC + // SUBWORKFLOW: Run STAR alignment and Arriba // - // FASTQC ( - // ch_samplesheet - // ) - // ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - // ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + ARRIBA_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_starindex_ref, + BUILD_REFERENCES.out.ch_arriba_ref_blacklist, + BUILD_REFERENCES.out.ch_arriba_ref_cytobands, + BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, + BUILD_REFERENCES.out.ch_arriba_ref_protein_domains + ) + ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) + + +//Run STAR fusion + STARFUSION_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_starindex_ref, + BUILD_REFERENCES.out.ch_fasta + ) + ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + + +//Run fusioncatcher + FUSIONCATCHER_WORKFLOW ( + ch_reads + ) + ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + + +//Run stringtie + STRINGTIE_WORKFLOW ( + STARFUSION_WORKFLOW.out.ch_bam_sorted, + BUILD_REFERENCES.out.ch_gtf + ) + ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) + + + //Run fusion-report + FUSIONREPORT_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_fusionreport_ref, + ARRIBA_WORKFLOW.out.fusions, + STARFUSION_WORKFLOW.out.fusions, + FUSIONCATCHER_WORKFLOW.out.fusions + ) + ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) + + + + //Run fusionInpector + FUSIONINSPECTOR_WORKFLOW ( + ch_reads, + FUSIONREPORT_WORKFLOW.out.fusion_list, + FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, + FUSIONREPORT_WORKFLOW.out.report, + FUSIONREPORT_WORKFLOW.out.csv, + STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, + BUILD_REFERENCES.out.ch_arriba_ref_cytobands, + BUILD_REFERENCES.out.ch_hgnc_ref, + BUILD_REFERENCES.out.ch_hgnc_date + ) + ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - // TRIM_WORKFLOW ( - // ch_samplesheet + // //QC + // QC_WORKFLOW ( + // ch_reads, + // STARFUSION_WORKFLOW.out.ch_bam_sorted, + // STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, + // BUILD_REFERENCES.out.ch_gtf, + // BUILD_REFERENCES.out.ch_refflat, + // BUILD_REFERENCES.out.ch_fasta, + // BUILD_REFERENCES.out.ch_fai, + // BUILD_REFERENCES.out.ch_rrna_interval // ) - // ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher - // ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all - // ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - - -// // -// // SUBWORKFLOW: Run STAR alignment and Arriba -// // -// ARRIBA_WORKFLOW ( -// ch_reads_all, -// ch_gtf, -// ch_fasta, -// ch_starindex_ensembl_ref, -// ch_arriba_ref_blacklist, -// ch_arriba_ref_known_fusions, -// ch_arriba_ref_protein_domains -// ) -// ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) - - -// //Run STAR fusion -// STARFUSION_WORKFLOW ( -// ch_reads_all, -// ch_gtf, -// ch_starindex_ref, -// ch_fasta -// ) -// ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - - -// //Run fusioncatcher -// FUSIONCATCHER_WORKFLOW ( -// ch_reads_fusioncatcher -// ) -// ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) - - -// //Run stringtie -// STRINGTIE_WORKFLOW ( -// STARFUSION_WORKFLOW.out.ch_bam_sorted, -// ch_gtf -// ) -// ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) - - -// //Run fusion-report -// FUSIONREPORT_WORKFLOW ( -// ch_reads_all, -// ch_fusionreport_ref, -// ARRIBA_WORKFLOW.out.fusions, -// STARFUSION_WORKFLOW.out.fusions, -// FUSIONCATCHER_WORKFLOW.out.fusions -// ) -// ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) - - - -// //Run fusionInpector -// FUSIONINSPECTOR_WORKFLOW ( -// ch_reads_all, -// FUSIONREPORT_WORKFLOW.out.fusion_list, -// FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, -// FUSIONREPORT_WORKFLOW.out.report, -// FUSIONREPORT_WORKFLOW.out.csv, -// STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, -// ch_gtf, -// ch_arriba_ref_protein_domains, -// ch_arriba_ref_cytobands, -// ch_hgnc_ref, -// ch_hgnc_date -// ) -// ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - - -// //QC -// QC_WORKFLOW ( -// ch_reads_all, -// STARFUSION_WORKFLOW.out.ch_bam_sorted, -// STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, -// ch_gtf, -// ch_refflat, -// ch_fasta, -// ch_fai, -// ch_rrna_interval -// ) -// ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + // ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) // // // // Collate and save software versions @@ -244,18 +163,6 @@ workflow RNAFUSION { // newLine: true // ).set { ch_collated_versions } - // //QC - // QC_WORKFLOW ( - // ch_reads_all, - // STARFUSION_WORKFLOW.out.ch_bam_sorted, - // ch_gtf, - // ch_refflat, - // ch_fasta, - // ch_fai, - // ch_rrna_interval - // ) - // ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) - // // // // Collate and save software versions From 786b9bf4ec84fd6e2571ddd034b9923151cd4128 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:45:31 +0100 Subject: [PATCH 080/887] remove unnecessary file --- AAA_BBB.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 AAA_BBB.html diff --git a/AAA_BBB.html b/AAA_BBB.html deleted file mode 100644 index e69de29bb..000000000 From 537b8410800e61cc464b039e7b73e709a603a022 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:17:18 +0000 Subject: [PATCH 081/887] test: ignore nf-test files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a42ce0162..23b0c7de9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ testing/ testing* *.pyc null/ +.nf-test* From 49bc38f761f9125dfe32355734ff65e3a906f516 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:17:45 +0000 Subject: [PATCH 082/887] test: create nf-test for local module ensembl download --- modules/local/ensembl/tests/main.nf.test | 37 +++++++++++++++++++ modules/local/ensembl/tests/main.nf.test.snap | 17 +++++++++ 2 files changed, 54 insertions(+) create mode 100644 modules/local/ensembl/tests/main.nf.test create mode 100644 modules/local/ensembl/tests/main.nf.test.snap diff --git a/modules/local/ensembl/tests/main.nf.test b/modules/local/ensembl/tests/main.nf.test new file mode 100644 index 000000000..e30a826f8 --- /dev/null +++ b/modules/local/ensembl/tests/main.nf.test @@ -0,0 +1,37 @@ +nextflow_process { + + name "Test Process ENSEMBL_DOWNLOAD" + script "../main.nf" + process "ENSEMBL_DOWNLOAD" + + test("Should download Ensembl files") { + + when { + params { + outdir = "tests/results" + genome = "GRCh38" + } + process { + """ + input[0] = "102" + input[1] = "GRCh38" + input[2] = "GRCh38" + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.gtf[0][1]).name, + file(process.out.primary_assembly[0][1]).name, + file(process.out.chrgtf[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/local/ensembl/tests/main.nf.test.snap b/modules/local/ensembl/tests/main.nf.test.snap new file mode 100644 index 000000000..a6eb2971d --- /dev/null +++ b/modules/local/ensembl/tests/main.nf.test.snap @@ -0,0 +1,17 @@ +{ + "Should download Ensembl files": { + "content": [ + "Homo_sapiens.GRCh38.102.gtf", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", + "Homo_sapiens.GRCh38.102.chr.gtf", + [ + "versions.yml:md5,efb55665a151fe2b4d9eac70c0e01bb0" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T14:06:24.319131837" + } +} \ No newline at end of file From f767168d2658127fbbd0c362ccab0c08246a2f94 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:20:59 +0000 Subject: [PATCH 083/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7875d141e..40792bdb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Normalized gene expression calculated [#488](https://github.com/nf-core/rnafusion/pull/488) - Primary assembly now used as main reference genome FASTA file, as recommended by the STAR manual [#488](https://github.com/nf-core/rnafusion/pull/488) - Use of only ensembl GTF file, not chr.gtf file as GTF reference file [#488](https://github.com/nf-core/rnafusion/pull/488) +- Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#508](https://github.com/nf-core/rnafusion/pull/508) ### Changed From 99fc80d7fb6cb83c67c35d2c04a9a2b787704b34 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 26 Nov 2024 16:13:00 +0000 Subject: [PATCH 084/887] test: create nf-tests for local `HGNC_DOWNLOAD` module --- modules/local/hgnc/tests/main.nf.test | 52 ++++++++++++++++++++++ modules/local/hgnc/tests/main.nf.test.snap | 16 +++++++ 2 files changed, 68 insertions(+) create mode 100644 modules/local/hgnc/tests/main.nf.test create mode 100644 modules/local/hgnc/tests/main.nf.test.snap diff --git a/modules/local/hgnc/tests/main.nf.test b/modules/local/hgnc/tests/main.nf.test new file mode 100644 index 000000000..6f4c03d05 --- /dev/null +++ b/modules/local/hgnc/tests/main.nf.test @@ -0,0 +1,52 @@ +nextflow_process { + + name "Test Process HGNC_DOWNLOAD" + script "../main.nf" + process "HGNC_DOWNLOAD" + + test("Should download HGNC files") { + + when { + process { + """ + // This process doesn't have any inputs + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.hgnc_ref[0]).name, + file(process.out.hgnc_date[0]).name, + process.out.versions + ).match() } + ) + } + } + + test("Should create stub files") { + + options "-stub" + + when { + process { + """ + // This process doesn't have any inputs + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.hgnc_ref[0]).name, + file(process.out.hgnc_date[0]).name, + process.out.versions + ).match() } + ) + } + } +} diff --git a/modules/local/hgnc/tests/main.nf.test.snap b/modules/local/hgnc/tests/main.nf.test.snap new file mode 100644 index 000000000..856fe2509 --- /dev/null +++ b/modules/local/hgnc/tests/main.nf.test.snap @@ -0,0 +1,16 @@ +{ + "Should create stub files": { + "content": [ + "hgnc_complete_set.txt", + "HGNC-DB-timestamp.txt", + [ + "versions.yml:md5,a7b7ccbd9eda8036baf548cdf1cb6867" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:07:51.375544204" + } +} \ No newline at end of file From 68bdf263482f41010a54c53a76887b2e3a90fee8 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 26 Nov 2024 17:45:36 +0000 Subject: [PATCH 085/887] test: add new hgnc URL and snapshots --- modules/local/hgnc/main.nf | 2 +- modules/local/hgnc/tests/main.nf.test | 4 ++-- modules/local/hgnc/tests/main.nf.test.snap | 22 ++++++++++++++++++++-- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 865c59d24..a3559726c 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -18,7 +18,7 @@ process HGNC_DOWNLOAD { script: """ - wget https://ftp.ebi.ac.uk/pub/databases/genenames/hgnc/tsv/hgnc_complete_set.txt + wget https://storage.googleapis.com/public-download-files/hgnc/tsv/tsv/hgnc_complete_set.txt date +%Y-%m-%d/%H:%M > HGNC-DB-timestamp.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/hgnc/tests/main.nf.test b/modules/local/hgnc/tests/main.nf.test index 6f4c03d05..cecc4302d 100644 --- a/modules/local/hgnc/tests/main.nf.test +++ b/modules/local/hgnc/tests/main.nf.test @@ -18,7 +18,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.hgnc_ref[0]).name, + process.out.hgnc_ref, file(process.out.hgnc_date[0]).name, process.out.versions ).match() } @@ -42,7 +42,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.hgnc_ref[0]).name, + process.out.hgnc_ref, file(process.out.hgnc_date[0]).name, process.out.versions ).match() } diff --git a/modules/local/hgnc/tests/main.nf.test.snap b/modules/local/hgnc/tests/main.nf.test.snap index 856fe2509..8512dcf6e 100644 --- a/modules/local/hgnc/tests/main.nf.test.snap +++ b/modules/local/hgnc/tests/main.nf.test.snap @@ -1,7 +1,25 @@ { "Should create stub files": { "content": [ - "hgnc_complete_set.txt", + [ + "hgnc_complete_set.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "HGNC-DB-timestamp.txt", + [ + "versions.yml:md5,a7b7ccbd9eda8036baf548cdf1cb6867" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T17:42:04.47884487" + }, + "Should download HGNC files": { + "content": [ + [ + "hgnc_complete_set.txt:md5,29571d88d1648e8764b70791df6a5d2d" + ], "HGNC-DB-timestamp.txt", [ "versions.yml:md5,a7b7ccbd9eda8036baf548cdf1cb6867" @@ -11,6 +29,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.1" }, - "timestamp": "2024-11-26T16:07:51.375544204" + "timestamp": "2024-11-26T17:41:49.965512273" } } \ No newline at end of file From b7f52c61df682f30c4c53e5961dc8d4cea35d1fe Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 26 Nov 2024 17:45:55 +0000 Subject: [PATCH 086/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40792bdb6..f619bd6bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Primary assembly now used as main reference genome FASTA file, as recommended by the STAR manual [#488](https://github.com/nf-core/rnafusion/pull/488) - Use of only ensembl GTF file, not chr.gtf file as GTF reference file [#488](https://github.com/nf-core/rnafusion/pull/488) - Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#508](https://github.com/nf-core/rnafusion/pull/508) +- Add nf-test to local module: `HGNC_DOWNLOAD` [#508](https://github.com/nf-core/rnafusion/pull/509) ### Changed From 0ca578b1407798db249a86303aa2855656935721 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:18:13 +0000 Subject: [PATCH 087/887] refactor: remove replaced local module --- modules/local/rrnatranscripts/main.nf | 41 --------------------------- 1 file changed, 41 deletions(-) delete mode 100644 modules/local/rrnatranscripts/main.nf diff --git a/modules/local/rrnatranscripts/main.nf b/modules/local/rrnatranscripts/main.nf deleted file mode 100644 index fb4ec2d62..000000000 --- a/modules/local/rrnatranscripts/main.nf +++ /dev/null @@ -1,41 +0,0 @@ -process RRNA_TRANSCRIPTS { - tag "$meta.id" - label 'process_single' - - conda "conda-forge::python=3.12.2" - - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.12' : - 'biocontainers/python:3.12' }" - - input: - tuple val(meta), path(gtf) - - output: - tuple val(meta), path("*rrna_intervals.gtf") , emit: rrna_gtf - path "versions.yml" , emit: versions - - - when: - task.ext.when == null || task.ext.when - - script: // This script is bundled with the pipeline, in nf-core/rnafusion/bin/ - def prefix = task.ext.prefix ?: "${meta.id}" - """ - get_rrna_transcripts.py $gtf ${prefix}_rrna_intervals.gtf - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}_rrna_intervals.gtf - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS - """ -} From afea93406929d783e9377d1a23c779ad823b753b Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:20:50 +0000 Subject: [PATCH 088/887] docs: update changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f619bd6bd..17518c30f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,13 +10,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Normalized gene expression calculated [#488](https://github.com/nf-core/rnafusion/pull/488) - Primary assembly now used as main reference genome FASTA file, as recommended by the STAR manual [#488](https://github.com/nf-core/rnafusion/pull/488) - Use of only ensembl GTF file, not chr.gtf file as GTF reference file [#488](https://github.com/nf-core/rnafusion/pull/488) -- Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#508](https://github.com/nf-core/rnafusion/pull/508) -- Add nf-test to local module: `HGNC_DOWNLOAD` [#508](https://github.com/nf-core/rnafusion/pull/509) +- Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#539](https://github.com/nf-core/rnafusion/pull/539) +- Add nf-test to local module: `HGNC_DOWNLOAD` [#540](https://github.com/nf-core/rnafusion/pull/540) ### Changed - Updated modules and migrated non-specific modules to nf-core/modules [#484](https://github.com/nf-core/rnafusion/pull/484) - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) +- Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) ### Fixed From aad0c3fb6adc37cd998f0b7631f4bba25b72b829 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:57:20 +0000 Subject: [PATCH 089/887] docs: update changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f619bd6bd..9b1fb2bfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,8 +10,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Normalized gene expression calculated [#488](https://github.com/nf-core/rnafusion/pull/488) - Primary assembly now used as main reference genome FASTA file, as recommended by the STAR manual [#488](https://github.com/nf-core/rnafusion/pull/488) - Use of only ensembl GTF file, not chr.gtf file as GTF reference file [#488](https://github.com/nf-core/rnafusion/pull/488) -- Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#508](https://github.com/nf-core/rnafusion/pull/508) -- Add nf-test to local module: `HGNC_DOWNLOAD` [#508](https://github.com/nf-core/rnafusion/pull/509) +- Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#539](https://github.com/nf-core/rnafusion/pull/539) +- Add nf-test to local module: `HGNC_DOWNLOAD` [#540](https://github.com/nf-core/rnafusion/pull/540) +- Add nf-test to local subworkflow: `STRINGTIE_WORKFLOW` [#541](https://github.com/nf-core/rnafusion/pull/541) ### Changed From 112ea4bfa386907ec1133572737ebe47195e0f5d Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:56:40 +0000 Subject: [PATCH 090/887] test: add nf-test to local subworkflow `STRINGTIE_WORKFLOW` --- .../stringtie_workflow/tests/main.nf.test | 70 +++++++++++++++++++ .../tests/main.nf.test.snap | 56 +++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 subworkflows/local/stringtie_workflow/tests/main.nf.test create mode 100644 subworkflows/local/stringtie_workflow/tests/main.nf.test.snap diff --git a/subworkflows/local/stringtie_workflow/tests/main.nf.test b/subworkflows/local/stringtie_workflow/tests/main.nf.test new file mode 100644 index 000000000..da423ed57 --- /dev/null +++ b/subworkflows/local/stringtie_workflow/tests/main.nf.test @@ -0,0 +1,70 @@ +nextflow_workflow { + + name "Test STRINGTIE_WORKFLOW" + script "../main.nf" + workflow "STRINGTIE_WORKFLOW" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "stringtie" + + test("Should run stringtie workflow with stringtie = true") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', strandedness:'reverse' ], // meta map + file("${params.test_data_base}/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file("${params.test_data_base}/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) + ]) + """ + } + params { + stringtie = true + outdir = "$outputDir" + test_data_base = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() }, + ) + } + } + + test("Should run stringtie workflow with params.all = true") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', strandedness:'reverse' ], // meta map + file("${params.test_data_base}/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file("${params.test_data_base}/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) + ]) + """ + } + params { + all = true + outdir = "$outputDir" + test_data_base = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() }, + ) + } + } + +} diff --git a/subworkflows/local/stringtie_workflow/tests/main.nf.test.snap b/subworkflows/local/stringtie_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..791c85e41 --- /dev/null +++ b/subworkflows/local/stringtie_workflow/tests/main.nf.test.snap @@ -0,0 +1,56 @@ +{ + "Should run stringtie workflow with params.all = true": { + "content": [ + { + "0": [ + "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" + ], + "1": [ + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" + ], + "stringtie_gtf": [ + "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" + ], + "versions": [ + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-27T17:51:10.73612885" + }, + "Should run stringtie workflow with stringtie = true": { + "content": [ + { + "0": [ + "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" + ], + "1": [ + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" + ], + "stringtie_gtf": [ + "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" + ], + "versions": [ + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,16bf76d2f56399280213cfa721195317", + "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-27T17:50:57.437102535" + } +} \ No newline at end of file From 298028e7d87b2a950dd5e4b72bfe8970d95682ce Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:55:45 +0000 Subject: [PATCH 091/887] refact: move subworkflow to its own directory --- subworkflows/local/stringtie_workflow/main.nf | 36 +++++++++++++++++++ workflows/rnafusion.nf | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 subworkflows/local/stringtie_workflow/main.nf diff --git a/subworkflows/local/stringtie_workflow/main.nf b/subworkflows/local/stringtie_workflow/main.nf new file mode 100644 index 000000000..25ff26ee8 --- /dev/null +++ b/subworkflows/local/stringtie_workflow/main.nf @@ -0,0 +1,36 @@ +include { STRINGTIE_STRINGTIE } from '../../../modules/nf-core/stringtie/stringtie/main' +include { STRINGTIE_MERGE } from '../../../modules/nf-core/stringtie/merge/main' + + +workflow STRINGTIE_WORKFLOW { + take: + bam_sorted // channel: [meta, bam] + ch_chrgtf // channel: [meta, gtf] + + main: + ch_versions = Channel.empty() + ch_stringtie_gtf = Channel.empty() + + if ((params.stringtie || params.all) && !params.fusioninspector_only) { + STRINGTIE_STRINGTIE(bam_sorted, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) + + STRINGTIE_STRINGTIE + .out + .transcript_gtf + .map { it -> it[1] } + .set { stringtie_gtf } + ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) + + + STRINGTIE_MERGE (stringtie_gtf, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) + ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf + } + + emit: + stringtie_gtf = ch_stringtie_gtf.ifEmpty(null) // channel: [meta, gtf] + versions = ch_versions // channel: [ path(versions.yml) ] + + } + diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index b4e4517b6..2a2c6d317 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -7,7 +7,7 @@ include { TRIM_WORKFLOW } from '../subworkflows/local/trim_wor include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' -include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow' +include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow/main' include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' From 320b4ca883301279fd37efc61bd5e5f2c0d6e7f9 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:41:11 +0100 Subject: [PATCH 092/887] add no_cosmic option/update fusionreport --- conf/modules.config | 6 ++++-- modules/local/fusionreport/detect/main.nf | 3 +-- modules/local/fusionreport/download/main.nf | 3 ++- nextflow.config | 1 + nextflow_schema.json | 5 +++++ 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 699720400..98aeab436 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -97,7 +97,8 @@ process { withName: 'FUSIONREPORT' { ext.when = { !params.skip_vis } - ext.args = "--export csv" + ext.args = { {params.no_cosmic} ? "--no-cosmic" : "" } + ext.args2 = "--export csv" publishDir = [ path: { "${params.outdir}/fusionreport/${meta.id}" }, mode: params.publish_dir_mode, @@ -106,7 +107,8 @@ process { } withName: 'FUSIONREPORT_DOWNLOAD' { - ext.args = { params.qiagen ? "--qiagen" : "" } + ext.args = { {params.no_cosmic} ? "--no-cosmic" : "" } + ext.args2 = { params.qiagen ? "--qiagen" : "" } publishDir = [ path: { "${params.genomes_base}/fusion_report_db" }, mode: params.publish_dir_mode, diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 8024d8f8e..8981e6019 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -2,8 +2,7 @@ process FUSIONREPORT { tag "$meta.id" label 'process_medium' - conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:2.1.8" + container "docker.io/clinicalgenomics/fusion-report:3.1.0" input: diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 971db1b7f..6143dc052 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -3,7 +3,7 @@ process FUSIONREPORT_DOWNLOAD { label 'process_medium' conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:2.1.8" + container "docker.io/clinicalgenomics/fusion-report:3.1.0" input: val(username) @@ -15,6 +15,7 @@ process FUSIONREPORT_DOWNLOAD { script: def args = task.ext.args ?: '' + def args2 = task.ext.args ?: '' """ fusion_report download --cosmic_usr "$username" --cosmic_passwd "$passwd" $args ./ diff --git a/nextflow.config b/nextflow.config index 3ea4afd11..051c2c2fb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -73,6 +73,7 @@ params { skip_vis = false // Path to references + no_cosmic = false ensembl_ref = "${params.genomes_base}/ensembl" arriba_ref = "${params.genomes_base}/arriba" arriba_ref_blacklist = "${params.genomes_base}/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz" diff --git a/nextflow_schema.json b/nextflow_schema.json index 470b1300b..f1fa3e625 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -348,6 +348,11 @@ "pattern": "^\\S+\\.interval_list?$", "description": "Path to ribosomal interval list.", "fa_icon": "far fa-file-code" + }, + "no_cosmic": { + "type": "boolean", + "fa_icon": "far fa-file-code", + "description": "Avoid using Cosmic DB (for example in clinical case applications where a paid license applies." } } }, From 23b9d3e9b28726419f1c1e31b29c0e3172ce1c9d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:46:20 +0100 Subject: [PATCH 093/887] update changelog --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17518c30f..aa3cfbb45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use of only ensembl GTF file, not chr.gtf file as GTF reference file [#488](https://github.com/nf-core/rnafusion/pull/488) - Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#539](https://github.com/nf-core/rnafusion/pull/539) - Add nf-test to local module: `HGNC_DOWNLOAD` [#540](https://github.com/nf-core/rnafusion/pull/540) +- Option to avoid using COSMIC (for example in the case of clinical use) [547](https://github.com/nf-core/rnafusion/pull/547) ### Changed @@ -28,6 +29,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove fusionGDB from documentation and fusion-report download stubs [#503](https://github.com/nf-core/rnafusion/pull/503) +### Parameters + + +| Old parameter | New parameter | +| -------------------------------- | --------------------------------- | +| | `--no_cosmic` | + + ## v3.0.2 - [2024-04-10] ### Added From 6514cbb1a3accd14022bbec893b299535fa11fa2 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:48:41 +0100 Subject: [PATCH 094/887] add option to usage documentation --- docs/usage.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index b7bc6794c..2a14f9fb6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -49,6 +49,8 @@ nextflow run nf-core/rnafusion \ --outdir ``` +If you are not covered by the research COSMIC license and want to avoid using COSMIC, you can provide the additional option `--no_cosmic`. + ### Downloading the cosmic database with SANGER or QUIAGEN #### For academic users @@ -156,6 +158,9 @@ nextflow run nf-core/rnafusion \ --outdir ``` +If you are not covered by the research COSMIC license and want to avoid using COSMIC, you can provide the additional option `--no_cosmic`. + + > **IMPORTANT: Either `--all` or `--`** is necessary to run detection tools `--genomes_base` should be the path to the directory containing the folder `references/` that was built with `--build_references`. From cb6671bf9e501da257eb9d0e9098026c67c955bd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:49:59 +0100 Subject: [PATCH 095/887] prettier --- CHANGELOG.md | 8 +++----- docs/usage.md | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa3cfbb45..663726a9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,11 +31,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Parameters - -| Old parameter | New parameter | -| -------------------------------- | --------------------------------- | -| | `--no_cosmic` | - +| Old parameter | New parameter | +| ------------- | ------------- | +| | `--no_cosmic` | ## v3.0.2 - [2024-04-10] diff --git a/docs/usage.md b/docs/usage.md index 2a14f9fb6..b353b28ce 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -160,7 +160,6 @@ nextflow run nf-core/rnafusion \ If you are not covered by the research COSMIC license and want to avoid using COSMIC, you can provide the additional option `--no_cosmic`. - > **IMPORTANT: Either `--all` or `--`** is necessary to run detection tools `--genomes_base` should be the path to the directory containing the folder `references/` that was built with `--build_references`. From 288c7070ed77ca2d76589eb1a3ce6c8eb805f681 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:11:57 +0100 Subject: [PATCH 096/887] remove check for . in .fastq.gz fileformat --- assets/schema_input.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 9747d48aa..a55008106 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -17,14 +17,14 @@ "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "pattern": "^\\S+f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "pattern": "^\\S+f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, "strandedness": { From c739e6ce8cf44228a71243671dff9d8db587417c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:16:16 +0100 Subject: [PATCH 097/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17518c30f..aa0684578 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated modules and migrated non-specific modules to nf-core/modules [#484](https://github.com/nf-core/rnafusion/pull/484) - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) +- Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) ### Fixed From eece50d96f53a8411aacc9b123ca3cbb4295845e Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Thu, 28 Nov 2024 16:35:27 +0000 Subject: [PATCH 098/887] Updated tests and fusion containers and conda versions, general config, and ci.yml --- .github/workflows/ci.yml | 72 ++-- conf/igenomes.config | 478 ++++++++++++++++++++++ conf/igenomes_ignored.config | 9 + conf/test.config | 1 + conf/test_build.config | 31 ++ conf/test_full.config | 4 +- modules/local/fusioninspector/main.nf | 4 +- modules/local/starfusion/build/main.nf | 4 +- modules/local/starfusion/detect/main.nf | 4 +- modules/local/starfusion/download/main.nf | 4 +- nextflow.config | 3 + nf-test.config | 15 +- tests/.nftignore | 4 + tests/main.nf.test | 49 --- tests/nextflow.config | 35 -- tests/test_build_stub.nf.test | 72 ++++ tests/test_build_stub.nf.test.snap | 208 ++++++++++ tests/test_stub.nf.test | 57 +++ tests/test_stub.nf.test.snap | 239 +++++++++++ 19 files changed, 1171 insertions(+), 122 deletions(-) create mode 100644 conf/igenomes.config create mode 100644 conf/igenomes_ignored.config create mode 100644 conf/test_build.config create mode 100644 tests/.nftignore delete mode 100644 tests/main.nf.test delete mode 100644 tests/nextflow.config create mode 100644 tests/test_build_stub.nf.test create mode 100644 tests/test_build_stub.nf.test.snap create mode 100644 tests/test_stub.nf.test create mode 100644 tests/test_stub.nf.test.snap diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e1028ed8e..a972974dd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,11 +5,18 @@ on: branches: - dev pull_request: + branches: + - dev + - master release: types: [published] workflow_dispatch: env: + NFT_DIFF: "pdiff" + NFT_DIFF_ARGS: "--line-numbers --expand-tabs=2" + NFT_VER: "0.9.2" + NFT_WORKDIR: "~" NXF_ANSI_LOG: false NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity @@ -20,35 +27,36 @@ concurrency: jobs: test: - name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" + name: "${{ matrix.NXF_VER }} | ${{ matrix.test_profile }} | ${{ matrix.compute_profile }}" # Only run on push if this is the nf-core dev branch (merged PRs) if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/rnafusion') }}" runs-on: ubuntu-latest strategy: + fail-fast: false matrix: NXF_VER: - "24.04.2" - "latest-everything" - trim_parameters: - - "--fastp_trim false" - - "--fastp_trim true" - profile: - - "conda" + test_profile: + - "test" + - "test_scores" + - "test_samples" + compute_profile: - "docker" - "singularity" - test_name: - - "test" isMaster: - ${{ github.base_ref == 'master' }} # Exclude conda and singularity on dev exclude: - isMaster: false - profile: "conda" + compute_profile: "conda" - isMaster: false - profile: "singularity" + compute_profile: "singularity" steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + fetch-depth: 0 - name: Set up Nextflow uses: nf-core/setup-nextflow@v2 @@ -56,17 +64,17 @@ jobs: version: "${{ matrix.NXF_VER }}" - name: Set up Apptainer - if: matrix.profile == 'singularity' + if: matrix.compute_profile == 'singularity' uses: eWaterCycle/setup-apptainer@main - name: Set up Singularity - if: matrix.profile == 'singularity' + if: matrix.compute_profile == 'singularity' run: | mkdir -p $NXF_SINGULARITY_CACHEDIR mkdir -p $NXF_SINGULARITY_LIBRARYDIR - name: Set up Miniconda - if: matrix.profile == 'conda' + if: matrix.compute_profile == 'conda' uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 with: miniconda-version: "latest" @@ -75,7 +83,7 @@ jobs: channels: conda-forge,bioconda - name: Set up Conda - if: matrix.profile == 'conda' + if: matrix.compute_profile == 'conda' run: | echo $(realpath $CONDA)/condabin >> $GITHUB_PATH echo $(realpath python) >> $GITHUB_PATH @@ -83,16 +91,32 @@ jobs: - name: Clean up Disk space uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: "Run pipeline build with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" + - uses: actions/setup-python@v4 + with: + python-version: "3.11" + architecture: "x64" + + - name: Install pdiff to see diff between nf-test snapshots run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} \ - -stub --build_references \ - --outdir /home/runner/work/rnafusion/rnafusion/results --all \ - --genomes_base /home/runner/work/rnafusion/rnafusion/results/references \ - --cosmic_username ${{ secrets.COSMIC_USERNAME }} --cosmic_passwd ${{ secrets.COSMIC_PASSWD }} + python -m pip install --upgrade pip + pip install pdiff + + - uses: nf-core/setup-nf-test@v1 + with: + version: ${{ env.NFT_VER }} - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" + - name: Run Tests (${{matrix.NXF_VER}} | ${{matrix.test_profile}} | ${{matrix.compute_profile}}) run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} -stub \ - --outdir /home/runner/work/rnafusion/rnafusion/results --all ${{ matrix.trim_parameters }} \ - --genomes_base /home/runner/work/rnafusion/rnafusion/results/references + nf-test test \ + --ci \ + --tag ${{matrix.test_profile}} \ + --profile "+${{ matrix.compute_profile }}" \ + --junitxml=test.xml \ + --debug --verbose + + - name: Publish Test Report + uses: mikepenz/action-junit-report@v3 + if: always() # always run even if the previous step fails + with: + report_paths: test.xml + annotate_only: true diff --git a/conf/igenomes.config b/conf/igenomes.config new file mode 100644 index 000000000..d608b45bf --- /dev/null +++ b/conf/igenomes.config @@ -0,0 +1,478 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines reference genomes using iGenome paths. + Can be used by any config that customises the base path using: + $params.igenomes_base / --igenomes_base +---------------------------------------------------------------------------------------- +*/ + +params { + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + mirtrace_species = "hsa" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + mirtrace_species = "hsa" + } + 'CHM13' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" + bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" + gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" + mito_name = "chrM" + } + 'GRCm38' { + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + mirtrace_species = "mmu" + } + 'TAIR10' { + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" + mirtrace_species = "ath" + } + 'EB2' { + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" + // mirtrace_species = "bsu" + } + 'UMD3.1' { + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" + mirtrace_species = "bta" + } + 'WBcel235' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" + mirtrace_species = "cel" + } + 'CanFam3.1' { + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" + mirtrace_species = "cfa" + } + 'GRCz10' { + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" + mirtrace_species = "dre" + } + 'BDGP6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" + mirtrace_species = "dme" + } + 'EquCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" + // mirtrace_species = "ecb" + } + 'EB1' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + // mirtrace_species = "ecd" + } + 'Galgal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" + mirtrace_species = "gga" + } + 'Gm01' { + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" + // mirtrace_species = "gmx" + } + 'Mmul_1' { + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" + // mirtrace_species = "mcc" + } + 'IRGSP-1.0' { + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" + mirtrace_species = "osa" + } + 'CHIMP2.1.4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" + mirtrace_species = "ptr" + } + 'Rnor_5.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" + mito_name = "MT" + mirtrace_species = "rno" + } + 'Rnor_6.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" + mirtrace_species = "rno" + } + 'R64-1-1' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" + // mirtrace_species = "sce" + } + 'EF2' { + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" + // mirtrace_species = "spo" + } + 'Sbi1' { + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" + mirtrace_species = "sbi" + } + 'Sscrofa10.2' { + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" + mirtrace_species = "ssc" + } + 'AGPv3' { + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" + mirtrace_species = "zma" + } + 'hg38' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + mirtrace_species = "hsa" + } + 'hg19' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" + mirtrace_species = "hsa" + } + 'mm10' { + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" + mirtrace_species = "mmu" + } + 'bosTau8' { + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" + mirtrace_species = "bta" + } + 'ce10' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" + mirtrace_species = "cel" + } + 'canFam3' { + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" + mirtrace_species = "cfa" + } + 'danRer10' { + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.37e9" + mirtrace_species = "dre" + } + 'dm6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" + mirtrace_species = "dme" + } + 'equCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" + // mirtrace_species = "ecb" + } + 'galGal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" + mirtrace_species = "gga" + } + 'panTro4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" + mirtrace_species = "ptr" + } + 'rn6' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" + mirtrace_species = "rno" + } + 'sacCer3' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" + // mirtrace_species = "sce" + } + 'susScr3' { + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" + mirtrace_species = "ssc" + } + } +} diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 000000000..b4034d824 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/test.config b/conf/test.config index aa51522d7..9559e8dac 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,4 +24,5 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' + all = true } diff --git a/conf/test_build.config b/conf/test_build.config new file mode 100644 index 000000000..138d5e308 --- /dev/null +++ b/conf/test_build.config @@ -0,0 +1,31 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/rnafusion -profile test_build, --outdir -stub + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test build references profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + build_references = true + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' + cosmic_username = secrets.COSMIC_USERNAME + cosmic_passwd = secrets.COSMIC_PASSWD + all = true +} diff --git a/conf/test_full.config b/conf/test_full.config index eb8f5cd69..467445604 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -14,7 +14,5 @@ params { // Input data for full size test input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - - // Other params - + all = true } diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 2f99c7111..0f9f0abb0 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -2,8 +2,8 @@ process FUSIONINSPECTOR { tag "$meta.id" label 'process_high' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container 'docker.io/trinityctat/starfusion:1.13.0' + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" + container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index a768cc5c9..e7b969a2f 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -1,8 +1,8 @@ process STARFUSION_BUILD { tag 'star-fusion' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container "docker.io/trinityctat/starfusion:1.13.0" + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" + container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 9a46cc00d..a3a433652 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -2,8 +2,8 @@ process STARFUSION { tag "$meta.id" label 'process_high' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container 'docker.io/trinityctat/starfusion:1.13.0' + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" + container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 221d12dd9..a486b607e 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -1,8 +1,8 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.13.0 bioconda::trinity=2.15.1 bioconda::samtools=1.19.2 bioconda::star=2.7.11b" - container 'docker.io/trinityctat/starfusion:1.13.0' + conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" + container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' output: path "ctat_genome_lib_build_dir/*" , emit: reference diff --git a/nextflow.config b/nextflow.config index 3ea4afd11..33f71e041 100644 --- a/nextflow.config +++ b/nextflow.config @@ -222,6 +222,9 @@ profiles { test { includeConfig 'conf/test.config' } + test_build { + includeConfig 'conf/test_build.config' + } test_full { includeConfig 'conf/test_full.config' } diff --git a/nf-test.config b/nf-test.config index 870799df0..cefd5a626 100644 --- a/nf-test.config +++ b/nf-test.config @@ -1,8 +1,17 @@ config { - + // location for all nf-tests testsDir "tests" + + // nf-test directory including temporary files for each test workDir ".nf-test" - configFile "tests/nextflow.config" - profile "" + // location of library folder that is added automatically to the classpath + libDir "tests/pipeline/lib/" + + // location of an optional nextflow.config file specific for executing tests + configFile "nextflow.config" + + plugins { + load "nft-utils@0.0.3" + } } diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 000000000..74b208734 --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,4 @@ +pipeline_info/*.{html,json,txt,yml} +references +references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz +references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz diff --git a/tests/main.nf.test b/tests/main.nf.test deleted file mode 100644 index 715335d8f..000000000 --- a/tests/main.nf.test +++ /dev/null @@ -1,49 +0,0 @@ -nextflow_pipeline { - - name "Test pipeline" - script "../main.nf" - tag "pipeline" - tag "pipeline_rnafusion" - - test("Run build references with profile test") { - - when { - params { - build_references = true - outdir = "results" - genome_base = "references" - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - cosmic_username = COSMIC_USERNAME - cosmic_passwd = COSMIC_PASSWD - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - test("Run fusion detection with profile test") { - - when { - params { - outdir = "results" - genome_base = "references" - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } -} diff --git a/tests/nextflow.config b/tests/nextflow.config deleted file mode 100644 index ebd067ac8..000000000 --- a/tests/nextflow.config +++ /dev/null @@ -1,35 +0,0 @@ -/* -======================================================================================== - Nextflow config file for running tests -======================================================================================== -*/ - -params { - // Base directory for nf-core/modules test data - modules_testdata_base_path = 's3://ngi-igenomes/testdata/nf-core/modules/' - - // Base directory for nf-core/rnaseq test data - pipelines_testdata_base_path = 's3://ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/' - - outdir = 'results' -} - -// Impose sensible resource limits for testing -process { - withName: '.*' { - cpus = 2 - memory = 3.GB - time = 2.h - } -} - -// Impose same minimum Nextflow version as the pipeline for testing -manifest { - nextflowVersion = '!>=23.04.0' -} - -// Disable all Nextflow reporting options -timeline { enabled = false } -report { enabled = false } -trace { enabled = false } -dag { enabled = false } diff --git a/tests/test_build_stub.nf.test b/tests/test_build_stub.nf.test new file mode 100644 index 000000000..76666e213 --- /dev/null +++ b/tests/test_build_stub.nf.test @@ -0,0 +1,72 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + profile "test_build" + options "-stub" // TODO remove once the pipeline is fixed + tag "pipeline" + tag "pipeline_rnafusion" + tag "build" + + test("stub test_build with fastp_trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = true + cosmic_username = "user" // placeholder string to avoid null input val in process + cosmic_passwd = "password" // placeholder string to avoid null input val in process + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("stub test_build no fastp_trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = false + cosmic_username = "user" // placeholder string to avoid null input val in process + cosmic_passwd = "password" // placeholder string to avoid null input val in process + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/test_build_stub.nf.test.snap b/tests/test_build_stub.nf.test.snap new file mode 100644 index 000000000..f220063ab --- /dev/null +++ b/tests/test_build_stub.nf.test.snap @@ -0,0 +1,208 @@ +{ + "stub test_build with fastp_trim": { + "content": [ + 14, + [ + "bedops", + "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", + "gffread", + "gffread/Homo_sapiens.GRCh38.102.gff3", + "pipeline_info", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/ensembl", + "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", + "references/ensembl/Homo_sapiens.GRCh38.102.genepred", + "references/ensembl/Homo_sapiens.GRCh38.102.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.refflat", + "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", + "references/fusion_report_db", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/fusioncatcher", + "references/fusioncatcher/human_v102", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ref_annot.cdna.fa", + "rrnatranscripts", + "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" + ], + [ + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.chr.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.genepred:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.refflat:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "HGNC-DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "hgnc_complete_set.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-11-28T16:11:45.948294564" + }, + "stub test_build no fastp_trim": { + "content": [ + 14, + [ + "bedops", + "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", + "gffread", + "gffread/Homo_sapiens.GRCh38.102.gff3", + "pipeline_info", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/ensembl", + "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", + "references/ensembl/Homo_sapiens.GRCh38.102.genepred", + "references/ensembl/Homo_sapiens.GRCh38.102.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.refflat", + "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", + "references/fusion_report_db", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/fusioncatcher", + "references/fusioncatcher/human_v102", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ref_annot.cdna.fa", + "rrnatranscripts", + "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" + ], + [ + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.chr.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.genepred:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102.refflat:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "HGNC-DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "hgnc_complete_set.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-11-28T16:12:09.301397153" + } +} \ No newline at end of file diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test new file mode 100644 index 000000000..f2a6bf6b8 --- /dev/null +++ b/tests/test_stub.nf.test @@ -0,0 +1,57 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + profile "test" + options "-stub" // TODO remove once the pipeline is fixed + tag "pipeline" + tag "pipeline_rnafusion" + tag "test" + + test("stub test with fastp trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("stub test no fastp trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = false + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } +} diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap new file mode 100644 index 000000000..9e6162460 --- /dev/null +++ b/tests/test_stub.nf.test.snap @@ -0,0 +1,239 @@ +{ + "stub test with fastp trim": { + "content": [ + 17, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER": { + "fusioncatcher": 1.33 + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.2.0-1-g3948afb6b" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.2.0-1-g3948afb6b" + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.7.0" + }, + "STAR_FOR_ARRIBA": { + "star": "2.7.10a", + "samtools": 1.18, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": "2.7.10a", + "samtools": 1.18, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.1" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ], + [ + "test.arriba.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", + "test.arriba.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_trimmed.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_trimmed.zip:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusioncatcher.fusion-genes.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusioncatcher.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusioncatcher.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "AAA_BBB.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusionreport.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusionreport_filtered.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusions.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusions.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_collectinsertsize.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_collectinsertsize.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_meta_info.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.starfusion.abridged.coding_effect.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.starfusion.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.starfusion.fusion_predictions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "stringtie.merged.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-11-28T14:46:31.727687792" + } +} \ No newline at end of file From 8a87c11386462b728f2172bee97c9f126ecbbb6c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:44:48 +0000 Subject: [PATCH 099/887] test: update nf-core picard/collectrnaseqmetrics to include tests --- modules.json | 2 +- .../collectrnaseqmetrics/environment.yml | 2 +- .../picard/collectrnaseqmetrics/main.nf | 4 +- .../collectrnaseqmetrics/tests/main.nf.test | 81 +++++++++++++++++++ .../tests/main.nf.test.snap | 60 ++++++++++++++ .../tests/nextflow.config | 13 +++ 6 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config diff --git a/modules.json b/modules.json index de299a717..e3709392d 100644 --- a/modules.json +++ b/modules.json @@ -77,7 +77,7 @@ }, "picard/collectrnaseqmetrics": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { diff --git a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml index ff4a85edb..1d715d564 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml +++ b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::picard=3.2.0 + - bioconda::picard=3.3.0 diff --git a/modules/nf-core/picard/collectrnaseqmetrics/main.nf b/modules/nf-core/picard/collectrnaseqmetrics/main.nf index 0c8f2cfa2..eb80fdc70 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/main.nf +++ b/modules/nf-core/picard/collectrnaseqmetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTRNASEQMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : - 'biocontainers/picard:3.2.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' : + 'biocontainers/picard:3.3.0--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test new file mode 100644 index 000000000..9ab185521 --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test @@ -0,0 +1,81 @@ +nextflow_process { + + name "Test Process PICARD_COLLECTRNASEQMETRICS" + script "../main.nf" + process "PICARD_COLLECTRNASEQMETRICS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collectrnaseqmetrics" + tag "ucsc/gtftogenepred" + + setup { + run("UCSC_GTFTOGENEPRED") { + script "../../../ucsc/gtftogenepred/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + test("sarscov2 - fasta - gtf") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false, strandedness:'forward' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = UCSC_GTFTOGENEPRED.out.refflat.map{ it[1] } + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert file(process.out.metrics[0][1]).text.contains('CollectRnaSeqMetrics') }, + { assert snapshot( + process.out.versions, + process.out.pdf + ).match() } + ) + } + } + + test("sarscov2 - fasta - gtf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false, strandedness:'forward' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = UCSC_GTFTOGENEPRED.out.refflat.map{ it[1] } + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap new file mode 100644 index 000000000..ad6503afd --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/tests/main.nf.test.snap @@ -0,0 +1,60 @@ +{ + "sarscov2 - fasta - gtf": { + "content": [ + [ + "versions.yml:md5,8d0867f89947c081711de09338138c2e" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T16:10:39.199344417" + }, + "sarscov2 - fasta - gtf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false, + "strandedness": "forward" + }, + "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,8d0867f89947c081711de09338138c2e" + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false, + "strandedness": "forward" + }, + "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "pdf": [ + + ], + "versions": [ + "versions.yml:md5,8d0867f89947c081711de09338138c2e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T16:10:57.248132065" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config b/modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config new file mode 100644 index 000000000..bc82e10c1 --- /dev/null +++ b/modules/nf-core/picard/collectrnaseqmetrics/tests/nextflow.config @@ -0,0 +1,13 @@ +process { + withName:UCSC_GTFTOGENEPRED { + ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" + } + withName:PICARD_COLLECTRNASEQMETRICS { + ext.args = { ( meta.strandedness == "forward" || meta.single_end ) ? + "--STRAND_SPECIFICITY FIRST_READ_TRANSCRIPTION_STRAND" : + meta.strandedness == "reverse" ? + "--STRAND_SPECIFICITY SECOND_READ_TRANSCRIPTION_STRAND" : + "--STRAND_SPECIFICITY NONE" + } + } +} From 74195e7dc3362d964f1d4103fd2945807db66083 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:47:56 +0000 Subject: [PATCH 100/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17518c30f..c56866b39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use of only ensembl GTF file, not chr.gtf file as GTF reference file [#488](https://github.com/nf-core/rnafusion/pull/488) - Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#539](https://github.com/nf-core/rnafusion/pull/539) - Add nf-test to local module: `HGNC_DOWNLOAD` [#540](https://github.com/nf-core/rnafusion/pull/540) +- Add nf-test to nf-core module: `PICARD_COLLECTRNASEQMETRICS` and update module [#551](https://github.com/nf-core/rnafusion/pull/551) ### Changed From 704d23dbec94a765b820b7a07019dc1e93e95695 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Thu, 28 Nov 2024 21:07:25 +0000 Subject: [PATCH 101/887] Updated ci.yml and nftests --- .github/workflows/ci.yml | 6 +- conf/test.config | 1 - conf/test_build.config | 3 - conf/test_cosmic.config | 30 ++++ nextflow.config | 5 +- tests/.nftignore | 1 - tests/test.nf.test | 71 +++++++++ tests/test_build.nf.test | 71 +++++++++ tests/test_build_stub.nf.test | 16 +- tests/test_build_stub.nf.test.snap | 4 +- tests/test_cosmic.nf.test | 102 ++++++++++++ tests/test_stub.nf.test | 33 +++- tests/test_stub.nf.test.snap | 241 ++++++++++++++++++++++++++++- 13 files changed, 558 insertions(+), 26 deletions(-) create mode 100644 conf/test_cosmic.config create mode 100644 tests/test.nf.test create mode 100644 tests/test_build.nf.test create mode 100644 tests/test_cosmic.nf.test diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a972974dd..2e06ffabc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,12 +38,12 @@ jobs: - "24.04.2" - "latest-everything" test_profile: - - "test" - - "test_scores" - - "test_samples" + - "test_stub" + - "test_build_stub" compute_profile: - "docker" - "singularity" + - "conda" isMaster: - ${{ github.base_ref == 'master' }} # Exclude conda and singularity on dev diff --git a/conf/test.config b/conf/test.config index 9559e8dac..aa51522d7 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,5 +24,4 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - all = true } diff --git a/conf/test_build.config b/conf/test_build.config index 138d5e308..32ee1bb62 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -25,7 +25,4 @@ params { // Input data build_references = true input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' - cosmic_username = secrets.COSMIC_USERNAME - cosmic_passwd = secrets.COSMIC_PASSWD - all = true } diff --git a/conf/test_cosmic.config b/conf/test_cosmic.config new file mode 100644 index 000000000..ebbad7cf3 --- /dev/null +++ b/conf/test_cosmic.config @@ -0,0 +1,30 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/rnafusion -profile test_cosmic, --outdir -stub + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test cosmic profile' + config_profile_description = 'Minimal test cosmic dataset to check pipeline function' + + // Input data + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' + all = true + cosmic_username = secrets.COSMIC_USERNAME + cosmic_passwd = secrets.COSMIC_PASSWD +} diff --git a/nextflow.config b/nextflow.config index 33f71e041..0f0a00a7b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -225,7 +225,10 @@ profiles { test_build { includeConfig 'conf/test_build.config' } - test_full { + test_cosmic { + includeConfig 'conf/test_cosmic.config' + } + test_full { includeConfig 'conf/test_full.config' } diff --git a/tests/.nftignore b/tests/.nftignore index 74b208734..d70cc56e9 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -1,4 +1,3 @@ pipeline_info/*.{html,json,txt,yml} -references references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz diff --git a/tests/test.nf.test b/tests/test.nf.test new file mode 100644 index 000000000..f56807286 --- /dev/null +++ b/tests/test.nf.test @@ -0,0 +1,71 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + profile "test" + tag "pipeline" + tag "pipeline_rnafusion" + tag "test" + + test("test with fastp trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("test no fastp trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = false + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test new file mode 100644 index 000000000..ef18e7e1d --- /dev/null +++ b/tests/test_build.nf.test @@ -0,0 +1,71 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + profile "test_build" + tag "pipeline" + tag "pipeline_rnafusion" + tag "test_build" + + test("test_build with fastp_trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("test_build no fastp_trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = false + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/test_build_stub.nf.test b/tests/test_build_stub.nf.test index 76666e213..cfb703512 100644 --- a/tests/test_build_stub.nf.test +++ b/tests/test_build_stub.nf.test @@ -6,16 +6,17 @@ nextflow_pipeline { options "-stub" // TODO remove once the pipeline is fixed tag "pipeline" tag "pipeline_rnafusion" - tag "build" + tag "test_build_stub" test("stub test_build with fastp_trim") { when { params { - outdir = "$outputDir" - fastp_trim = true + outdir = "$outputDir" + fastp_trim = true cosmic_username = "user" // placeholder string to avoid null input val in process - cosmic_passwd = "password" // placeholder string to avoid null input val in process + cosmic_passwd = "password" // placeholder string to avoid null input val in process + all = true } } @@ -43,10 +44,11 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" - fastp_trim = false + outdir = "$outputDir" + fastp_trim = true cosmic_username = "user" // placeholder string to avoid null input val in process - cosmic_passwd = "password" // placeholder string to avoid null input val in process + cosmic_passwd = "password" // placeholder string to avoid null input val in process + all = true } } diff --git a/tests/test_build_stub.nf.test.snap b/tests/test_build_stub.nf.test.snap index f220063ab..a9bc48ee2 100644 --- a/tests/test_build_stub.nf.test.snap +++ b/tests/test_build_stub.nf.test.snap @@ -100,7 +100,7 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-28T16:11:45.948294564" + "timestamp": "2024-11-28T21:05:36.346682866" }, "stub test_build no fastp_trim": { "content": [ @@ -203,6 +203,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-28T16:12:09.301397153" + "timestamp": "2024-11-28T21:06:01.432893263" } } \ No newline at end of file diff --git a/tests/test_cosmic.nf.test b/tests/test_cosmic.nf.test new file mode 100644 index 000000000..ffa1e4896 --- /dev/null +++ b/tests/test_cosmic.nf.test @@ -0,0 +1,102 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + profile "test_cosmic" + tag "pipeline" + tag "pipeline_rnafusion" + tag "test_cosmic" + + test("test cosmic with fastp trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("test cosmic no fastp trim") { + + when { + params { + outdir = "$outputDir" + fastp_trim = false + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("test cosmic no fastp trim build") { + + when { + params { + outdir = "$outputDir" + fastp_trim = false + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index f2a6bf6b8..b2ad98ce6 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -6,14 +6,17 @@ nextflow_pipeline { options "-stub" // TODO remove once the pipeline is fixed tag "pipeline" tag "pipeline_rnafusion" - tag "test" + tag "test_stub" test("stub test with fastp trim") { when { params { - outdir = "$outputDir" - fastp_trim = true + outdir = "$outputDir" + fastp_trim = true + cosmic_username = "user" // placeholder string to avoid null input val in process + cosmic_passwd = "password" // placeholder string to avoid null input val in process + all = true } } @@ -43,14 +46,32 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" - fastp_trim = false + outdir = "$outputDir" + fastp_trim = true + cosmic_username = "user" // placeholder string to avoid null input val in process + cosmic_passwd = "password" // placeholder string to avoid null input val in process + all = true } } then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') assertAll( - { assert workflow.success } + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } ) } } diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 9e6162460..c09b29194 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,5 +1,5 @@ { - "stub test with fastp trim": { + "stub test no fastp trim": { "content": [ 17, { @@ -29,8 +29,245 @@ "picard": "3.2.0-1-g3948afb6b" }, "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.7.0" + }, + "STAR_FOR_ARRIBA": { + "star": "2.7.10a", + "samtools": 1.18, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": "2.7.10a", + "samtools": 1.18, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.1" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ], + [ + "test.arriba.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", + "test.arriba.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_trimmed.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_trimmed.zip:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusioncatcher.fusion-genes.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusioncatcher.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusioncatcher.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "AAA_BBB.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusionreport.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusionreport_filtered.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusions.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusions.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_collectinsertsize.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_collectinsertsize.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_meta_info.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.starfusion.abridged.coding_effect.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.starfusion.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.starfusion.fusion_predictions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "stringtie.merged.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-11-28T21:06:57.215801319" + }, + "stub test with fastp trim": { + "content": [ + 17, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER": { + "fusioncatcher": 1.33 + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.2.0-1-g3948afb6b" }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, "SAMTOOLS_INDEX_FOR_STARFUSION": { "samtools": 1.21 }, @@ -234,6 +471,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-28T14:46:31.727687792" + "timestamp": "2024-11-28T21:06:29.861338628" } } \ No newline at end of file From fa4f7713ac3bacbc57c7686d6770e8dbdb10a88e Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Thu, 28 Nov 2024 21:28:34 +0000 Subject: [PATCH 102/887] Update tests --- tests/test.nf.test | 6 ++++-- tests/test_build.nf.test | 2 ++ tests/test_build_stub.nf.test | 2 +- tests/test_stub.nf.test | 2 +- tests/test_stub.nf.test.snap | 26 ++------------------------ 5 files changed, 10 insertions(+), 28 deletions(-) diff --git a/tests/test.nf.test b/tests/test.nf.test index f56807286..be6ab52c2 100644 --- a/tests/test.nf.test +++ b/tests/test.nf.test @@ -11,8 +11,9 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" - fastp_trim = true + outdir = "$outputDir" + fastp_trim = true + no_cosmic = true } } @@ -44,6 +45,7 @@ nextflow_pipeline { params { outdir = "$outputDir" fastp_trim = false + no_cosmic = true } } diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test index ef18e7e1d..a6a9936ac 100644 --- a/tests/test_build.nf.test +++ b/tests/test_build.nf.test @@ -13,6 +13,7 @@ nextflow_pipeline { params { outdir = "$outputDir" fastp_trim = true + no_cosmic = true } } @@ -44,6 +45,7 @@ nextflow_pipeline { params { outdir = "$outputDir" fastp_trim = false + no_cosmic = true } } diff --git a/tests/test_build_stub.nf.test b/tests/test_build_stub.nf.test index cfb703512..6844867d6 100644 --- a/tests/test_build_stub.nf.test +++ b/tests/test_build_stub.nf.test @@ -45,7 +45,7 @@ nextflow_pipeline { when { params { outdir = "$outputDir" - fastp_trim = true + fastp_trim = false cosmic_username = "user" // placeholder string to avoid null input val in process cosmic_passwd = "password" // placeholder string to avoid null input val in process all = true diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index b2ad98ce6..90d9bb647 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -47,7 +47,7 @@ nextflow_pipeline { when { params { outdir = "$outputDir" - fastp_trim = true + fastp_trim = false cosmic_username = "user" // placeholder string to avoid null input val in process cosmic_passwd = "password" // placeholder string to avoid null input val in process all = true diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index c09b29194..63dc16109 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,20 +1,14 @@ { "stub test no fastp trim": { "content": [ - 17, + 15, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" }, - "FASTP": { - "fastp": "0.23.4" - }, "FASTQC": { "fastqc": "0.12.1" }, - "FASTQC_FOR_FASTP": { - "fastqc": "0.12.1" - }, "FUSIONCATCHER": { "fusioncatcher": 1.33 }, @@ -61,18 +55,9 @@ "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", - "fastp", - "fastp/test.fastp.html", - "fastp/test.fastp.json", - "fastp/test.fastp.log", - "fastp/test_1.fastp.fastq.gz", - "fastp/test_2.fastp.fastq.gz", "fastqc", "fastqc/test.html", "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", "fusioncatcher/test.fusioncatcher.fusion-genes.txt", "fusioncatcher/test.fusioncatcher.log", @@ -156,15 +141,8 @@ [ "test.arriba.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", "test.arriba.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", "test.html:md5,d41d8cd98f00b204e9800998ecf8427e", "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_trimmed.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_trimmed.zip:md5,d41d8cd98f00b204e9800998ecf8427e", "test.fusioncatcher.fusion-genes.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "test.fusioncatcher.log:md5,d41d8cd98f00b204e9800998ecf8427e", "test.fusioncatcher.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -234,7 +212,7 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-28T21:06:57.215801319" + "timestamp": "2024-11-28T21:25:48.332933141" }, "stub test with fastp trim": { "content": [ From 460b6450ced2459dc4f2ce8abc5368dc5bc872c3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 29 Nov 2024 09:18:26 +0100 Subject: [PATCH 103/887] add parameter interpretation in modules.config --- conf/modules.config | 18 +- main.nf | 6 +- modules/local/fusionreport/detect/main.nf | 6 +- modules/local/fusionreport/download/main.nf | 2 +- .../utils_nfcore_rnafusion_pipeline/main.nf | 3 +- workflows/rnafusion.nf | 182 +++++++++--------- 6 files changed, 104 insertions(+), 113 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index b07f53335..3b176c87e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -36,7 +36,7 @@ process { } withName: 'ARRIBA_VISUALISATION' { - ext.when = { !params.fusioninspector_only && (params.starfusion || params.all) } + ext.when = { {!params.fusioninspector_only} && ({params.starfusion} || {params.all}) } ext.prefix = { "${meta.id}_combined_fusions_arriba_visualisation" } publishDir = [ path: { "${params.outdir}/arriba_visualisation" }, @@ -63,7 +63,7 @@ process { withName: 'FASTQC' { ext.args = '--quiet' - ext.when = { !params.skip_qc && !params.references_only } + ext.when = { {!params.skip_qc} && {!params.references_only} } publishDir = [ path: { "${params.outdir}/fastqc" }, mode: params.publish_dir_mode, @@ -73,7 +73,7 @@ process { withName: 'FASTQC_FOR_FASTP' { ext.args = '--quiet' - ext.when = ( !params.skip_qc) + ext.when = { !params.skip_qc } ext.prefix = { "${meta.id}_trimmed" } publishDir = [ path: { "${params.outdir}/fastqc_for_fastp" }, @@ -96,7 +96,7 @@ process { withName: 'FUSIONINSPECTOR' { ext.when = { !params.skip_vis } - ext.args = { params.fusioninspector_limitSjdbInsertNsj != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' } + ext.args = { ${params.fusioninspector_limitSjdbInsertNsj} != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' } ext.args2 = '--annotate --examine_coding_effect' } @@ -111,7 +111,7 @@ process { } withName: 'FUSIONREPORT_DOWNLOAD' { - ext.args = { params.qiagen ? "--qiagen" : "" } + ext.args = { ${params.qiagen} ? "--qiagen" : "" } publishDir = [ path: { "${params.genomes_base}/fusion_report_db" }, mode: params.publish_dir_mode, @@ -153,7 +153,7 @@ process { } withName: 'MULTIQC' { ext.when = { !params.skip_qc } - ext.args = params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' + ext.args = {params.multiqc_title} ? "--title \"$params.multiqc_title\"" : '' publishDir = [ path: { "${params.outdir}/multiqc" }, mode: params.publish_dir_mode, @@ -162,12 +162,12 @@ process { } withName: 'PICARD_COLLECTRNASEQMETRICS' { - ext.when = { !params.skip_qc && !params.fusioninspector_only && (params.starfusion || params.all) } + ext.when = { {!params.skip_qc} && {!params.fusioninspector_only} && ( {params.starfusion} || {params.all}) } } withName: 'GATK4_MARKDUPLICATES' { - ext.when = { !params.skip_qc && !params.fusioninspector_only && (params.starfusion || params.all) } + ext.when = { {!params.skip_qc} && {!params.fusioninspector_only} && ( {params.starfusion}|| {params.all}) } publishDir = [ path: { "${params.outdir}/picard" }, mode: params.publish_dir_mode, @@ -176,7 +176,7 @@ process { } withName: 'PICARD_COLLECTINSERTSIZEMETRICS' { - ext.when = { !params.skip_qc && !params.fusioninspector_only && (params.starfusion || params.all) } + ext.when = { ${!params.skip_qc} && ${!params.fusioninspector_only} && (${params.starfusion} || ${params.all}) } ext.prefix = { "${meta.id}_collectinsertsize"} publishDir = [ path: { "${params.outdir}/picard" }, diff --git a/main.nf b/main.nf index 09216f56b..78781bed3 100644 --- a/main.nf +++ b/main.nf @@ -51,6 +51,9 @@ workflow NFCORE_RNAFUSION { // RNAFUSION(samplesheet) + + emit: + multiqc_report = RNAFUSION.out.multiqc_report } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -67,10 +70,8 @@ workflow { PIPELINE_INITIALISATION ( params.version, params.validate_params, - params.monochrome_logs, args, params.outdir, - params.input ) // @@ -88,6 +89,7 @@ workflow { params.outdir, params.monochrome_logs, params.hook_url, + NFCORE_RNAFUSION.out.multiqc_report, ) } diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index f2557bf01..ec7a076c8 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -58,11 +58,7 @@ process FUSIONREPORT { cat <<-END_VERSIONS > versions.yml "${task.process}": - fusion_report: sth + fusion_report: \$(fusion_report --version | sed 's/fusion-report //') END_VERSIONS """ } - // cat <<-END_VERSIONS > versions.yml - // "${task.process}": - // fusion_report: \$(fusion_report --version 2>&1 | sed 's/fusion-report //') - // END_VERSIONS diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 971db1b7f..04e069ee0 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -10,7 +10,7 @@ process FUSIONREPORT_DOWNLOAD { val(passwd) output: - path "*" , emit: reference + path "*.db" , emit: reference path "versions.yml" , emit: versions script: diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index ae62c8d4c..b217a88d8 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -30,10 +30,8 @@ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit validate_params // boolean: Boolean whether to validate parameters against the schema at runtime - monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args outdir // string: The output directory where the results will be saved - input // string: Path to input samplesheet main: @@ -114,6 +112,7 @@ workflow PIPELINE_COMPLETION { outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications + multiqc_report // string: Path to MultiQC report main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 238bcc3af..e14ac799c 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -13,6 +13,10 @@ include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringti include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' @@ -63,9 +67,10 @@ workflow RNAFUSION { ch_reads = TRIM_WORKFLOW.out.trimmed_reads ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - // SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ meta, index -> index }, BUILD_REFERENCES.out.ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') - // ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.zi.collect{it[1]}) - // ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) + + SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') + ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) + ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) // @@ -139,97 +144,86 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - // //QC - // QC_WORKFLOW ( - // ch_reads, - // STARFUSION_WORKFLOW.out.ch_bam_sorted, - // STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, - // BUILD_REFERENCES.out.ch_gtf, - // BUILD_REFERENCES.out.ch_refflat, - // BUILD_REFERENCES.out.ch_fasta, - // BUILD_REFERENCES.out.ch_fai, - // BUILD_REFERENCES.out.ch_rrna_interval - // ) - // ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) - -// // -// // Collate and save software versions -// // -// softwareVersionsToYAML(ch_versions) -// .collectFile( -// storeDir: "${params.outdir}/pipeline_info", -// name: 'nf_core_pipeline_software_mqc_versions.yml', -// sort: true, -// newLine: true -// ).set { ch_collated_versions } - - - // // - // // Collate and save software versions - // // - // softwareVersionsToYAML(ch_versions) - // .collectFile( - // storeDir: "${params.outdir}/pipeline_info", - // name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', - // sort: true, - // newLine: true - // ).set { ch_collated_versions } - - // // - // // MODULE: MultiQC - // // - // ch_multiqc_config = Channel.fromPath( - // "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - // ch_multiqc_custom_config = params.multiqc_config ? - // Channel.fromPath(params.multiqc_config, checkIfExists: true) : - // Channel.empty() - // ch_multiqc_logo = params.multiqc_logo ? - // Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - // Channel.empty() - - // summary_params = paramsSummaryMap( - // workflow, parameters_schema: "nextflow_schema.json") - // ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - // ch_multiqc_files = ch_multiqc_files.mix( - // ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - // ch_multiqc_custom_methods_description = params.multiqc_methods_description ? - // file(params.multiqc_methods_description, checkIfExists: true) : - // file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - // ch_methods_description = Channel.value( - // methodsDescriptionText(ch_multiqc_custom_methods_description)) - - // ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - // ch_multiqc_files = ch_multiqc_files.mix( - // ch_methods_description.collectFile( - // name: 'methods_description_mqc.yaml', - // sort: true - // ) - // ) - // ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) - // ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) - - // MULTIQC ( - // ch_multiqc_files.collect(), - // ch_multiqc_config.toList(), - // ch_multiqc_custom_config.toList(), - // ch_multiqc_logo.toList(), - // [], - // [] - // ) - - - - // emit: - // multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - // versions = ch_versions // channel: [ path(versions.yml) ] + //QC + QC_WORKFLOW ( + ch_reads, + STARFUSION_WORKFLOW.out.ch_bam_sorted, + STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_refflat, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_fai, + BUILD_REFERENCES.out.ch_rrna_interval + ) + ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + + // + // Collate and save software versions + // + softwareVersionsToYAML(ch_versions) + .collectFile( + storeDir: "${params.outdir}/pipeline_info", + name: 'nf_core_pipeline_software_mqc_versions.yml', + sort: true, + newLine: true + ).set { ch_collated_versions } + + + // + // MODULE: MultiQC + // + ch_multiqc_config = Channel.fromPath( + "$projectDir/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? + Channel.fromPath(params.multiqc_config, checkIfExists: true) : + Channel.empty() + ch_multiqc_logo = params.multiqc_logo ? + Channel.fromPath(params.multiqc_logo, checkIfExists: true) : + Channel.empty() + + summary_params = paramsSummaryMap( + workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + ch_multiqc_files = ch_multiqc_files.mix( + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? + file(params.multiqc_methods_description, checkIfExists: true) : + file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description)) + + ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) + ch_multiqc_files = ch_multiqc_files.mix( + ch_methods_description.collectFile( + name: 'methods_description_mqc.yaml', + sort: true + ) + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.fastp_html.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.fastp_json.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.fastqc_trimmed.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) + + MULTIQC ( + ch_multiqc_files.collect(), + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList(), + [], + [] + ) + + + + emit: + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] } From 098a92dcb85e5a492adc3eab62074b617d569177 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 29 Nov 2024 10:47:23 +0100 Subject: [PATCH 104/887] add skip_vcf param --- conf/modules.config | 2 +- nextflow.config | 1 + nextflow_schema.json | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 699720400..eb1f554b5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -354,6 +354,6 @@ process { } withName: 'VCF_COLLECT' { - ext.when = {!params.fusioninspector_only} + ext.when = { {!params.fusioninspector_only} && {!params.skip_vcf} } } } diff --git a/nextflow.config b/nextflow.config index 3ea4afd11..bddd64b0c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -71,6 +71,7 @@ params { // Skip steps skip_qc = false skip_vis = false + skip_vcf = false // Path to references ensembl_ref = "${params.genomes_base}/ensembl" diff --git a/nextflow_schema.json b/nextflow_schema.json index 470b1300b..9899ea151 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -18,6 +18,10 @@ "skip_vis": { "type": "boolean", "description": "Skip visualisation steps" + }, + "skip_vcf": { + "type": "boolean", + "description": "Skip vcf generation step" } }, "fa_icon": "fas fa-fast-forward" From 7e1fa66080d26cbdd0e8b37aff9e775ebc5eed11 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 29 Nov 2024 11:12:22 +0100 Subject: [PATCH 105/887] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70b049baa..79a5db4ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `ENSEMBL_DOWNLOAD` [#539](https://github.com/nf-core/rnafusion/pull/539) - Add nf-test to local module: `HGNC_DOWNLOAD` [#540](https://github.com/nf-core/rnafusion/pull/540) - Add nf-test to nf-core module: `PICARD_COLLECTRNASEQMETRICS` and update module [#551](https://github.com/nf-core/rnafusion/pull/551) +- Add `--skip_vcf` boolean parameter to skip vcf file generation [#554](https://github.com/nf-core/rnafusion/pull/554) ### Changed From 345a562e0326650bb618a66379a84ee001b73a95 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 29 Nov 2024 16:10:49 +0000 Subject: [PATCH 106/887] fix: fix bug in `fusionreport_download` when building references --- subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf | 5 +++++ workflows/build_references.nf | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index ae62c8d4c..258c60500 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -156,6 +156,11 @@ workflow PIPELINE_COMPLETION { // def validateInputParameters() { genomeExistsError() + + if (params.build_references && params.no_cosmic) { + log.warn("No cosmic credentials were provided. Skipping `FUSIONREPORT_DOWNLOAD`") + } + } // diff --git a/workflows/build_references.nf b/workflows/build_references.nf index da6664373..8abce2f49 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -76,7 +76,7 @@ workflow BUILD_REFERENCES { } else { UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.chrgtf) } - if (params.fusionreport || params.all) { + if ((params.fusionreport || params.all) && !params.no_cosmic) { FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) } From b3d0f94eee62d22ed6d8c088ea991f3578c4f1f3 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 29 Nov 2024 16:10:57 +0000 Subject: [PATCH 107/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8eb7d8caf..392f4ba5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed some Nextflow run-commands in the docs [#491](https://github.com/nf-core/rnafusion/pull/491) - Fixed bug when trying to build indices behind a proxy and wget was unable to download arriba indices [#495](https://github.com/nf-core/rnafusion/issues/495) +- Fixed bug in `FUSIONREPORT_DOWNLOAD` when building references with `--no_cosmic parameter` [#555](https://github.com/nf-core/rnafusion/issues/555) ### Removed From 88deea5d83c04644f0904282bd095f1a632b3c9c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 29 Nov 2024 16:17:42 +0000 Subject: [PATCH 108/887] ci: add `--no_cosmic` flag for tests in CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e1028ed8e..2751a4760 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,7 +89,7 @@ jobs: -stub --build_references \ --outdir /home/runner/work/rnafusion/rnafusion/results --all \ --genomes_base /home/runner/work/rnafusion/rnafusion/results/references \ - --cosmic_username ${{ secrets.COSMIC_USERNAME }} --cosmic_passwd ${{ secrets.COSMIC_PASSWD }} + --no_cosmic - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | From 90d309d0fadae86c9b9a177790e723a941bc212f Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Fri, 29 Nov 2024 16:36:06 +0000 Subject: [PATCH 109/887] Update test_build test and add it to ci --- .github/workflows/ci.yml | 1 + tests/test_build.nf.test | 39 +---------------------------------- tests/test_build_stub.nf.test | 35 +------------------------------ 3 files changed, 3 insertions(+), 72 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e06ffabc..2cc8fba44 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,6 +40,7 @@ jobs: test_profile: - "test_stub" - "test_build_stub" + - "test_build" compute_profile: - "docker" - "singularity" diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test index a6a9936ac..a800b0e6b 100644 --- a/tests/test_build.nf.test +++ b/tests/test_build.nf.test @@ -7,12 +7,11 @@ nextflow_pipeline { tag "pipeline_rnafusion" tag "test_build" - test("test_build with fastp_trim") { + test("test_build") { when { params { outdir = "$outputDir" - fastp_trim = true no_cosmic = true } } @@ -26,42 +25,6 @@ nextflow_pipeline { assertAll( { assert workflow.success}, { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() } - ) - } - } - - test("test_build no fastp_trim") { - - when { - params { - outdir = "$outputDir" - fastp_trim = false - no_cosmic = true - } - } - - then { - // stable_name: All files + folders in ${params.outdir}/ with a stable name - // Ignore files with timestamps in their names - def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - assertAll( - { assert workflow.success}, - { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents diff --git a/tests/test_build_stub.nf.test b/tests/test_build_stub.nf.test index 6844867d6..3235720ac 100644 --- a/tests/test_build_stub.nf.test +++ b/tests/test_build_stub.nf.test @@ -8,44 +8,11 @@ nextflow_pipeline { tag "pipeline_rnafusion" tag "test_build_stub" - test("stub test_build with fastp_trim") { + test("stub test_build") { when { params { outdir = "$outputDir" - fastp_trim = true - cosmic_username = "user" // placeholder string to avoid null input val in process - cosmic_passwd = "password" // placeholder string to avoid null input val in process - all = true - } - } - - then { - // stable_name: All files + folders in ${params.outdir}/ with a stable name - // Ignore files with timestamps in their names - def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - assertAll( - { assert workflow.success}, - { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() } - ) - } - } - - test("stub test_build no fastp_trim") { - - when { - params { - outdir = "$outputDir" - fastp_trim = false cosmic_username = "user" // placeholder string to avoid null input val in process cosmic_passwd = "password" // placeholder string to avoid null input val in process all = true From 18bf7c0e447476b797ba2ab0cf01bf649dbc5c20 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Fri, 29 Nov 2024 17:50:59 +0000 Subject: [PATCH 110/887] Update test_build_stub --- tests/test_build_stub.nf.test.snap | 107 +---------------------------- 1 file changed, 2 insertions(+), 105 deletions(-) diff --git a/tests/test_build_stub.nf.test.snap b/tests/test_build_stub.nf.test.snap index a9bc48ee2..18d8ef8d1 100644 --- a/tests/test_build_stub.nf.test.snap +++ b/tests/test_build_stub.nf.test.snap @@ -1,5 +1,5 @@ { - "stub test_build with fastp_trim": { + "stub test_build": { "content": [ 14, [ @@ -100,109 +100,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-28T21:05:36.346682866" - }, - "stub test_build no fastp_trim": { - "content": [ - 14, - [ - "bedops", - "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", - "gffread", - "gffread/Homo_sapiens.GRCh38.102.gff3", - "pipeline_info", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/ensembl", - "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", - "references/ensembl/Homo_sapiens.GRCh38.102.genepred", - "references/ensembl/Homo_sapiens.GRCh38.102.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.refflat", - "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", - "references/fusion_report_db", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/fusioncatcher", - "references/fusioncatcher/human_v102", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ref_annot.cdna.fa", - "rrnatranscripts", - "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" - ], - [ - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", - "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.chr.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.genepred:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.refflat:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", - "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e", - "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e", - "HGNC-DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "hgnc_complete_set.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", - "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "SA:md5,d41d8cd98f00b204e9800998ecf8427e", - "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-11-28T21:06:01.432893263" + "timestamp": "2024-11-29T17:29:03.231447837" } } \ No newline at end of file From 6e4f519567e77646bc18a3ef393ed8ef90bb0e5d Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 29 Nov 2024 21:22:29 +0000 Subject: [PATCH 111/887] refactor: `FUSIONREPORT_DOWNLOAD` accepts cosmic credentials via `ext.args` --- conf/modules.config | 2 +- modules/local/fusionreport/download/main.nf | 6 +----- subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf | 2 +- workflows/build_references.nf | 4 ++-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 3bbe5ae7e..4390e5f7c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -107,7 +107,7 @@ process { } withName: 'FUSIONREPORT_DOWNLOAD' { - ext.args = { {params.no_cosmic} ? "--no-cosmic" : "" } + ext.args = { {params.no_cosmic} ? "--no-cosmic" : " --cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } ext.args2 = { params.qiagen ? "--qiagen" : "" } publishDir = [ path: { "${params.genomes_base}/fusion_report_db" }, diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 6143dc052..acfcbf843 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -5,10 +5,6 @@ process FUSIONREPORT_DOWNLOAD { conda "bioconda::star=2.7.9a" container "docker.io/clinicalgenomics/fusion-report:3.1.0" - input: - val(username) - val(passwd) - output: path "*" , emit: reference path "versions.yml" , emit: versions @@ -17,7 +13,7 @@ process FUSIONREPORT_DOWNLOAD { def args = task.ext.args ?: '' def args2 = task.ext.args ?: '' """ - fusion_report download --cosmic_usr "$username" --cosmic_passwd "$passwd" $args ./ + fusion_report download $args ./ cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 258c60500..a4aaf9c4b 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -158,7 +158,7 @@ def validateInputParameters() { genomeExistsError() if (params.build_references && params.no_cosmic) { - log.warn("No cosmic credentials were provided. Skipping `FUSIONREPORT_DOWNLOAD`") + log.warn("No cosmic credentials were provided. Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD`") } } diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 8abce2f49..def3c1627 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -76,8 +76,8 @@ workflow BUILD_REFERENCES { } else { UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.chrgtf) } - if ((params.fusionreport || params.all) && !params.no_cosmic) { - FUSIONREPORT_DOWNLOAD( params.cosmic_username, params.cosmic_passwd ) + if (params.fusionreport || params.all) { + FUSIONREPORT_DOWNLOAD() } } From 1649e77da8a6a1d4b2b7f0f0b86b72e64ebe4f56 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 29 Nov 2024 21:22:41 +0000 Subject: [PATCH 112/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 392f4ba5f..220496328 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed some Nextflow run-commands in the docs [#491](https://github.com/nf-core/rnafusion/pull/491) - Fixed bug when trying to build indices behind a proxy and wget was unable to download arriba indices [#495](https://github.com/nf-core/rnafusion/issues/495) - Fixed bug in `FUSIONREPORT_DOWNLOAD` when building references with `--no_cosmic parameter` [#555](https://github.com/nf-core/rnafusion/issues/555) +- Refactor structure in `FUSIONREPORT_DOWNLOAD` to use cosmic credentials in `ext.args` [#556](https://github.com/nf-core/rnafusion/issues/556) ### Removed From 703b57ecfd0cc817882c190a872d6b40ee11e985 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 13:17:11 +0000 Subject: [PATCH 113/887] test: add nf-test to `FUSIONREPORT_DOWNLOAD` --- .../fusionreport/download/tests/main.nf.test | 48 +++++++++++++ .../download/tests/main.nf.test.snap | 67 +++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 modules/local/fusionreport/download/tests/main.nf.test create mode 100644 modules/local/fusionreport/download/tests/main.nf.test.snap diff --git a/modules/local/fusionreport/download/tests/main.nf.test b/modules/local/fusionreport/download/tests/main.nf.test new file mode 100644 index 000000000..db8344b5a --- /dev/null +++ b/modules/local/fusionreport/download/tests/main.nf.test @@ -0,0 +1,48 @@ +nextflow_process { + + name "Test Process FUSIONREPORT_DOWNLOAD" + script "../main.nf" + process "FUSIONREPORT_DOWNLOAD" + + test("Download fusionreport databases") { + + when { + process { + """ + // This process doesn't have any inputs + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.fusiongdb2, + process.out.mitelman, + process.out.versions + ).match() } + ) + } + } + + test("Create stub files") { + + options "-stub" + + when { + process { + """ + // This process doesn't have any inputs + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/local/fusionreport/download/tests/main.nf.test.snap b/modules/local/fusionreport/download/tests/main.nf.test.snap new file mode 100644 index 000000000..d828fcf51 --- /dev/null +++ b/modules/local/fusionreport/download/tests/main.nf.test.snap @@ -0,0 +1,67 @@ +{ + "Download fusionreport databases": { + "content": [ + [ + "fusiongdb2.db:md5,e1ac123a744e515d3e5f85b8344d526a" + ], + [ + "mitelman.db:md5,1363795c97f77c641065ecd9ad0e484a" + ], + [ + "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-02T13:09:56.930477745" + }, + "Create stub files": { + "content": [ + { + "0": [ + "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "1": [ + "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "2": [ + "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "3": [ + "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "4": [ + "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "5": [ + "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" + ], + "cosmic": [ + "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "fusiongdb2": [ + "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "log": [ + "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "mitelman": [ + "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "timestamp": [ + "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "versions": [ + "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-02T13:10:12.577952658" + } +} \ No newline at end of file From 9e7fe540578bb7ded64a37553cadcadeb0e7a7c5 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 13:17:40 +0000 Subject: [PATCH 114/887] refactor: emit outputs separately --- modules/local/fusionreport/download/main.nf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index acfcbf843..183d95602 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -6,7 +6,11 @@ process FUSIONREPORT_DOWNLOAD { container "docker.io/clinicalgenomics/fusion-report:3.1.0" output: - path "*" , emit: reference + path "fusiongdb2.db" , emit: fusiongdb2 + path "mitelman.db" , emit: mitelman + path "cosmic.db" , emit: cosmic, optional: true + path "*.txt" , emit: timestamp + path "*.log" , emit: log path "versions.yml" , emit: versions script: @@ -26,6 +30,9 @@ process FUSIONREPORT_DOWNLOAD { touch cosmic.db touch fusiongdb2.db touch mitelman.db + touch DB-timestamp.txt + touch fusion_report.log + cat <<-END_VERSIONS > versions.yml "${task.process}": fusion_report: \$(fusion_report --version | sed 's/fusion-report //') From 8d0e6f749cf0ced57be6fd08c0e740d0282eb360 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 13:17:50 +0000 Subject: [PATCH 115/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 220496328..d1cbe2d1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Option to avoid using COSMIC (for example in the case of clinical use) [547](https://github.com/nf-core/rnafusion/pull/547) - Add nf-test to nf-core module: `PICARD_COLLECTRNASEQMETRICS` and update module [#551](https://github.com/nf-core/rnafusion/pull/551) - Add `--skip_vcf` boolean parameter to skip vcf file generation [#554](https://github.com/nf-core/rnafusion/pull/554) +- Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) ### Changed From 5b74d37fff61d6a23eb84825fdae521fc42e21d7 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:16:47 +0000 Subject: [PATCH 116/887] fix: use wildcard to get rrna gtf --- modules.json | 3 ++- modules/nf-core/rrnatranscripts/main.nf | 2 +- .../rrnatranscripts/rrnatranscripts.diff | 21 +++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 modules/nf-core/rrnatranscripts/rrnatranscripts.diff diff --git a/modules.json b/modules.json index e3709392d..66710aa74 100644 --- a/modules.json +++ b/modules.json @@ -88,7 +88,8 @@ "rrnatranscripts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/rrnatranscripts/rrnatranscripts.diff" }, "salmon/index": { "branch": "master", diff --git a/modules/nf-core/rrnatranscripts/main.nf b/modules/nf-core/rrnatranscripts/main.nf index 50843c768..e5d918473 100644 --- a/modules/nf-core/rrnatranscripts/main.nf +++ b/modules/nf-core/rrnatranscripts/main.nf @@ -20,7 +20,7 @@ process RRNATRANSCRIPTS { script: def prefix = task.ext.prefix ?: "${gtf.baseName}" """ - grep -E '^#|rRNA' genome.gtf > ${prefix}_rrna_intervals.gtf || true + grep -E '^#|rRNA' *.gtf > ${prefix}_rrna_intervals.gtf || true if [ ! -s ${prefix}_rrna_intervals.gtf ]; then rm ${prefix}_rrna_intervals.gtf fi diff --git a/modules/nf-core/rrnatranscripts/rrnatranscripts.diff b/modules/nf-core/rrnatranscripts/rrnatranscripts.diff new file mode 100644 index 000000000..33bb1910a --- /dev/null +++ b/modules/nf-core/rrnatranscripts/rrnatranscripts.diff @@ -0,0 +1,21 @@ +Changes in module 'nf-core/rrnatranscripts' +'modules/nf-core/rrnatranscripts/environment.yml' is unchanged +Changes in 'rrnatranscripts/main.nf': +--- modules/nf-core/rrnatranscripts/main.nf ++++ modules/nf-core/rrnatranscripts/main.nf +@@ -20,7 +20,7 @@ + script: + def prefix = task.ext.prefix ?: "${gtf.baseName}" + """ +- grep -E '^#|rRNA' genome.gtf > ${prefix}_rrna_intervals.gtf || true ++ grep -E '^#|rRNA' *.gtf > ${prefix}_rrna_intervals.gtf || true + if [ ! -s ${prefix}_rrna_intervals.gtf ]; then + rm ${prefix}_rrna_intervals.gtf + fi + +'modules/nf-core/rrnatranscripts/meta.yml' is unchanged +'modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py' is unchanged +'modules/nf-core/rrnatranscripts/tests/main.nf.test' is unchanged +'modules/nf-core/rrnatranscripts/tests/main.nf.test.snap' is unchanged +'modules/nf-core/rrnatranscripts/tests/tags.yml' is unchanged +************************************************************ From a21107768fa5e4c7f4a4623cce8b61148f306f91 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:17:04 +0000 Subject: [PATCH 117/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 220496328..e485670f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed bug when trying to build indices behind a proxy and wget was unable to download arriba indices [#495](https://github.com/nf-core/rnafusion/issues/495) - Fixed bug in `FUSIONREPORT_DOWNLOAD` when building references with `--no_cosmic parameter` [#555](https://github.com/nf-core/rnafusion/issues/555) - Refactor structure in `FUSIONREPORT_DOWNLOAD` to use cosmic credentials in `ext.args` [#556](https://github.com/nf-core/rnafusion/issues/556) +- Fixed bug in nf-core `RRNATRANSCRIPTS` module [#563](https://github.com/nf-core/rnafusion/issues/563) ### Removed From 52108b6b95cbf76deccd551f41fd4d036f22415f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:51:13 +0000 Subject: [PATCH 118/887] fix: add gffread config --- conf/modules.config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 4390e5f7c..abe0e79d4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,6 +18,10 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + withName: GFFREAD { + ext.args = '-w -S' + } + withName: 'ARRIBA_ARRIBA' { publishDir = [ path: { "${params.outdir}/arriba" }, From 4b19e5aa943d1500412c9cd8184400a2ab8a9476 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:51:22 +0000 Subject: [PATCH 119/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 220496328..175699cc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed bug when trying to build indices behind a proxy and wget was unable to download arriba indices [#495](https://github.com/nf-core/rnafusion/issues/495) - Fixed bug in `FUSIONREPORT_DOWNLOAD` when building references with `--no_cosmic parameter` [#555](https://github.com/nf-core/rnafusion/issues/555) - Refactor structure in `FUSIONREPORT_DOWNLOAD` to use cosmic credentials in `ext.args` [#556](https://github.com/nf-core/rnafusion/issues/556) +- Fixed bug in `GFFREAD` that caused output `gffread_fasta` not being produced [#565](https://github.com/nf-core/rnafusion/issues/565) ### Removed From 96f6f9f97f09045bcbc6f5fc5cb3f11f4270975e Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 2 Dec 2024 18:08:55 +0000 Subject: [PATCH 120/887] fix: update fix from nf-core/modules --- modules.json | 2 +- modules/nf-core/rrnatranscripts/main.nf | 4 ++-- .../rrnatranscripts/rrnatranscripts.diff | 21 ------------------- 3 files changed, 3 insertions(+), 24 deletions(-) delete mode 100644 modules/nf-core/rrnatranscripts/rrnatranscripts.diff diff --git a/modules.json b/modules.json index 66710aa74..15c6ecac1 100644 --- a/modules.json +++ b/modules.json @@ -87,7 +87,7 @@ }, "rrnatranscripts": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "812edf8cf702de42d2d8c7314d6f03b97e20abeb", "installed_by": ["modules"], "patch": "modules/nf-core/rrnatranscripts/rrnatranscripts.diff" }, diff --git a/modules/nf-core/rrnatranscripts/main.nf b/modules/nf-core/rrnatranscripts/main.nf index e5d918473..982c53cd4 100644 --- a/modules/nf-core/rrnatranscripts/main.nf +++ b/modules/nf-core/rrnatranscripts/main.nf @@ -1,5 +1,5 @@ process RRNATRANSCRIPTS { - tag '$rrna' + tag "$gtf" label 'process_single' conda "${moduleDir}/environment.yml" @@ -20,7 +20,7 @@ process RRNATRANSCRIPTS { script: def prefix = task.ext.prefix ?: "${gtf.baseName}" """ - grep -E '^#|rRNA' *.gtf > ${prefix}_rrna_intervals.gtf || true + grep -E '^#|rRNA' ${gtf} > ${prefix}_rrna_intervals.gtf || true if [ ! -s ${prefix}_rrna_intervals.gtf ]; then rm ${prefix}_rrna_intervals.gtf fi diff --git a/modules/nf-core/rrnatranscripts/rrnatranscripts.diff b/modules/nf-core/rrnatranscripts/rrnatranscripts.diff deleted file mode 100644 index 33bb1910a..000000000 --- a/modules/nf-core/rrnatranscripts/rrnatranscripts.diff +++ /dev/null @@ -1,21 +0,0 @@ -Changes in module 'nf-core/rrnatranscripts' -'modules/nf-core/rrnatranscripts/environment.yml' is unchanged -Changes in 'rrnatranscripts/main.nf': ---- modules/nf-core/rrnatranscripts/main.nf -+++ modules/nf-core/rrnatranscripts/main.nf -@@ -20,7 +20,7 @@ - script: - def prefix = task.ext.prefix ?: "${gtf.baseName}" - """ -- grep -E '^#|rRNA' genome.gtf > ${prefix}_rrna_intervals.gtf || true -+ grep -E '^#|rRNA' *.gtf > ${prefix}_rrna_intervals.gtf || true - if [ ! -s ${prefix}_rrna_intervals.gtf ]; then - rm ${prefix}_rrna_intervals.gtf - fi - -'modules/nf-core/rrnatranscripts/meta.yml' is unchanged -'modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py' is unchanged -'modules/nf-core/rrnatranscripts/tests/main.nf.test' is unchanged -'modules/nf-core/rrnatranscripts/tests/main.nf.test.snap' is unchanged -'modules/nf-core/rrnatranscripts/tests/tags.yml' is unchanged -************************************************************ From a56eb9760eb5f34f21c0dba0f6dfc8f408a4ff71 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:16:41 +0000 Subject: [PATCH 121/887] test: add config to fusionreport nf-test --- modules/local/fusionreport/download/tests/main.nf.test | 1 + modules/local/fusionreport/download/tests/nextflow.config | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 modules/local/fusionreport/download/tests/nextflow.config diff --git a/modules/local/fusionreport/download/tests/main.nf.test b/modules/local/fusionreport/download/tests/main.nf.test index db8344b5a..33486764a 100644 --- a/modules/local/fusionreport/download/tests/main.nf.test +++ b/modules/local/fusionreport/download/tests/main.nf.test @@ -5,6 +5,7 @@ nextflow_process { process "FUSIONREPORT_DOWNLOAD" test("Download fusionreport databases") { + config './nextflow.config' when { process { diff --git a/modules/local/fusionreport/download/tests/nextflow.config b/modules/local/fusionreport/download/tests/nextflow.config new file mode 100644 index 000000000..7c1ffb507 --- /dev/null +++ b/modules/local/fusionreport/download/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'FUSIONREPORT_DOWNLOAD' { + ext.args = "--no-cosmic" + } +} From 2be6ceb2eee4e657c33dff5d7e9de2274b5305b9 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Tue, 3 Dec 2024 13:24:04 +0000 Subject: [PATCH 122/887] Added test_build test --- modules/nf-core/rrnatranscripts/main.nf | 2 +- nf-test.config | 2 +- tests/.nftignore | 2 ++ tests/test_build.nf.test.snap | 40 +++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tests/test_build.nf.test.snap diff --git a/modules/nf-core/rrnatranscripts/main.nf b/modules/nf-core/rrnatranscripts/main.nf index 50843c768..461c09331 100644 --- a/modules/nf-core/rrnatranscripts/main.nf +++ b/modules/nf-core/rrnatranscripts/main.nf @@ -1,5 +1,5 @@ process RRNATRANSCRIPTS { - tag '$rrna' + tag "$gtf" label 'process_single' conda "${moduleDir}/environment.yml" diff --git a/nf-test.config b/nf-test.config index cefd5a626..16f182d49 100644 --- a/nf-test.config +++ b/nf-test.config @@ -6,7 +6,7 @@ config { workDir ".nf-test" // location of library folder that is added automatically to the classpath - libDir "tests/pipeline/lib/" + libDir "tests/lib/" // location of an optional nextflow.config file specific for executing tests configFile "nextflow.config" diff --git a/tests/.nftignore b/tests/.nftignore index d70cc56e9..54792ea8f 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -1,3 +1,5 @@ pipeline_info/*.{html,json,txt,yml} references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz +references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa +references/hgnc/HGNC-DB-timestamp.txt diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap new file mode 100644 index 000000000..839fcb30d --- /dev/null +++ b/tests/test_build.nf.test.snap @@ -0,0 +1,40 @@ +{ + "test_build": { + "content": [ + [ + "gatk4", + "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", + "gffread", + "gffread/Homo_sapiens.GRCh38.102.gff3", + "pipeline_info", + "references", + "references/ensembl", + "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", + "references/ensembl/Homo_sapiens.GRCh38.102.genepred", + "references/ensembl/Homo_sapiens.GRCh38.102.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.refflat", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "rrnatranscripts" + ], + [ + "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,092f1bf29fce906ff7b5ece02b4b21c8", + "Homo_sapiens.GRCh38.102.gff3:md5,f559ec7a1e361351b97f4856ddfcbf84", + "Homo_sapiens.GRCh38.102.chr.gtf:md5,0069687307852c63596b4d2ebdbbaf0c", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d527f3eb6b664020cf4d882b5820056f", + "Homo_sapiens.GRCh38.102.genepred:md5,59c577ca4ab033c0ce1feac1e387bcab", + "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", + "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", + "hgnc_complete_set.txt:md5,8c7ac03b6fd965379e081b467170b0fc" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-03T13:14:36.201169164" + } +} \ No newline at end of file From 144c78056ed8fd12ac8bb941901a396db72e33b7 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Tue, 3 Dec 2024 13:57:31 +0000 Subject: [PATCH 123/887] Update snaps --- tests/test_build.nf.test.snap | 4 ++-- tests/test_build_stub.nf.test.snap | 4 +--- tests/test_stub.nf.test.snap | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 839fcb30d..9318d4dc1 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -28,13 +28,13 @@ "Homo_sapiens.GRCh38.102.genepred:md5,59c577ca4ab033c0ce1feac1e387bcab", "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", - "hgnc_complete_set.txt:md5,8c7ac03b6fd965379e081b467170b0fc" + "hgnc_complete_set.txt:md5,34f4bd879d972e511fcb0318df9775b6" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T13:14:36.201169164" + "timestamp": "2024-12-03T13:45:13.303642069" } } \ No newline at end of file diff --git a/tests/test_build_stub.nf.test.snap b/tests/test_build_stub.nf.test.snap index 18d8ef8d1..b59db3799 100644 --- a/tests/test_build_stub.nf.test.snap +++ b/tests/test_build_stub.nf.test.snap @@ -64,7 +64,6 @@ "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", "Homo_sapiens.GRCh38.102.chr.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa:md5,d41d8cd98f00b204e9800998ecf8427e", "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", "Homo_sapiens.GRCh38.102.genepred:md5,d41d8cd98f00b204e9800998ecf8427e", "Homo_sapiens.GRCh38.102.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -74,7 +73,6 @@ "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e", "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e", - "HGNC-DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "hgnc_complete_set.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -100,6 +98,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-29T17:29:03.231447837" + "timestamp": "2024-12-03T13:46:03.887799524" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 63dc16109..7731abfef 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -212,7 +212,7 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-28T21:25:48.332933141" + "timestamp": "2024-12-03T13:46:54.238312636" }, "stub test with fastp trim": { "content": [ @@ -449,6 +449,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-11-28T21:06:29.861338628" + "timestamp": "2024-12-03T13:46:30.067018094" } } \ No newline at end of file From b06bc4e6e02eb5a51e11109f470de5cd6b539a4d Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Tue, 3 Dec 2024 15:04:58 +0000 Subject: [PATCH 124/887] Updated rrnatranscripts --- modules.json | 2 +- modules/nf-core/rrnatranscripts/main.nf | 2 +- tests/test_build.nf.test.snap | 13 ++++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modules.json b/modules.json index e3709392d..13b87c2e9 100644 --- a/modules.json +++ b/modules.json @@ -87,7 +87,7 @@ }, "rrnatranscripts": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "812edf8cf702de42d2d8c7314d6f03b97e20abeb", "installed_by": ["modules"] }, "salmon/index": { diff --git a/modules/nf-core/rrnatranscripts/main.nf b/modules/nf-core/rrnatranscripts/main.nf index 461c09331..982c53cd4 100644 --- a/modules/nf-core/rrnatranscripts/main.nf +++ b/modules/nf-core/rrnatranscripts/main.nf @@ -20,7 +20,7 @@ process RRNATRANSCRIPTS { script: def prefix = task.ext.prefix ?: "${gtf.baseName}" """ - grep -E '^#|rRNA' genome.gtf > ${prefix}_rrna_intervals.gtf || true + grep -E '^#|rRNA' ${gtf} > ${prefix}_rrna_intervals.gtf || true if [ ! -s ${prefix}_rrna_intervals.gtf ]; then rm ${prefix}_rrna_intervals.gtf fi diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 9318d4dc1..df97d56f4 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -2,6 +2,8 @@ "test_build": { "content": [ [ + "bedops", + "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", "gatk4", "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", "gffread", @@ -15,12 +17,15 @@ "references/ensembl/Homo_sapiens.GRCh38.102.genepred", "references/ensembl/Homo_sapiens.GRCh38.102.gtf", "references/ensembl/Homo_sapiens.GRCh38.102.refflat", + "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", "references/hgnc", "references/hgnc/HGNC-DB-timestamp.txt", "references/hgnc/hgnc_complete_set.txt", - "rrnatranscripts" + "rrnatranscripts", + "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" ], [ + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,5bc3ccc76735ae46699a75269f0ea65b", "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,092f1bf29fce906ff7b5ece02b4b21c8", "Homo_sapiens.GRCh38.102.gff3:md5,f559ec7a1e361351b97f4856ddfcbf84", "Homo_sapiens.GRCh38.102.chr.gtf:md5,0069687307852c63596b4d2ebdbbaf0c", @@ -28,13 +33,15 @@ "Homo_sapiens.GRCh38.102.genepred:md5,59c577ca4ab033c0ce1feac1e387bcab", "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", - "hgnc_complete_set.txt:md5,34f4bd879d972e511fcb0318df9775b6" + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,0abf61877f65247b15c438d605d85599", + "hgnc_complete_set.txt:md5,34f4bd879d972e511fcb0318df9775b6", + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,744bf505deb50837b15441e808cad345" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T13:45:13.303642069" + "timestamp": "2024-12-03T15:04:03.186303848" } } \ No newline at end of file From 2519d663a5f6e5977a1849576291b3a71f60d072 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Tue, 3 Dec 2024 16:46:16 +0000 Subject: [PATCH 125/887] Use latest-stable instead of latest-everything in CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2cc8fba44..1c8832e2f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: matrix: NXF_VER: - "24.04.2" - - "latest-everything" + - "latest-stable" test_profile: - "test_stub" - "test_build_stub" From b4ff921ed1632934df7f4d3d27d7db639f20e54a Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:39:03 +0000 Subject: [PATCH 126/887] test: add latest-stable to fix issues in ci --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2751a4760..251f50340 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: matrix: NXF_VER: - "24.04.2" - - "latest-everything" + - "latest-stable" trim_parameters: - "--fastp_trim false" - "--fastp_trim true" From bd419d4be7373d66afde4839504151ec866d3168 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Tue, 3 Dec 2024 19:01:30 +0000 Subject: [PATCH 127/887] Addressing PR comments --- .github/workflows/ci.yml | 1 - conf/test_build.config | 6 +- conf/test_full.config | 4 + modules/local/fusioninspector/environment.yml | 10 ++ modules/local/fusioninspector/main.nf | 1 - .../local/starfusion/build/environment.yml | 10 ++ modules/local/starfusion/build/main.nf | 1 - .../local/starfusion/detect/environment.yml | 10 ++ modules/local/starfusion/detect/main.nf | 1 - .../local/starfusion/download/environment.yml | 10 ++ modules/local/starfusion/download/main.nf | 1 - tests/test.nf.test | 73 ------------- tests/test_build.nf.test | 1 - tests/test_build_stub.nf.test | 41 ------- tests/test_build_stub.nf.test.snap | 103 ------------------ tests/test_cosmic.nf.test | 5 +- tests/test_stub.nf.test | 13 +-- 17 files changed, 53 insertions(+), 238 deletions(-) create mode 100644 modules/local/fusioninspector/environment.yml create mode 100644 modules/local/starfusion/build/environment.yml create mode 100644 modules/local/starfusion/detect/environment.yml create mode 100644 modules/local/starfusion/download/environment.yml delete mode 100644 tests/test.nf.test delete mode 100644 tests/test_build_stub.nf.test delete mode 100644 tests/test_build_stub.nf.test.snap diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1c8832e2f..71ff72459 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,6 @@ jobs: - "latest-stable" test_profile: - "test_stub" - - "test_build_stub" - "test_build" compute_profile: - "docker" diff --git a/conf/test_build.config b/conf/test_build.config index 32ee1bb62..02ca2a170 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -23,6 +23,8 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - build_references = true - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' + build_references = true + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' + no_cosmic = true + all = true } diff --git a/conf/test_full.config b/conf/test_full.config index 467445604..cfcb7865b 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,4 +15,8 @@ params { // Input data for full size test input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' all = true + // TODO + // test_full can't run currently because the references must be given and they are not available. + // This profile should be updated once they get uploaded. + } diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml new file mode 100644 index 000000000..06a9828af --- /dev/null +++ b/modules/local/fusioninspector/environment.yml @@ -0,0 +1,10 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::star-fusion=1.7.0 + - bioconda::trinity=2.15.2 + - bioconda::samtools=1.21 + - bioconda::star=2.7.11b diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 0f9f0abb0..59d513fbb 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -2,7 +2,6 @@ process FUSIONINSPECTOR { tag "$meta.id" label 'process_high' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml new file mode 100644 index 000000000..06a9828af --- /dev/null +++ b/modules/local/starfusion/build/environment.yml @@ -0,0 +1,10 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::star-fusion=1.7.0 + - bioconda::trinity=2.15.2 + - bioconda::samtools=1.21 + - bioconda::star=2.7.11b diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index e7b969a2f..cedf8c461 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -1,7 +1,6 @@ process STARFUSION_BUILD { tag 'star-fusion' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: diff --git a/modules/local/starfusion/detect/environment.yml b/modules/local/starfusion/detect/environment.yml new file mode 100644 index 000000000..06a9828af --- /dev/null +++ b/modules/local/starfusion/detect/environment.yml @@ -0,0 +1,10 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::star-fusion=1.7.0 + - bioconda::trinity=2.15.2 + - bioconda::samtools=1.21 + - bioconda::star=2.7.11b diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index a3a433652..3ed54af2d 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -2,7 +2,6 @@ process STARFUSION { tag "$meta.id" label 'process_high' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: diff --git a/modules/local/starfusion/download/environment.yml b/modules/local/starfusion/download/environment.yml new file mode 100644 index 000000000..06a9828af --- /dev/null +++ b/modules/local/starfusion/download/environment.yml @@ -0,0 +1,10 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::star-fusion=1.7.0 + - bioconda::trinity=2.15.2 + - bioconda::samtools=1.21 + - bioconda::star=2.7.11b diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index a486b607e..250f13967 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -1,7 +1,6 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' - conda "bioconda::dfam=3.7 bioconda::hmmer=3.4 bioconda::star-fusion=1.7.0 bioconda::trinity=2.15.2 bioconda::samtools=1.21 bioconda::star=2.7.11b" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' output: diff --git a/tests/test.nf.test b/tests/test.nf.test deleted file mode 100644 index be6ab52c2..000000000 --- a/tests/test.nf.test +++ /dev/null @@ -1,73 +0,0 @@ -nextflow_pipeline { - - name "Test pipeline" - script "../main.nf" - profile "test" - tag "pipeline" - tag "pipeline_rnafusion" - tag "test" - - test("test with fastp trim") { - - when { - params { - outdir = "$outputDir" - fastp_trim = true - no_cosmic = true - } - } - - then { - // stable_name: All files + folders in ${params.outdir}/ with a stable name - // Ignore files with timestamps in their names - def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - assertAll( - { assert workflow.success}, - { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() } - ) - } - } - - test("test no fastp trim") { - - when { - params { - outdir = "$outputDir" - fastp_trim = false - no_cosmic = true - } - } - - then { - // stable_name: All files + folders in ${params.outdir}/ with a stable name - // Ignore files with timestamps in their names - def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - assertAll( - { assert workflow.success}, - { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() } - ) - } - } -} diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test index a800b0e6b..1c0830deb 100644 --- a/tests/test_build.nf.test +++ b/tests/test_build.nf.test @@ -12,7 +12,6 @@ nextflow_pipeline { when { params { outdir = "$outputDir" - no_cosmic = true } } diff --git a/tests/test_build_stub.nf.test b/tests/test_build_stub.nf.test deleted file mode 100644 index 3235720ac..000000000 --- a/tests/test_build_stub.nf.test +++ /dev/null @@ -1,41 +0,0 @@ -nextflow_pipeline { - - name "Test pipeline" - script "../main.nf" - profile "test_build" - options "-stub" // TODO remove once the pipeline is fixed - tag "pipeline" - tag "pipeline_rnafusion" - tag "test_build_stub" - - test("stub test_build") { - - when { - params { - outdir = "$outputDir" - cosmic_username = "user" // placeholder string to avoid null input val in process - cosmic_passwd = "password" // placeholder string to avoid null input val in process - all = true - } - } - - then { - // stable_name: All files + folders in ${params.outdir}/ with a stable name - // Ignore files with timestamps in their names - def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') - assertAll( - { assert workflow.success}, - { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() } - ) - } - } -} diff --git a/tests/test_build_stub.nf.test.snap b/tests/test_build_stub.nf.test.snap deleted file mode 100644 index b59db3799..000000000 --- a/tests/test_build_stub.nf.test.snap +++ /dev/null @@ -1,103 +0,0 @@ -{ - "stub test_build": { - "content": [ - 14, - [ - "bedops", - "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", - "gffread", - "gffread/Homo_sapiens.GRCh38.102.gff3", - "pipeline_info", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/ensembl", - "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", - "references/ensembl/Homo_sapiens.GRCh38.102.genepred", - "references/ensembl/Homo_sapiens.GRCh38.102.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.refflat", - "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", - "references/fusion_report_db", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/fusioncatcher", - "references/fusioncatcher/human_v102", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ref_annot.cdna.fa", - "rrnatranscripts", - "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" - ], - [ - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", - "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.chr.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.genepred:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102.refflat:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", - "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e", - "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e", - "hgnc_complete_set.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", - "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "SA:md5,d41d8cd98f00b204e9800998ecf8427e", - "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-03T13:46:03.887799524" - } -} \ No newline at end of file diff --git a/tests/test_cosmic.nf.test b/tests/test_cosmic.nf.test index ffa1e4896..9a56e76e5 100644 --- a/tests/test_cosmic.nf.test +++ b/tests/test_cosmic.nf.test @@ -43,7 +43,6 @@ nextflow_pipeline { when { params { outdir = "$outputDir" - fastp_trim = false } } @@ -73,8 +72,8 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" - fastp_trim = false + outdir = "$outputDir" + build_references = true } } diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index 90d9bb647..351412a47 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -3,7 +3,7 @@ nextflow_pipeline { name "Test pipeline" script "../main.nf" profile "test" - options "-stub" // TODO remove once the pipeline is fixed + options "-stub" // TODO remove once reference files are available tag "pipeline" tag "pipeline_rnafusion" tag "test_stub" @@ -14,9 +14,6 @@ nextflow_pipeline { params { outdir = "$outputDir" fastp_trim = true - cosmic_username = "user" // placeholder string to avoid null input val in process - cosmic_passwd = "password" // placeholder string to avoid null input val in process - all = true } } @@ -25,7 +22,7 @@ nextflow_pipeline { // Ignore files with timestamps in their names def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed assertAll( { assert workflow.success}, { assert snapshot( @@ -36,7 +33,7 @@ nextflow_pipeline { // All stable path name, with a relative path stable_name, // All files with stable contents - stable_path + // stable_path // TODO uncomment once -stub is removed ).match() } ) } @@ -47,10 +44,6 @@ nextflow_pipeline { when { params { outdir = "$outputDir" - fastp_trim = false - cosmic_username = "user" // placeholder string to avoid null input val in process - cosmic_passwd = "password" // placeholder string to avoid null input val in process - all = true } } From 0f88731f8e8c5af8254dc0f4cbb1a3d8eb8c34bd Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Tue, 3 Dec 2024 19:31:05 +0000 Subject: [PATCH 128/887] Updated snaps --- tests/test_build.nf.test | 1 + tests/test_build.nf.test.snap | 2 +- tests/test_stub.nf.test | 4 +- tests/test_stub.nf.test.snap | 361 +--------------------------------- 4 files changed, 10 insertions(+), 358 deletions(-) diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test index 1c0830deb..1999a3b47 100644 --- a/tests/test_build.nf.test +++ b/tests/test_build.nf.test @@ -12,6 +12,7 @@ nextflow_pipeline { when { params { outdir = "$outputDir" + all = false // Output files when running all are too big for CI } } diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index df97d56f4..0833ced64 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -42,6 +42,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T15:04:03.186303848" + "timestamp": "2024-12-03T19:26:00.897559313" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index 351412a47..41c7194f0 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -52,7 +52,7 @@ nextflow_pipeline { // Ignore files with timestamps in their names def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) // stable_path: All files in ${params.outdir}/ with stable content - def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed assertAll( { assert workflow.success}, { assert snapshot( @@ -63,7 +63,7 @@ nextflow_pipeline { // All stable path name, with a relative path stable_name, // All files with stable contents - stable_path + // stable_path // TODO uncomment once -stub is removed ).match() } ) } diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 7731abfef..3b83c2400 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,67 +1,22 @@ { "stub test no fastp trim": { "content": [ - 15, + 4, { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER": { - "fusioncatcher": 1.33 - }, "FUSIONREPORT": { "fusion_report": "2.1.5" }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.2.0-1-g3948afb6b" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_INDEX_FOR_STARFUSION": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.7.0" - }, - "STAR_FOR_ARRIBA": { - "star": "2.7.10a", - "samtools": 1.18, - "gawk": "5.1.0" - }, - "STAR_FOR_STARFUSION": { - "star": "2.7.10a", - "samtools": 1.18, - "gawk": "5.1.0" - }, - "STRINGTIE_MERGE": { - "stringtie": "2.2.1" - }, - "STRINGTIE_STRINGTIE": { - "stringtie": "2.2.1" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", "fastqc", "fastqc/test.html", "fastqc/test.zip", - "fusioncatcher", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -74,153 +29,24 @@ "multiqc/multiqc_data", "multiqc/multiqc_plots", "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv", - "stringtie", - "stringtie/[:]", - "stringtie/[:]/stringtie.merged.gtf", - "stringtie/test.ballgown", - "stringtie/test.coverage.gtf", - "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" - ], - [ - "test.arriba.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", - "test.arriba.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusioncatcher.fusion-genes.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusioncatcher.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusioncatcher.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "AAA_BBB.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusionreport.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusionreport_filtered.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusions.csv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusions.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.bai:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.bam.metrics:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_collectinsertsize.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_collectinsertsize.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_meta_info.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.starfusion.abridged.coding_effect.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.starfusion.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.starfusion.fusion_predictions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "stringtie.merged.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + "salmon/test_meta_info.json" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T13:46:54.238312636" + "timestamp": "2024-12-03T19:27:00.717876194" }, "stub test with fastp trim": { "content": [ - 17, + 6, { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, "FASTP": { "fastp": "0.23.4" }, @@ -230,52 +56,14 @@ "FASTQC_FOR_FASTP": { "fastqc": "0.12.1" }, - "FUSIONCATCHER": { - "fusioncatcher": 1.33 - }, "FUSIONREPORT": { "fusion_report": "2.1.5" }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.2.0-1-g3948afb6b" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_INDEX_FOR_STARFUSION": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.7.0" - }, - "STAR_FOR_ARRIBA": { - "star": "2.7.10a", - "samtools": 1.18, - "gawk": "5.1.0" - }, - "STAR_FOR_STARFUSION": { - "star": "2.7.10a", - "samtools": 1.18, - "gawk": "5.1.0" - }, - "STRINGTIE_MERGE": { - "stringtie": "2.2.1" - }, - "STRINGTIE_STRINGTIE": { - "stringtie": "2.2.1" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", "fastp", "fastp/test.fastp.html", "fastp/test.fastp.json", @@ -288,10 +76,6 @@ "fastqc_for_fastp", "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", - "fusioncatcher", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -304,151 +88,18 @@ "multiqc/multiqc_data", "multiqc/multiqc_plots", "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv", - "stringtie", - "stringtie/[:]", - "stringtie/[:]/stringtie.merged.gtf", - "stringtie/test.ballgown", - "stringtie/test.coverage.gtf", - "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" - ], - [ - "test.arriba.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", - "test.arriba.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260", - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_trimmed.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_trimmed.zip:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusioncatcher.fusion-genes.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusioncatcher.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusioncatcher.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "AAA_BBB.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusionreport.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusionreport_filtered.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusions.csv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fusions.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.bai:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.bam.metrics:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.rna_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_collectinsertsize.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_collectinsertsize.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_meta_info.json:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.starfusion.abridged.coding_effect.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.starfusion.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.starfusion.fusion_predictions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "stringtie.merged.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.ballgown:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.coverage.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.gene.abundance.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + "salmon/test_meta_info.json" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T13:46:30.067018094" + "timestamp": "2024-12-03T19:26:43.375635514" } } \ No newline at end of file From 4b607dd907794888f7d3e0d717c59d68d5ea6fdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Tue, 3 Dec 2024 19:56:37 +0000 Subject: [PATCH 129/887] change module structure --- subworkflows/local/qc_workflow/main.nf | 40 ++++++ .../local/qc_workflow/test/main.nf.test | 133 ++++++++++++++++++ .../local/qc_workflow/test/nextflow.config | 10 ++ 3 files changed, 183 insertions(+) create mode 100644 subworkflows/local/qc_workflow/main.nf create mode 100644 subworkflows/local/qc_workflow/test/main.nf.test create mode 100644 subworkflows/local/qc_workflow/test/nextflow.config diff --git a/subworkflows/local/qc_workflow/main.nf b/subworkflows/local/qc_workflow/main.nf new file mode 100644 index 000000000..a8473d446 --- /dev/null +++ b/subworkflows/local/qc_workflow/main.nf @@ -0,0 +1,40 @@ +// +// Check input samplesheet and get read channels +// + +include { PICARD_COLLECTRNASEQMETRICS } from '../../../modules/nf-core/picard/collectrnaseqmetrics' +include { GATK4_MARKDUPLICATES } from '../../../modules/nf-core/gatk4/markduplicates' +include { PICARD_COLLECTINSERTSIZEMETRICS } from '../../../modules/nf-core/picard/collectinsertsizemetrics' + +workflow QC_WORKFLOW { + take: + ch_bam_sorted // channel [ meta, bam ] + ch_chrgtf // channel [ meta, gtf ] + ch_refflat // channel [ meta, refflat ] + ch_fasta // channel [ meta, fasta ] + ch_fai // channel [ meta, fai ] + ch_rrna_interval // channel [ meta, interval ] + + main: + ch_versions = Channel.empty() + + PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted, ch_refflat.map{ meta, refflat -> [ refflat ] }, ch_fasta.map{ meta, fasta -> [ fasta ] }, ch_rrna_interval.map{ meta, intervals -> [ intervals ] }.ifEmpty([]) ) // Some chromosome or annotation may not have rRNA genes + ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) + ch_rnaseq_metrics = PICARD_COLLECTRNASEQMETRICS.out.metrics + + GATK4_MARKDUPLICATES(ch_bam_sorted, ch_fasta.map { meta, fasta -> [ fasta ]}, ch_fai.map { meta, fasta_fai -> [ fasta_fai ]}) + ch_versions = ch_versions.mix(GATK4_MARKDUPLICATES.out.versions) + ch_duplicate_metrics = GATK4_MARKDUPLICATES.out.metrics + + PICARD_COLLECTINSERTSIZEMETRICS(ch_bam_sorted) + ch_versions = ch_versions.mix(PICARD_COLLECTINSERTSIZEMETRICS.out.versions) + ch_insertsize_metrics = PICARD_COLLECTINSERTSIZEMETRICS.out.metrics + + emit: + versions = ch_versions + rnaseq_metrics = ch_rnaseq_metrics + duplicate_metrics = ch_duplicate_metrics + insertsize_metrics = ch_insertsize_metrics + +} + diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test new file mode 100644 index 000000000..57dd38da5 --- /dev/null +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -0,0 +1,133 @@ +nextflow_workflow { + + name "Test Subworkflow QC_WORKFLOW" + script "../main.nf" + config "./nextflow.config" + workflow "QC_WORKFLOW" + tag "qc" + tag "subworkflow" + + test("QC_WORKFLOW - Homo sapiens chr22") { + + // Generate refflat file + setup { + + // Create refflat reference + run("UCSC_GTFTOGENEPRED") { + script "../../../../modules/nf-core/ucsc/gtftogenepred/main.nf" + process { + """ + input[0] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", + checkIfExists: true + ) + .map{ [ [id:it.Name], it ] } + """ + } + } + + // Filter GTF to extract rRNA genes + run("RRNATRANSCRIPTS") { + script "../../../../modules/nf-core/rrnatranscripts/main.nf" + process { + """ + input[0] = Channel.fromPath("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) + """ + } + } + + // Convert rRNA GTF to BED + run("BEDOPS_CONVERT2BED") { + script "../../../../modules/nf-core/bedops/convert2bed/main.nf" + process { + """ + input[0] = RRNATRANSCRIPTS.out.rrna_gtf.map{ it -> [ [id:it.Name], it ] } + """ + } + } + + // Convert rRNA BED to interval list (the necessary file) + run("GATK4_BEDTOINTERVALLIST") { + script "../../../../modules/nf-core/gatk4/bedtointervallist/main.nf" + process { + """ + input[0] = BEDOPS_CONVERT2BED.out.bed + input[1] = Channel.of( + [ + [id: 'chr22_dic'], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.dic", checkIfExist: true) + ] + ) + """ + } + } + + } + + when { + // Params to activate modules ext.when condition + params { + skip_qc = false + fusioninspector_only = false + starfusion = true + all = true + } + + workflow { + """ + // ch_bam_sorted + input[0] = Channel.of( + [ + [id: "chr22_bam"], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + ]) + + // ch_bam_sorted_indexed + input[1] = Channel.of( + [ + [id: "chr22_bam"], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) + ]) + + // ch_chrgtf + input[2] = Channel.of( + [ + [ id: "chr22_gtf" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) + ]) + + // ch_refflat + input[3] = UCSC_GTFTOGENEPRED.out.refflat + + // ch_fasta + input[4] = Channel.of( + [ + [ id: "test_ref" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta", checkIfExist: true) + ] ) + + // ch_fai + input[5] = Channel.of( + [ + [ id: "test_ref" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta.fai", checkIfExist: true) + ] ) + + // ch rRNA interval list + input[6] = GATK4_BEDTOINTERVALLIST.out.interval_list + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + + } + +} diff --git a/subworkflows/local/qc_workflow/test/nextflow.config b/subworkflows/local/qc_workflow/test/nextflow.config new file mode 100644 index 000000000..498c456f0 --- /dev/null +++ b/subworkflows/local/qc_workflow/test/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: PICARD_COLLECTRNASEQMETRICS { + ext.args = "--STRAND_SPECIFICITY SECOND_READ_TRANSCRIPTION_STRAND" + } + + withName: GATK4_BEDTOINTERVALLIST { + ext.args = "--KEEP_LENGTH_ZERO_INTERVALS true" + } + +} From 0a3f3e2d4052cad4ca08936a03676ca772d4a502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Tue, 3 Dec 2024 19:56:54 +0000 Subject: [PATCH 130/887] update modules --- modules.json | 2 +- modules/nf-core/rrnatranscripts/main.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index e3709392d..13b87c2e9 100644 --- a/modules.json +++ b/modules.json @@ -87,7 +87,7 @@ }, "rrnatranscripts": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "812edf8cf702de42d2d8c7314d6f03b97e20abeb", "installed_by": ["modules"] }, "salmon/index": { diff --git a/modules/nf-core/rrnatranscripts/main.nf b/modules/nf-core/rrnatranscripts/main.nf index 50843c768..982c53cd4 100644 --- a/modules/nf-core/rrnatranscripts/main.nf +++ b/modules/nf-core/rrnatranscripts/main.nf @@ -1,5 +1,5 @@ process RRNATRANSCRIPTS { - tag '$rrna' + tag "$gtf" label 'process_single' conda "${moduleDir}/environment.yml" @@ -20,7 +20,7 @@ process RRNATRANSCRIPTS { script: def prefix = task.ext.prefix ?: "${gtf.baseName}" """ - grep -E '^#|rRNA' genome.gtf > ${prefix}_rrna_intervals.gtf || true + grep -E '^#|rRNA' ${gtf} > ${prefix}_rrna_intervals.gtf || true if [ ! -s ${prefix}_rrna_intervals.gtf ]; then rm ${prefix}_rrna_intervals.gtf fi From e63d5a9aff7d5ddaf8a0d5fbe51f38c66af87442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Tue, 3 Dec 2024 19:57:16 +0000 Subject: [PATCH 131/887] run test and update workflow --- subworkflows/local/qc_workflow.nf | 43 ----------- .../local/qc_workflow/test/main.nf.test.snap | 71 +++++++++++++++++++ workflows/rnafusion.nf | 1 - 3 files changed, 71 insertions(+), 44 deletions(-) delete mode 100644 subworkflows/local/qc_workflow.nf create mode 100644 subworkflows/local/qc_workflow/test/main.nf.test.snap diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf deleted file mode 100644 index 5e121dc81..000000000 --- a/subworkflows/local/qc_workflow.nf +++ /dev/null @@ -1,43 +0,0 @@ -// -// Check input samplesheet and get read channels -// - -include { PICARD_COLLECTRNASEQMETRICS } from '../../modules/nf-core/picard/collectrnaseqmetrics/main' -include { GATK4_MARKDUPLICATES } from '../../modules/nf-core/gatk4/markduplicates/main' -include { PICARD_COLLECTINSERTSIZEMETRICS } from '../../modules/nf-core/picard/collectinsertsizemetrics/main' - -workflow QC_WORKFLOW { - take: - ch_reads_all - ch_bam_sorted - ch_chrgtf - ch_refflat - ch_fasta - ch_fai - ch_rrna_interval - - main: - ch_versions = Channel.empty() - - PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted, ch_refflat.map { meta, refflat -> [refflat]}, ch_fasta.map { meta, fasta -> [fasta]}, ch_rrna_interval.map { meta, rrna_interval -> [rrna_interval]}) - ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) - ch_rnaseq_metrics = Channel.empty().mix(PICARD_COLLECTRNASEQMETRICS.out.metrics) - - GATK4_MARKDUPLICATES(ch_bam_sorted, ch_fasta.map { meta, fasta -> [ fasta ]}, ch_fai.map { meta, fasta_fai -> [ fasta_fai ]}) - ch_versions = ch_versions.mix(GATK4_MARKDUPLICATES.out.versions) - ch_duplicate_metrics = Channel.empty().mix(GATK4_MARKDUPLICATES.out.metrics) - - PICARD_COLLECTINSERTSIZEMETRICS(ch_bam_sorted) - ch_versions = ch_versions.mix(PICARD_COLLECTINSERTSIZEMETRICS.out.versions) - ch_insertsize_metrics = Channel.empty().mix(PICARD_COLLECTINSERTSIZEMETRICS.out.metrics) - - - - emit: - versions = ch_versions - rnaseq_metrics = ch_rnaseq_metrics - duplicate_metrics = ch_duplicate_metrics - insertsize_metrics = ch_insertsize_metrics - -} - diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap new file mode 100644 index 000000000..3315ae19b --- /dev/null +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -0,0 +1,71 @@ +{ + "QC_WORKFLOW - Homo sapiens chr22": { + "content": [ + { + "0": [ + "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139", + "versions.yml:md5,5b495d995918c2b39708211c01036a5a", + "versions.yml:md5,5c0ffe79bb7206c2652cf7f477f9b53f" + ], + "1": [ + [ + { + "id": "chr22_bam" + }, + "chr22_bam.rna_metrics:md5,3415d05e545714d98114ab36a25afd91" + ] + ], + "2": [ + [ + { + "id": "chr22_bam" + }, + "chr22_bam.bam.metrics:md5,3c9779078c3afdb9d438956473111bb5" + ] + ], + "3": [ + [ + { + "id": "chr22_bam" + }, + "chr22_bam_collectinsertsize.txt:md5,846e2e72f7c4cb287d778b1739fa221e" + ] + ], + "duplicate_metrics": [ + [ + { + "id": "chr22_bam" + }, + "chr22_bam.bam.metrics:md5,3c9779078c3afdb9d438956473111bb5" + ] + ], + "insertsize_metrics": [ + [ + { + "id": "chr22_bam" + }, + "chr22_bam_collectinsertsize.txt:md5,846e2e72f7c4cb287d778b1739fa221e" + ] + ], + "rnaseq_metrics": [ + [ + { + "id": "chr22_bam" + }, + "chr22_bam.rna_metrics:md5,3415d05e545714d98114ab36a25afd91" + ] + ], + "versions": [ + "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139", + "versions.yml:md5,5b495d995918c2b39708211c01036a5a", + "versions.yml:md5,5c0ffe79bb7206c2652cf7f477f9b53f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-03T19:48:07.253685279" + } +} \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 2a2c6d317..1f7890b54 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -147,7 +147,6 @@ workflow RNAFUSION { //QC QC_WORKFLOW ( - ch_reads_all, STARFUSION_WORKFLOW.out.ch_bam_sorted, ch_chrgtf, ch_refflat, From 474a89e9fec57aecacab55f1ee204f24dfd91389 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Tue, 3 Dec 2024 20:05:24 +0000 Subject: [PATCH 132/887] add missing conda lines --- modules/local/fusioninspector/main.nf | 1 + modules/local/starfusion/build/main.nf | 1 + modules/local/starfusion/detect/main.nf | 1 + modules/local/starfusion/download/main.nf | 1 + 4 files changed, 4 insertions(+) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 59d513fbb..ae05ceb42 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -2,6 +2,7 @@ process FUSIONINSPECTOR { tag "$meta.id" label 'process_high' + conda "${moduleDir}/environment.yml" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index cedf8c461..6ac3c6942 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -1,6 +1,7 @@ process STARFUSION_BUILD { tag 'star-fusion' + conda "${moduleDir}/environment.yml" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 3ed54af2d..273967707 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -2,6 +2,7 @@ process STARFUSION { tag "$meta.id" label 'process_high' + conda "${moduleDir}/environment.yml" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' input: diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 250f13967..d06684869 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -1,6 +1,7 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' + conda "${moduleDir}/environment.yml" container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' output: From 7c942d88b98cbf9681283a66b0a2212b767cf6f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Tue, 3 Dec 2024 21:09:20 +0000 Subject: [PATCH 133/887] update test to constant poprtion --- .../local/qc_workflow/test/main.nf.test | 26 +- .../local/qc_workflow/test/main.nf.test.snap | 465 +++++++++++++++--- 2 files changed, 415 insertions(+), 76 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index 57dd38da5..66a4a2cb8 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -83,40 +83,32 @@ nextflow_workflow { file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) ]) - // ch_bam_sorted_indexed - input[1] = Channel.of( - [ - [id: "chr22_bam"], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) - ]) - // ch_chrgtf - input[2] = Channel.of( + input[1] = Channel.of( [ [ id: "chr22_gtf" ], file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) ]) // ch_refflat - input[3] = UCSC_GTFTOGENEPRED.out.refflat + input[2] = UCSC_GTFTOGENEPRED.out.refflat // ch_fasta - input[4] = Channel.of( + input[3] = Channel.of( [ [ id: "test_ref" ], file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta", checkIfExist: true) ] ) // ch_fai - input[5] = Channel.of( + input[4] = Channel.of( [ [ id: "test_ref" ], file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta.fai", checkIfExist: true) ] ) // ch rRNA interval list - input[6] = GATK4_BEDTOINTERVALLIST.out.interval_list + input[5] = GATK4_BEDTOINTERVALLIST.out.interval_list """ } } @@ -124,10 +116,14 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot(workflow.out).match() } + { assert snapshot( + file( workflow.out.versions[0] ), + file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1], + file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1], + file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1], + ).match() } ) } - } } diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap index 3315ae19b..8fc12f11d 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test.snap +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -1,71 +1,414 @@ { "QC_WORKFLOW - Homo sapiens chr22": { "content": [ - { - "0": [ - "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139", - "versions.yml:md5,5b495d995918c2b39708211c01036a5a", - "versions.yml:md5,5c0ffe79bb7206c2652cf7f477f9b53f" - ], - "1": [ - [ - { - "id": "chr22_bam" - }, - "chr22_bam.rna_metrics:md5,3415d05e545714d98114ab36a25afd91" - ] - ], - "2": [ - [ - { - "id": "chr22_bam" - }, - "chr22_bam.bam.metrics:md5,3c9779078c3afdb9d438956473111bb5" - ] - ], - "3": [ - [ - { - "id": "chr22_bam" - }, - "chr22_bam_collectinsertsize.txt:md5,846e2e72f7c4cb287d778b1739fa221e" - ] - ], - "duplicate_metrics": [ - [ - { - "id": "chr22_bam" - }, - "chr22_bam.bam.metrics:md5,3c9779078c3afdb9d438956473111bb5" - ] - ], - "insertsize_metrics": [ - [ - { - "id": "chr22_bam" - }, - "chr22_bam_collectinsertsize.txt:md5,846e2e72f7c4cb287d778b1739fa221e" - ] - ], - "rnaseq_metrics": [ - [ - { - "id": "chr22_bam" - }, - "chr22_bam.rna_metrics:md5,3415d05e545714d98114ab36a25afd91" - ] - ], - "versions": [ - "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139", - "versions.yml:md5,5b495d995918c2b39708211c01036a5a", - "versions.yml:md5,5c0ffe79bb7206c2652cf7f477f9b53f" - ] - } + "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139", + [ + "", + "## METRICS CLASS\tpicard.analysis.RnaSeqMetrics", + "PF_BASES\tPF_ALIGNED_BASES\tRIBOSOMAL_BASES\tCODING_BASES\tUTR_BASES\tINTRONIC_BASES\tINTERGENIC_BASES\tIGNORED_READS\tCORRECT_STRAND_READS\tINCORRECT_STRAND_READS\tNUM_R1_TRANSCRIPT_STRAND_READS\tNUM_R2_TRANSCRIPT_STRAND_READS\tNUM_UNEXPLAINED_READS\tPCT_R1_TRANSCRIPT_STRAND_READS\tPCT_R2_TRANSCRIPT_STRAND_READS\tPCT_RIBOSOMAL_BASES\tPCT_CODING_BASES\tPCT_UTR_BASES\tPCT_INTRONIC_BASES\tPCT_INTERGENIC_BASES\tPCT_MRNA_BASES\tPCT_USABLE_BASES\tPCT_CORRECT_STRAND_READS\tMEDIAN_CV_COVERAGE\tMEDIAN_5PRIME_BIAS\tMEDIAN_3PRIME_BIAS\tMEDIAN_5PRIME_TO_3PRIME_BIAS\tSAMPLE\tLIBRARY\tREAD_GROUP", + "672131\t670989\t\t0\t323630\t84236\t263123\t0\t1324\t1328\t664\t661\t1\t0.501132\t0.498868\t\t0\t0.482318\t0.12554\t0.392142\t0.482318\t0.481498\t0.499246\t4.318717\t0\t0.529614\t0\t\t\t", + "", + "## HISTOGRAM\tjava.lang.Integer", + "normalized_position\tAll_Reads.normalized_coverage", + "0\t0", + "1\t0", + "2\t0", + "3\t0", + "4\t0", + "5\t0", + "6\t0", + "7\t0", + "8\t0", + "9\t0", + "10\t0", + "11\t0", + "12\t0", + "13\t0", + "14\t0", + "15\t0", + "16\t0", + "17\t0", + "18\t0", + "19\t0", + "20\t0", + "21\t0", + "22\t0", + "23\t0", + "24\t0", + "25\t0", + "26\t0", + "27\t0", + "28\t0", + "29\t0", + "30\t0", + "31\t0", + "32\t0", + "33\t0", + "34\t0", + "35\t0", + "36\t0", + "37\t0", + "38\t0", + "39\t0", + "40\t0", + "41\t0", + "42\t0", + "43\t0", + "44\t0", + "45\t0", + "46\t0", + "47\t0", + "48\t0", + "49\t0", + "50\t0", + "51\t0", + "52\t0", + "53\t0", + "54\t0", + "55\t0", + "56\t0", + "57\t0", + "58\t0", + "59\t0", + "60\t0", + "61\t0", + "62\t0.007542", + "63\t0.353257", + "64\t0.901997", + "65\t0.824165", + "66\t0.103172", + "67\t0.004348", + "68\t0", + "69\t0", + "70\t0", + "71\t0", + "72\t0", + "73\t0", + "74\t0", + "75\t0", + "76\t0", + "77\t0", + "78\t0", + "79\t0", + "80\t0", + "81\t0", + "82\t0", + "83\t0", + "84\t0", + "85\t0", + "86\t0", + "87\t0", + "88\t0", + "89\t0", + "90\t0", + "91\t0.651006", + "92\t6.035418", + "93\t15.914658", + "94\t23.771379", + "95\t25.867993", + "96\t18.602848", + "97\t6.578541", + "98\t0.156266", + "99\t0.03077", + "100\t0.012318", + "" + ], + [ + "", + "## METRICS CLASS\tpicard.sam.DuplicationMetrics", + "LIBRARY\tUNPAIRED_READS_EXAMINED\tREAD_PAIRS_EXAMINED\tSECONDARY_OR_SUPPLEMENTARY_RDS\tUNMAPPED_READS\tUNPAIRED_READ_DUPLICATES\tREAD_PAIR_DUPLICATES\tREAD_PAIR_OPTICAL_DUPLICATES\tPERCENT_DUPLICATION\tESTIMATED_LIBRARY_SIZE", + "testN\t0\t2820\t2\t2\t0\t828\t0\t0.293617\t3807", + "", + "## HISTOGRAM\tjava.lang.Double", + "BIN\tCoverageMult\tall_sets\tnon_optical_sets", + "1.0\t0.999986\t1178\t1178", + "2.0\t1.47674\t800\t800", + "3.0\t1.704038\t14\t14", + "4.0\t1.812404\t0\t0", + "5.0\t1.864069\t0\t0", + "6.0\t1.888701\t0\t0", + "7.0\t1.900444\t0\t0", + "8.0\t1.906043\t0\t0", + "9.0\t1.908712\t0\t0", + "10.0\t1.909985\t0\t0", + "11.0\t1.910592\t0\t0", + "12.0\t1.910881\t0\t0", + "13.0\t1.911019\t0\t0", + "14.0\t1.911085\t0\t0", + "15.0\t1.911116\t0\t0", + "16.0\t1.911131\t0\t0", + "17.0\t1.911138\t0\t0", + "18.0\t1.911141\t0\t0", + "19.0\t1.911143\t0\t0", + "20.0\t1.911144\t0\t0", + "21.0\t1.911144\t0\t0", + "22.0\t1.911144\t0\t0", + "23.0\t1.911145\t0\t0", + "24.0\t1.911145\t0\t0", + "25.0\t1.911145\t0\t0", + "26.0\t1.911145\t0\t0", + "27.0\t1.911145\t0\t0", + "28.0\t1.911145\t0\t0", + "29.0\t1.911145\t0\t0", + "30.0\t1.911145\t0\t0", + "31.0\t1.911145\t0\t0", + "32.0\t1.911145\t0\t0", + "33.0\t1.911145\t0\t0", + "34.0\t1.911145\t0\t0", + "35.0\t1.911145\t0\t0", + "36.0\t1.911145\t0\t0", + "37.0\t1.911145\t0\t0", + "38.0\t1.911145\t0\t0", + "39.0\t1.911145\t0\t0", + "40.0\t1.911145\t0\t0", + "41.0\t1.911145\t0\t0", + "42.0\t1.911145\t0\t0", + "43.0\t1.911145\t0\t0", + "44.0\t1.911145\t0\t0", + "45.0\t1.911145\t0\t0", + "46.0\t1.911145\t0\t0", + "47.0\t1.911145\t0\t0", + "48.0\t1.911145\t0\t0", + "49.0\t1.911145\t0\t0", + "50.0\t1.911145\t0\t0", + "51.0\t1.911145\t0\t0", + "52.0\t1.911145\t0\t0", + "53.0\t1.911145\t0\t0", + "54.0\t1.911145\t0\t0", + "55.0\t1.911145\t0\t0", + "56.0\t1.911145\t0\t0", + "57.0\t1.911145\t0\t0", + "58.0\t1.911145\t0\t0", + "59.0\t1.911145\t0\t0", + "60.0\t1.911145\t0\t0", + "61.0\t1.911145\t0\t0", + "62.0\t1.911145\t0\t0", + "63.0\t1.911145\t0\t0", + "64.0\t1.911145\t0\t0", + "65.0\t1.911145\t0\t0", + "66.0\t1.911145\t0\t0", + "67.0\t1.911145\t0\t0", + "68.0\t1.911145\t0\t0", + "69.0\t1.911145\t0\t0", + "70.0\t1.911145\t0\t0", + "71.0\t1.911145\t0\t0", + "72.0\t1.911145\t0\t0", + "73.0\t1.911145\t0\t0", + "74.0\t1.911145\t0\t0", + "75.0\t1.911145\t0\t0", + "76.0\t1.911145\t0\t0", + "77.0\t1.911145\t0\t0", + "78.0\t1.911145\t0\t0", + "79.0\t1.911145\t0\t0", + "80.0\t1.911145\t0\t0", + "81.0\t1.911145\t0\t0", + "82.0\t1.911145\t0\t0", + "83.0\t1.911145\t0\t0", + "84.0\t1.911145\t0\t0", + "85.0\t1.911145\t0\t0", + "86.0\t1.911145\t0\t0", + "87.0\t1.911145\t0\t0", + "88.0\t1.911145\t0\t0", + "89.0\t1.911145\t0\t0", + "90.0\t1.911145\t0\t0", + "91.0\t1.911145\t0\t0", + "92.0\t1.911145\t0\t0", + "93.0\t1.911145\t0\t0", + "94.0\t1.911145\t0\t0", + "95.0\t1.911145\t0\t0", + "96.0\t1.911145\t0\t0", + "97.0\t1.911145\t0\t0", + "98.0\t1.911145\t0\t0", + "99.0\t1.911145\t0\t0", + "100.0\t1.911145\t0\t0", + "" + ], + [ + "", + "## METRICS CLASS\tpicard.analysis.InsertSizeMetrics", + "MEDIAN_INSERT_SIZE\tMODE_INSERT_SIZE\tMEDIAN_ABSOLUTE_DEVIATION\tMIN_INSERT_SIZE\tMAX_INSERT_SIZE\tMEAN_INSERT_SIZE\tSTANDARD_DEVIATION\tREAD_PAIRS\tPAIR_ORIENTATION\tWIDTH_OF_10_PERCENT\tWIDTH_OF_20_PERCENT\tWIDTH_OF_30_PERCENT\tWIDTH_OF_40_PERCENT\tWIDTH_OF_50_PERCENT\tWIDTH_OF_60_PERCENT\tWIDTH_OF_70_PERCENT\tWIDTH_OF_80_PERCENT\tWIDTH_OF_90_PERCENT\tWIDTH_OF_95_PERCENT\tWIDTH_OF_99_PERCENT\tSAMPLE\tLIBRARY\tREAD_GROUP", + "123\t96\t23\t32\t300\t125.684397\t32.447863\t2820\tFR\t11\t17\t27\t37\t47\t57\t69\t83\t103\t125\t169\t\t\t", + "", + "## HISTOGRAM\tjava.lang.Integer", + "insert_size\tAll_Reads.fr_count", + "32\t1", + "41\t1", + "49\t3", + "51\t1", + "52\t2", + "54\t1", + "58\t1", + "59\t2", + "60\t1", + "61\t4", + "62\t1", + "63\t5", + "65\t5", + "66\t2", + "67\t6", + "68\t3", + "69\t5", + "70\t10", + "71\t11", + "72\t7", + "73\t8", + "74\t4", + "75\t12", + "76\t11", + "77\t19", + "78\t15", + "79\t13", + "80\t17", + "81\t24", + "82\t18", + "83\t19", + "84\t25", + "85\t15", + "86\t24", + "87\t30", + "88\t29", + "89\t21", + "90\t16", + "91\t24", + "92\t30", + "93\t23", + "94\t21", + "95\t43", + "96\t54", + "97\t34", + "98\t28", + "99\t24", + "100\t44", + "101\t24", + "102\t27", + "103\t22", + "104\t33", + "105\t26", + "106\t28", + "107\t35", + "108\t26", + "109\t24", + "110\t34", + "111\t29", + "112\t22", + "113\t36", + "114\t30", + "115\t49", + "116\t36", + "117\t33", + "118\t34", + "119\t38", + "120\t14", + "121\t39", + "122\t30", + "123\t28", + "124\t36", + "125\t36", + "126\t25", + "127\t32", + "128\t31", + "129\t28", + "130\t39", + "131\t45", + "132\t25", + "133\t18", + "134\t25", + "135\t31", + "136\t30", + "137\t29", + "138\t34", + "139\t32", + "140\t28", + "141\t41", + "142\t27", + "143\t23", + "144\t26", + "145\t31", + "146\t21", + "147\t29", + "148\t18", + "149\t17", + "150\t19", + "151\t20", + "152\t28", + "153\t28", + "154\t18", + "155\t23", + "156\t20", + "157\t29", + "158\t16", + "159\t15", + "160\t14", + "161\t18", + "162\t19", + "163\t15", + "164\t9", + "165\t11", + "166\t21", + "167\t9", + "168\t17", + "169\t16", + "170\t17", + "171\t13", + "172\t14", + "173\t21", + "174\t9", + "175\t9", + "176\t7", + "177\t9", + "178\t9", + "179\t9", + "180\t2", + "181\t8", + "182\t8", + "183\t3", + "184\t12", + "185\t10", + "186\t5", + "187\t7", + "188\t1", + "189\t5", + "190\t8", + "191\t10", + "192\t8", + "193\t2", + "194\t6", + "195\t1", + "196\t2", + "197\t3", + "198\t2", + "199\t4", + "200\t7", + "201\t2", + "202\t6", + "203\t4", + "204\t4", + "205\t2", + "206\t4", + "207\t4", + "209\t1", + "210\t1", + "212\t2", + "213\t4", + "214\t3", + "215\t1", + "216\t4", + "218\t2", + "220\t1", + "221\t2", + "223\t1", + "224\t1", + "231\t1", + "236\t1", + "239\t1", + "300\t1", + "" + ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T19:48:07.253685279" + "timestamp": "2024-12-03T21:08:20.661591983" } } \ No newline at end of file From 4d08dfdac5fb01a7c6619c46b2b15474165312d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Wed, 4 Dec 2024 00:37:23 +0000 Subject: [PATCH 134/887] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1a68d62d..8ffbebd18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to nf-core module: `PICARD_COLLECTRNASEQMETRICS` and update module [#551](https://github.com/nf-core/rnafusion/pull/551) - Add `--skip_vcf` boolean parameter to skip vcf file generation [#554](https://github.com/nf-core/rnafusion/pull/554) - Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) +- Add nf-test to local subworkflow: `QC_SUBWORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) ### Changed @@ -24,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) +- Remove unused input channel from `QC_SUBWORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) ### Fixed From 13588e4a79260ac0a9c59b1f04bfdf6d4c421cc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= <64787947+alanmmobbs93@users.noreply.github.com> Date: Wed, 4 Dec 2024 08:47:53 -0300 Subject: [PATCH 135/887] Remove line from changelog --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ffbebd18..11444abe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) -- Remove unused input channel from `QC_SUBWORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) ### Fixed From be02390bbefa0aa7ab7fde26e672a2ff57957b62 Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Wed, 4 Dec 2024 14:46:33 +0000 Subject: [PATCH 136/887] Update snaps and profile resources --- conf/test.config | 8 -------- conf/test_build.config | 8 -------- conf/test_cosmic.config | 8 -------- nf-test.config | 5 +---- tests/nextflow.config | 8 ++++++++ tests/test_build.nf.test.snap | 8 ++++---- 6 files changed, 13 insertions(+), 32 deletions(-) create mode 100644 tests/nextflow.config diff --git a/conf/test.config b/conf/test.config index aa51522d7..3cafa252b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -10,14 +10,6 @@ ---------------------------------------------------------------------------------------- */ -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' diff --git a/conf/test_build.config b/conf/test_build.config index 02ca2a170..b335963dc 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -10,14 +10,6 @@ ---------------------------------------------------------------------------------------- */ -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - params { config_profile_name = 'Test build references profile' config_profile_description = 'Minimal test dataset to check pipeline function' diff --git a/conf/test_cosmic.config b/conf/test_cosmic.config index ebbad7cf3..cf199da4d 100644 --- a/conf/test_cosmic.config +++ b/conf/test_cosmic.config @@ -10,14 +10,6 @@ ---------------------------------------------------------------------------------------- */ -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - params { config_profile_name = 'Test cosmic profile' config_profile_description = 'Minimal test cosmic dataset to check pipeline function' diff --git a/nf-test.config b/nf-test.config index 16f182d49..3ee9cc134 100644 --- a/nf-test.config +++ b/nf-test.config @@ -5,11 +5,8 @@ config { // nf-test directory including temporary files for each test workDir ".nf-test" - // location of library folder that is added automatically to the classpath - libDir "tests/lib/" - // location of an optional nextflow.config file specific for executing tests - configFile "nextflow.config" + configFile "tests/nextflow.config" plugins { load "nft-utils@0.0.3" diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 000000000..c3f050dcb --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,8 @@ +// Limit and standardize resources for github actions and reproducibility +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 0833ced64..bcd299593 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -39,9 +39,9 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nf-test": "0.9.2", + "nextflow": "24.04.4" }, - "timestamp": "2024-12-03T19:26:00.897559313" + "timestamp": "2024-12-04T15:38:32.063684" } -} \ No newline at end of file +} From 9683f58e3eea58466dc26c8a92c1f0e93744c29e Mon Sep 17 00:00:00 2001 From: nschcolnicov Date: Wed, 4 Dec 2024 17:59:00 +0000 Subject: [PATCH 137/887] Add salmon index skip parameter --- conf/test_build.config | 2 ++ nextflow.config | 1 + nextflow_schema.json | 5 +++++ tests/test_build.nf.test.snap | 12 ++++++------ workflows/build_references.nf | 5 ++++- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/conf/test_build.config b/conf/test_build.config index b335963dc..616d734f0 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -19,4 +19,6 @@ params { input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' no_cosmic = true all = true + + skip_salmon_index = true } diff --git a/nextflow.config b/nextflow.config index f2441505f..d436182c4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -72,6 +72,7 @@ params { skip_qc = false skip_vis = false skip_vcf = false + skip_salmon_index = false // Path to references no_cosmic = false diff --git a/nextflow_schema.json b/nextflow_schema.json index e5d3866dd..017a19fb8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -22,6 +22,11 @@ "skip_vcf": { "type": "boolean", "description": "Skip vcf generation step" + }, + "skip_salmon_index": { + "type": "boolean", + "description": "Skip salmon index generation step", + "hidden": true } }, "fa_icon": "fas fa-fast-forward" diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index bcd299593..3b5441dc1 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -7,7 +7,7 @@ "gatk4", "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", "gffread", - "gffread/Homo_sapiens.GRCh38.102.gff3", + "gffread/Homo_sapiens.GRCh38.102.fasta", "pipeline_info", "references", "references/ensembl", @@ -27,7 +27,7 @@ [ "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,5bc3ccc76735ae46699a75269f0ea65b", "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,092f1bf29fce906ff7b5ece02b4b21c8", - "Homo_sapiens.GRCh38.102.gff3:md5,f559ec7a1e361351b97f4856ddfcbf84", + "Homo_sapiens.GRCh38.102.fasta:md5,d1f17b045dc60c49f2cc29e30006afc0", "Homo_sapiens.GRCh38.102.chr.gtf:md5,0069687307852c63596b4d2ebdbbaf0c", "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d527f3eb6b664020cf4d882b5820056f", "Homo_sapiens.GRCh38.102.genepred:md5,59c577ca4ab033c0ce1feac1e387bcab", @@ -39,9 +39,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.04.4" + "nf-test": "0.9.0", + "nextflow": "24.10.2" }, - "timestamp": "2024-12-04T15:38:32.063684" + "timestamp": "2024-12-04T17:55:45.068780109" } -} +} \ No newline at end of file diff --git a/workflows/build_references.nf b/workflows/build_references.nf index def3c1627..4886a7bb7 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -49,7 +49,10 @@ workflow BUILD_REFERENCES { GATK4_BEDTOINTERVALLIST(BEDOPS_CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ENSEMBL_DOWNLOAD.out.primary_assembly.map { meta, fasta -> [ fasta ] }) - SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + + if (!params.skip_salmon_index){ + SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + } if (params.starindex || params.all || params.starfusion || params.arriba) { STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) From a8f9bc4486c7cfb53f818588cef36f5521f7e42b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Wed, 4 Dec 2024 19:17:33 +0000 Subject: [PATCH 138/887] add md5 to snaps --- .../local/qc_workflow/test/main.nf.test | 16 +- .../local/qc_workflow/test/main.nf.test.snap | 432 ++---------------- 2 files changed, 37 insertions(+), 411 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index 66a4a2cb8..8929291ec 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -116,12 +116,16 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot( - file( workflow.out.versions[0] ), - file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1], - file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1], - file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1], - ).match() } + { assert snapshot(file( workflow.out.versions[0] )).match('versions' ) }, + { assert snapshot(file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1]).md5().match('rnaseq_metrics' ) }, + { assert snapshot(file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1]).md5().match('duplicate_metrics' ) }, + { assert snapshot(file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1]).md5().match('insertsize_metrics') } + + //file( workflow.out.versions[0] ), + //file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1], + //file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1], + //file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1], + //).md5().match() } ) } } diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap index 8fc12f11d..c9b98e8ee 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test.snap +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -1,414 +1,36 @@ { - "QC_WORKFLOW - Homo sapiens chr22": { + "insertsize_metric": { + "content": "160db81b19843c4d46fe74ac61f9f013", + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-04T19:10:04.844976546" + }, + "versions": { "content": [ - "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139", - [ - "", - "## METRICS CLASS\tpicard.analysis.RnaSeqMetrics", - "PF_BASES\tPF_ALIGNED_BASES\tRIBOSOMAL_BASES\tCODING_BASES\tUTR_BASES\tINTRONIC_BASES\tINTERGENIC_BASES\tIGNORED_READS\tCORRECT_STRAND_READS\tINCORRECT_STRAND_READS\tNUM_R1_TRANSCRIPT_STRAND_READS\tNUM_R2_TRANSCRIPT_STRAND_READS\tNUM_UNEXPLAINED_READS\tPCT_R1_TRANSCRIPT_STRAND_READS\tPCT_R2_TRANSCRIPT_STRAND_READS\tPCT_RIBOSOMAL_BASES\tPCT_CODING_BASES\tPCT_UTR_BASES\tPCT_INTRONIC_BASES\tPCT_INTERGENIC_BASES\tPCT_MRNA_BASES\tPCT_USABLE_BASES\tPCT_CORRECT_STRAND_READS\tMEDIAN_CV_COVERAGE\tMEDIAN_5PRIME_BIAS\tMEDIAN_3PRIME_BIAS\tMEDIAN_5PRIME_TO_3PRIME_BIAS\tSAMPLE\tLIBRARY\tREAD_GROUP", - "672131\t670989\t\t0\t323630\t84236\t263123\t0\t1324\t1328\t664\t661\t1\t0.501132\t0.498868\t\t0\t0.482318\t0.12554\t0.392142\t0.482318\t0.481498\t0.499246\t4.318717\t0\t0.529614\t0\t\t\t", - "", - "## HISTOGRAM\tjava.lang.Integer", - "normalized_position\tAll_Reads.normalized_coverage", - "0\t0", - "1\t0", - "2\t0", - "3\t0", - "4\t0", - "5\t0", - "6\t0", - "7\t0", - "8\t0", - "9\t0", - "10\t0", - "11\t0", - "12\t0", - "13\t0", - "14\t0", - "15\t0", - "16\t0", - "17\t0", - "18\t0", - "19\t0", - "20\t0", - "21\t0", - "22\t0", - "23\t0", - "24\t0", - "25\t0", - "26\t0", - "27\t0", - "28\t0", - "29\t0", - "30\t0", - "31\t0", - "32\t0", - "33\t0", - "34\t0", - "35\t0", - "36\t0", - "37\t0", - "38\t0", - "39\t0", - "40\t0", - "41\t0", - "42\t0", - "43\t0", - "44\t0", - "45\t0", - "46\t0", - "47\t0", - "48\t0", - "49\t0", - "50\t0", - "51\t0", - "52\t0", - "53\t0", - "54\t0", - "55\t0", - "56\t0", - "57\t0", - "58\t0", - "59\t0", - "60\t0", - "61\t0", - "62\t0.007542", - "63\t0.353257", - "64\t0.901997", - "65\t0.824165", - "66\t0.103172", - "67\t0.004348", - "68\t0", - "69\t0", - "70\t0", - "71\t0", - "72\t0", - "73\t0", - "74\t0", - "75\t0", - "76\t0", - "77\t0", - "78\t0", - "79\t0", - "80\t0", - "81\t0", - "82\t0", - "83\t0", - "84\t0", - "85\t0", - "86\t0", - "87\t0", - "88\t0", - "89\t0", - "90\t0", - "91\t0.651006", - "92\t6.035418", - "93\t15.914658", - "94\t23.771379", - "95\t25.867993", - "96\t18.602848", - "97\t6.578541", - "98\t0.156266", - "99\t0.03077", - "100\t0.012318", - "" - ], - [ - "", - "## METRICS CLASS\tpicard.sam.DuplicationMetrics", - "LIBRARY\tUNPAIRED_READS_EXAMINED\tREAD_PAIRS_EXAMINED\tSECONDARY_OR_SUPPLEMENTARY_RDS\tUNMAPPED_READS\tUNPAIRED_READ_DUPLICATES\tREAD_PAIR_DUPLICATES\tREAD_PAIR_OPTICAL_DUPLICATES\tPERCENT_DUPLICATION\tESTIMATED_LIBRARY_SIZE", - "testN\t0\t2820\t2\t2\t0\t828\t0\t0.293617\t3807", - "", - "## HISTOGRAM\tjava.lang.Double", - "BIN\tCoverageMult\tall_sets\tnon_optical_sets", - "1.0\t0.999986\t1178\t1178", - "2.0\t1.47674\t800\t800", - "3.0\t1.704038\t14\t14", - "4.0\t1.812404\t0\t0", - "5.0\t1.864069\t0\t0", - "6.0\t1.888701\t0\t0", - "7.0\t1.900444\t0\t0", - "8.0\t1.906043\t0\t0", - "9.0\t1.908712\t0\t0", - "10.0\t1.909985\t0\t0", - "11.0\t1.910592\t0\t0", - "12.0\t1.910881\t0\t0", - "13.0\t1.911019\t0\t0", - "14.0\t1.911085\t0\t0", - "15.0\t1.911116\t0\t0", - "16.0\t1.911131\t0\t0", - "17.0\t1.911138\t0\t0", - "18.0\t1.911141\t0\t0", - "19.0\t1.911143\t0\t0", - "20.0\t1.911144\t0\t0", - "21.0\t1.911144\t0\t0", - "22.0\t1.911144\t0\t0", - "23.0\t1.911145\t0\t0", - "24.0\t1.911145\t0\t0", - "25.0\t1.911145\t0\t0", - "26.0\t1.911145\t0\t0", - "27.0\t1.911145\t0\t0", - "28.0\t1.911145\t0\t0", - "29.0\t1.911145\t0\t0", - "30.0\t1.911145\t0\t0", - "31.0\t1.911145\t0\t0", - "32.0\t1.911145\t0\t0", - "33.0\t1.911145\t0\t0", - "34.0\t1.911145\t0\t0", - "35.0\t1.911145\t0\t0", - "36.0\t1.911145\t0\t0", - "37.0\t1.911145\t0\t0", - "38.0\t1.911145\t0\t0", - "39.0\t1.911145\t0\t0", - "40.0\t1.911145\t0\t0", - "41.0\t1.911145\t0\t0", - "42.0\t1.911145\t0\t0", - "43.0\t1.911145\t0\t0", - "44.0\t1.911145\t0\t0", - "45.0\t1.911145\t0\t0", - "46.0\t1.911145\t0\t0", - "47.0\t1.911145\t0\t0", - "48.0\t1.911145\t0\t0", - "49.0\t1.911145\t0\t0", - "50.0\t1.911145\t0\t0", - "51.0\t1.911145\t0\t0", - "52.0\t1.911145\t0\t0", - "53.0\t1.911145\t0\t0", - "54.0\t1.911145\t0\t0", - "55.0\t1.911145\t0\t0", - "56.0\t1.911145\t0\t0", - "57.0\t1.911145\t0\t0", - "58.0\t1.911145\t0\t0", - "59.0\t1.911145\t0\t0", - "60.0\t1.911145\t0\t0", - "61.0\t1.911145\t0\t0", - "62.0\t1.911145\t0\t0", - "63.0\t1.911145\t0\t0", - "64.0\t1.911145\t0\t0", - "65.0\t1.911145\t0\t0", - "66.0\t1.911145\t0\t0", - "67.0\t1.911145\t0\t0", - "68.0\t1.911145\t0\t0", - "69.0\t1.911145\t0\t0", - "70.0\t1.911145\t0\t0", - "71.0\t1.911145\t0\t0", - "72.0\t1.911145\t0\t0", - "73.0\t1.911145\t0\t0", - "74.0\t1.911145\t0\t0", - "75.0\t1.911145\t0\t0", - "76.0\t1.911145\t0\t0", - "77.0\t1.911145\t0\t0", - "78.0\t1.911145\t0\t0", - "79.0\t1.911145\t0\t0", - "80.0\t1.911145\t0\t0", - "81.0\t1.911145\t0\t0", - "82.0\t1.911145\t0\t0", - "83.0\t1.911145\t0\t0", - "84.0\t1.911145\t0\t0", - "85.0\t1.911145\t0\t0", - "86.0\t1.911145\t0\t0", - "87.0\t1.911145\t0\t0", - "88.0\t1.911145\t0\t0", - "89.0\t1.911145\t0\t0", - "90.0\t1.911145\t0\t0", - "91.0\t1.911145\t0\t0", - "92.0\t1.911145\t0\t0", - "93.0\t1.911145\t0\t0", - "94.0\t1.911145\t0\t0", - "95.0\t1.911145\t0\t0", - "96.0\t1.911145\t0\t0", - "97.0\t1.911145\t0\t0", - "98.0\t1.911145\t0\t0", - "99.0\t1.911145\t0\t0", - "100.0\t1.911145\t0\t0", - "" - ], - [ - "", - "## METRICS CLASS\tpicard.analysis.InsertSizeMetrics", - "MEDIAN_INSERT_SIZE\tMODE_INSERT_SIZE\tMEDIAN_ABSOLUTE_DEVIATION\tMIN_INSERT_SIZE\tMAX_INSERT_SIZE\tMEAN_INSERT_SIZE\tSTANDARD_DEVIATION\tREAD_PAIRS\tPAIR_ORIENTATION\tWIDTH_OF_10_PERCENT\tWIDTH_OF_20_PERCENT\tWIDTH_OF_30_PERCENT\tWIDTH_OF_40_PERCENT\tWIDTH_OF_50_PERCENT\tWIDTH_OF_60_PERCENT\tWIDTH_OF_70_PERCENT\tWIDTH_OF_80_PERCENT\tWIDTH_OF_90_PERCENT\tWIDTH_OF_95_PERCENT\tWIDTH_OF_99_PERCENT\tSAMPLE\tLIBRARY\tREAD_GROUP", - "123\t96\t23\t32\t300\t125.684397\t32.447863\t2820\tFR\t11\t17\t27\t37\t47\t57\t69\t83\t103\t125\t169\t\t\t", - "", - "## HISTOGRAM\tjava.lang.Integer", - "insert_size\tAll_Reads.fr_count", - "32\t1", - "41\t1", - "49\t3", - "51\t1", - "52\t2", - "54\t1", - "58\t1", - "59\t2", - "60\t1", - "61\t4", - "62\t1", - "63\t5", - "65\t5", - "66\t2", - "67\t6", - "68\t3", - "69\t5", - "70\t10", - "71\t11", - "72\t7", - "73\t8", - "74\t4", - "75\t12", - "76\t11", - "77\t19", - "78\t15", - "79\t13", - "80\t17", - "81\t24", - "82\t18", - "83\t19", - "84\t25", - "85\t15", - "86\t24", - "87\t30", - "88\t29", - "89\t21", - "90\t16", - "91\t24", - "92\t30", - "93\t23", - "94\t21", - "95\t43", - "96\t54", - "97\t34", - "98\t28", - "99\t24", - "100\t44", - "101\t24", - "102\t27", - "103\t22", - "104\t33", - "105\t26", - "106\t28", - "107\t35", - "108\t26", - "109\t24", - "110\t34", - "111\t29", - "112\t22", - "113\t36", - "114\t30", - "115\t49", - "116\t36", - "117\t33", - "118\t34", - "119\t38", - "120\t14", - "121\t39", - "122\t30", - "123\t28", - "124\t36", - "125\t36", - "126\t25", - "127\t32", - "128\t31", - "129\t28", - "130\t39", - "131\t45", - "132\t25", - "133\t18", - "134\t25", - "135\t31", - "136\t30", - "137\t29", - "138\t34", - "139\t32", - "140\t28", - "141\t41", - "142\t27", - "143\t23", - "144\t26", - "145\t31", - "146\t21", - "147\t29", - "148\t18", - "149\t17", - "150\t19", - "151\t20", - "152\t28", - "153\t28", - "154\t18", - "155\t23", - "156\t20", - "157\t29", - "158\t16", - "159\t15", - "160\t14", - "161\t18", - "162\t19", - "163\t15", - "164\t9", - "165\t11", - "166\t21", - "167\t9", - "168\t17", - "169\t16", - "170\t17", - "171\t13", - "172\t14", - "173\t21", - "174\t9", - "175\t9", - "176\t7", - "177\t9", - "178\t9", - "179\t9", - "180\t2", - "181\t8", - "182\t8", - "183\t3", - "184\t12", - "185\t10", - "186\t5", - "187\t7", - "188\t1", - "189\t5", - "190\t8", - "191\t10", - "192\t8", - "193\t2", - "194\t6", - "195\t1", - "196\t2", - "197\t3", - "198\t2", - "199\t4", - "200\t7", - "201\t2", - "202\t6", - "203\t4", - "204\t4", - "205\t2", - "206\t4", - "207\t4", - "209\t1", - "210\t1", - "212\t2", - "213\t4", - "214\t3", - "215\t1", - "216\t4", - "218\t2", - "220\t1", - "221\t2", - "223\t1", - "224\t1", - "231\t1", - "236\t1", - "239\t1", - "300\t1", - "" - ] + "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139" ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T21:08:20.661591983" + "timestamp": "2024-12-04T19:10:04.80151539" + }, + "duplicate_metric": { + "content": "651d8a4702f9f9871e94afbce3e50e34", + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-04T19:10:04.837403415" + }, + "rnaseq_metric": { + "content": "84a348c3735ed2f6c47f346eeed661f4", + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-04T19:10:04.828498524" } } \ No newline at end of file From 40e30a3e8e1e67e243e055bcfa0abc7cb3d2d1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Wed, 4 Dec 2024 19:21:37 +0000 Subject: [PATCH 139/887] Update comments on the subworkflow --- subworkflows/local/qc_workflow/main.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/qc_workflow/main.nf b/subworkflows/local/qc_workflow/main.nf index a8473d446..a0ad60b64 100644 --- a/subworkflows/local/qc_workflow/main.nf +++ b/subworkflows/local/qc_workflow/main.nf @@ -1,5 +1,5 @@ // -// Check input samplesheet and get read channels +// Extract descriptive values from BAMs // include { PICARD_COLLECTRNASEQMETRICS } from '../../../modules/nf-core/picard/collectrnaseqmetrics' @@ -31,10 +31,10 @@ workflow QC_WORKFLOW { ch_insertsize_metrics = PICARD_COLLECTINSERTSIZEMETRICS.out.metrics emit: - versions = ch_versions - rnaseq_metrics = ch_rnaseq_metrics - duplicate_metrics = ch_duplicate_metrics - insertsize_metrics = ch_insertsize_metrics + versions = ch_versions // channel [ path ] + rnaseq_metrics = ch_rnaseq_metrics // channel [ meta, path ] + duplicate_metrics = ch_duplicate_metrics // channel [ meta, path ] + insertsize_metrics = ch_insertsize_metrics // channel [ meta, path ] } From 3c630e901b46184ea273e17c03cdac5b68482c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Wed, 4 Dec 2024 19:23:00 +0000 Subject: [PATCH 140/887] remove commented lines --- subworkflows/local/qc_workflow/test/main.nf.test | 6 ------ 1 file changed, 6 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index 8929291ec..cfb48e06d 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -120,12 +120,6 @@ nextflow_workflow { { assert snapshot(file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1]).md5().match('rnaseq_metrics' ) }, { assert snapshot(file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1]).md5().match('duplicate_metrics' ) }, { assert snapshot(file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1]).md5().match('insertsize_metrics') } - - //file( workflow.out.versions[0] ), - //file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1], - //file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1], - //file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1], - //).md5().match() } ) } } From c8247c8238865d5ed54836360555a19c4df9f790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Wed, 4 Dec 2024 19:33:30 +0000 Subject: [PATCH 141/887] update test snaps --- .../local/qc_workflow/test/main.nf.test.snap | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap index c9b98e8ee..b56c12b98 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test.snap +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -1,11 +1,11 @@ { - "insertsize_metric": { - "content": "160db81b19843c4d46fe74ac61f9f013", + "duplicate_metrics": { + "content": "651d8a4702f9f9871e94afbce3e50e34", "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-04T19:10:04.844976546" + "timestamp": "2024-12-04T19:29:09.711230835" }, "versions": { "content": [ @@ -15,22 +15,22 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-04T19:10:04.80151539" + "timestamp": "2024-12-04T19:29:09.686297468" }, - "duplicate_metric": { - "content": "651d8a4702f9f9871e94afbce3e50e34", + "rnaseq_metrics": { + "content": "84a348c3735ed2f6c47f346eeed661f4", "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-04T19:10:04.837403415" + "timestamp": "2024-12-04T19:29:09.704632753" }, - "rnaseq_metric": { - "content": "84a348c3735ed2f6c47f346eeed661f4", + "insertsize_metrics": { + "content": "160db81b19843c4d46fe74ac61f9f013", "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-04T19:10:04.828498524" + "timestamp": "2024-12-04T19:29:09.717929716" } } \ No newline at end of file From d8bfba2e0d165d0340034d1bb8b68744b40e1f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 13:45:32 +0000 Subject: [PATCH 142/887] change module structure and test --- subworkflows/local/trim_subworkflow/main.nf | 46 +++++++++++++++++ .../local/trim_subworkflow/tests/main.nf.test | 50 +++++++++++++++++++ subworkflows/local/trim_workflow.nf | 42 ---------------- workflows/rnafusion.nf | 41 ++++++++------- 4 files changed, 119 insertions(+), 60 deletions(-) create mode 100644 subworkflows/local/trim_subworkflow/main.nf create mode 100644 subworkflows/local/trim_subworkflow/tests/main.nf.test delete mode 100644 subworkflows/local/trim_workflow.nf diff --git a/subworkflows/local/trim_subworkflow/main.nf b/subworkflows/local/trim_subworkflow/main.nf new file mode 100644 index 000000000..2cbb8380d --- /dev/null +++ b/subworkflows/local/trim_subworkflow/main.nf @@ -0,0 +1,46 @@ + + +include { FASTP } from '../../../modules/nf-core/fastp/main' +include { FASTQC as FASTQC_FOR_FASTP } from '../../../modules/nf-core/fastqc/main' + +workflow TRIM_WORKFLOW { + + take: + reads // channel [ meta, [ fastqs ] ] + adapter_fasta // channel [ path ] + fastp_trim // boolean + + main: + ch_versions = Channel.empty() + ch_fastp_html = Channel.empty() + ch_fastp_json = Channel.empty() + ch_fastqc_trimmed = Channel.empty() + + if ( fastp_trim ) { + FASTP(reads, adapter_fasta.ifEmpty( [] ), false, false, false) + ch_versions = ch_versions.mix(FASTP.out.versions) + + FASTQC_FOR_FASTP(FASTP.out.reads) + ch_versions = ch_versions.mix(FASTQC_FOR_FASTP.out.versions) + + ch_reads_all = FASTP.out.reads + ch_reads_fusioncatcher = ch_reads_all + ch_fastp_html = FASTP.out.html + ch_fastp_json = FASTP.out.json + ch_fastqc_trimmed = FASTQC_FOR_FASTP.out.zip + + } + else { + ch_reads_all = reads + ch_reads_fusioncatcher = reads + } + + emit: + ch_reads_all // Channel [ meta, [reads] ] + ch_reads_fusioncatcher // Channel [ meta, [reads] ] + ch_fastp_html // Channel [ meta, path_html ] + ch_fastp_json // Channel [ meta, path_json ] + ch_fastqc_trimmed // Channel [ meta, path_zip ] + versions = ch_versions // Channel [ versions ] + } + diff --git a/subworkflows/local/trim_subworkflow/tests/main.nf.test b/subworkflows/local/trim_subworkflow/tests/main.nf.test new file mode 100644 index 000000000..66007f0d4 --- /dev/null +++ b/subworkflows/local/trim_subworkflow/tests/main.nf.test @@ -0,0 +1,50 @@ +nextflow_workflow { + + name "Test Subworkflow QC_WORKFLOW" + script "../main.nf" + //config "./nextflow.config" + workflow "TRIM_WORKFLOW" + tag "qc" + tag "subworkflow" + + test("TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP true") { + + when { + params { + fastp_trim = true + } + + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [id: "test_fastq"], + [ + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz", checkIfExists: true) + ] + ]) + input[1] = Channel.empty() + input[2] = true + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { with(workflow.out) { + assert snapshot( + versions.collect{ file(it) }, + ch_reads_all[0][1].collect { file(it) }, + ch_reads_fusioncatcher[0][1].collect { file(it) }, + file(ch_fastp_html[0][1]).name, + file(ch_fastp_json[0][1]), + ch_fastqc_trimmed[0][1].collect { file(it).name } + ).match() } + } + ) + } + } +} diff --git a/subworkflows/local/trim_workflow.nf b/subworkflows/local/trim_workflow.nf deleted file mode 100644 index 27088a180..000000000 --- a/subworkflows/local/trim_workflow.nf +++ /dev/null @@ -1,42 +0,0 @@ -include { FASTP } from '../../modules/nf-core/fastp/main' -include { FASTQC as FASTQC_FOR_FASTP } from '../../modules/nf-core/fastqc/main' - - -workflow TRIM_WORKFLOW { - take: - reads - - main: - ch_versions = Channel.empty() - ch_fastp_html = Channel.empty() - ch_fastp_json = Channel.empty() - ch_fastqc_trimmed = Channel.empty() - - if (params.fastp_trim) { - FASTP(reads, params.adapter_fasta, false, false, false) - ch_versions = ch_versions.mix(FASTP.out.versions) - - FASTQC_FOR_FASTP(FASTP.out.reads) - ch_versions = ch_versions.mix(FASTQC_FOR_FASTP.out.versions) - - ch_reads_all = FASTP.out.reads - ch_reads_fusioncatcher = ch_reads_all - ch_fastp_html = FASTP.out.html - ch_fastp_json = FASTP.out.json - ch_fastqc_trimmed = FASTQC_FOR_FASTP.out.zip - - } - else { - ch_reads_all = reads - ch_reads_fusioncatcher = reads - } - - emit: - ch_reads_all - ch_reads_fusioncatcher - ch_fastp_html - ch_fastp_json - ch_fastqc_trimmed - versions = ch_versions - } - diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 1f7890b54..bafea68c3 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -22,23 +22,25 @@ include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pi include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' -ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() -ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() -ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() -ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() +ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() +ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() +ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() +ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() +ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() +ch_adapter_fastp = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta, checkIfExists: true) : Channel.empty() +ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() -ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() -ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() +ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() +ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() +ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() +ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() -ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() -ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() +ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() +ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() + /* @@ -51,6 +53,7 @@ workflow RNAFUSION { take: ch_samplesheet // channel: samplesheet read in from --input + main: ch_versions = Channel.empty() @@ -67,11 +70,13 @@ workflow RNAFUSION { TRIM_WORKFLOW ( - ch_samplesheet + ch_samplesheet, + ch_adapter_fastp, + params.fastp_trim ) ch_reads_fusioncatcher = TRIM_WORKFLOW.out.ch_reads_fusioncatcher - ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + ch_reads_all = TRIM_WORKFLOW.out.ch_reads_all + ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) SALMON_QUANT( ch_reads_all, ch_salmon_index.map{ meta, index -> index }, ch_gtf.map{ meta, gtf -> gtf }, [], false, 'A') From 06ba247e6e624ff95aba80b65b90a09436ab419c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 13:45:53 +0000 Subject: [PATCH 143/887] create snap --- .../trim_subworkflow/tests/main.nf.test.snap | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 subworkflows/local/trim_subworkflow/tests/main.nf.test.snap diff --git a/subworkflows/local/trim_subworkflow/tests/main.nf.test.snap b/subworkflows/local/trim_subworkflow/tests/main.nf.test.snap new file mode 100644 index 000000000..4623a3938 --- /dev/null +++ b/subworkflows/local/trim_subworkflow/tests/main.nf.test.snap @@ -0,0 +1,29 @@ +{ + "TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP true": { + "content": [ + [ + "versions.yml:md5,16187796d989b6260f572247e7dc0fc6", + "versions.yml:md5,ea42abe9875f41f8362a55ee7533f102" + ], + [ + "test_fastq_1.fastp.fastq.gz:md5,0c436583301dea48755a5252a2675b64", + "test_fastq_2.fastp.fastq.gz:md5,f7f38138255e63b33286b819b6177612" + ], + [ + "test_fastq_1.fastp.fastq.gz:md5,0c436583301dea48755a5252a2675b64", + "test_fastq_2.fastp.fastq.gz:md5,f7f38138255e63b33286b819b6177612" + ], + "test_fastq.fastp.html", + "test_fastq.fastp.json:md5,62066ad48c3d5981045cdd43e354cb2b", + [ + "test_fastq_trimmed_1_fastqc.zip", + "test_fastq_trimmed_2_fastqc.zip" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-05T13:42:33.340326167" + } +} \ No newline at end of file From ea4487f0595c1f1d6baf850fd6b7db2d04c58e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 13:53:28 +0000 Subject: [PATCH 144/887] fix folder name --- subworkflows/local/{trim_subworkflow => trim_workflow}/main.nf | 0 .../local/{trim_subworkflow => trim_workflow}/tests/main.nf.test | 0 .../{trim_subworkflow => trim_workflow}/tests/main.nf.test.snap | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename subworkflows/local/{trim_subworkflow => trim_workflow}/main.nf (100%) rename subworkflows/local/{trim_subworkflow => trim_workflow}/tests/main.nf.test (100%) rename subworkflows/local/{trim_subworkflow => trim_workflow}/tests/main.nf.test.snap (100%) diff --git a/subworkflows/local/trim_subworkflow/main.nf b/subworkflows/local/trim_workflow/main.nf similarity index 100% rename from subworkflows/local/trim_subworkflow/main.nf rename to subworkflows/local/trim_workflow/main.nf diff --git a/subworkflows/local/trim_subworkflow/tests/main.nf.test b/subworkflows/local/trim_workflow/tests/main.nf.test similarity index 100% rename from subworkflows/local/trim_subworkflow/tests/main.nf.test rename to subworkflows/local/trim_workflow/tests/main.nf.test diff --git a/subworkflows/local/trim_subworkflow/tests/main.nf.test.snap b/subworkflows/local/trim_workflow/tests/main.nf.test.snap similarity index 100% rename from subworkflows/local/trim_subworkflow/tests/main.nf.test.snap rename to subworkflows/local/trim_workflow/tests/main.nf.test.snap From e033e9445a20a807651299d0b85c90de2eb441da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 14:25:55 +0000 Subject: [PATCH 145/887] update test for skipping fastp --- .../local/trim_workflow/tests/main.nf.test | 43 +++++++++++++++++-- .../trim_workflow/tests/main.nf.test.snap | 17 +++++++- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/trim_workflow/tests/main.nf.test b/subworkflows/local/trim_workflow/tests/main.nf.test index 66007f0d4..854f9d4d2 100644 --- a/subworkflows/local/trim_workflow/tests/main.nf.test +++ b/subworkflows/local/trim_workflow/tests/main.nf.test @@ -2,7 +2,6 @@ nextflow_workflow { name "Test Subworkflow QC_WORKFLOW" script "../main.nf" - //config "./nextflow.config" workflow "TRIM_WORKFLOW" tag "qc" tag "subworkflow" @@ -10,9 +9,6 @@ nextflow_workflow { test("TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP true") { when { - params { - fastp_trim = true - } workflow { """ @@ -47,4 +43,43 @@ nextflow_workflow { ) } } + + test("TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP false") { + + when { + + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [id: "test_fastq"], + [ + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz", checkIfExists: true) + ] + ]) + input[1] = Channel.empty() + input[2] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { with(workflow.out) { + assert snapshot( + versions.size() == 0, + ch_reads_all[0][1].size() == 2, + ch_reads_fusioncatcher[0][1].size() == 2, + ch_fastp_html.size() == 0, + ch_fastp_json.size() == 0, + ch_fastqc_trimmed.size() == 0 + ).match() } + } + ) + } + } + } diff --git a/subworkflows/local/trim_workflow/tests/main.nf.test.snap b/subworkflows/local/trim_workflow/tests/main.nf.test.snap index 4623a3938..c119f7504 100644 --- a/subworkflows/local/trim_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/trim_workflow/tests/main.nf.test.snap @@ -24,6 +24,21 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-05T13:42:33.340326167" + "timestamp": "2024-12-05T14:11:12.374063253" + }, + "TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP false": { + "content": [ + true, + true, + true, + true, + true, + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-05T14:21:42.396615145" } } \ No newline at end of file From 8f3c70e091df4f0d8f867a11c114ff7f3bd62e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 14:29:30 +0000 Subject: [PATCH 146/887] update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11444abe0..6a70a4343 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to nf-core module: `PICARD_COLLECTRNASEQMETRICS` and update module [#551](https://github.com/nf-core/rnafusion/pull/551) - Add `--skip_vcf` boolean parameter to skip vcf file generation [#554](https://github.com/nf-core/rnafusion/pull/554) - Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) -- Add nf-test to local subworkflow: `QC_SUBWORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) +- Add nf-test to local subworkflow: `QC_WORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) +- Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) ### Changed From cc916e6e551de9c49a2ea1a32593d6806906f88f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:12:22 +0000 Subject: [PATCH 147/887] fix: change hardcoded container for seqera container, mv conda to environment.yml --- modules/local/fusioncatcher/download/environment.yml | 5 +++++ modules/local/fusioncatcher/download/main.nf | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 modules/local/fusioncatcher/download/environment.yml diff --git a/modules/local/fusioncatcher/download/environment.yml b/modules/local/fusioncatcher/download/environment.yml new file mode 100644 index 000000000..7fbda99b9 --- /dev/null +++ b/modules/local/fusioncatcher/download/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::fusioncatcher diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 156e70b65..3164f1aa3 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -2,8 +2,8 @@ process FUSIONCATCHER_DOWNLOAD { tag "fusioncatcher_download" label 'process_medium' - conda "bioconda::fusioncatcher=1.33" - container "docker.io/clinicalgenomics/fusioncatcher:1.33" + conda "${moduleDir}/environment.yml" + container "community.wave.seqera.io/library/fusioncatcher:e0ca700aac225cc8" output: path "*" , emit: reference From 2010578ec950e8ee149858ac5f902d491dfbde32 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:13:41 +0000 Subject: [PATCH 148/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11444abe0..8d6168afa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactor structure in `FUSIONREPORT_DOWNLOAD` to use cosmic credentials in `ext.args` [#556](https://github.com/nf-core/rnafusion/issues/556) - Fixed bug in nf-core `RRNATRANSCRIPTS` module [#563](https://github.com/nf-core/rnafusion/issues/563) - Fixed bug in `GFFREAD` that caused output `gffread_fasta` not being produced [#565](https://github.com/nf-core/rnafusion/issues/565) +- Fixed bug in `FUSIONCATCHER_DOWNLOAD` that caused an error when running with singularity profile [#573](https://github.com/nf-core/rnafusion/issues/573) ### Removed From ca0870bc3b9568b65458392293bb390c61866597 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:20:28 +0000 Subject: [PATCH 149/887] fix: specify version 1.33 in bioconda and seqera container --- modules/local/fusioncatcher/detect/environment.yml | 4 ++++ modules/local/fusioncatcher/detect/main.nf | 4 ++-- modules/local/fusioncatcher/download/environment.yml | 3 +-- modules/local/fusioncatcher/download/main.nf | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 modules/local/fusioncatcher/detect/environment.yml diff --git a/modules/local/fusioncatcher/detect/environment.yml b/modules/local/fusioncatcher/detect/environment.yml new file mode 100644 index 000000000..312995854 --- /dev/null +++ b/modules/local/fusioncatcher/detect/environment.yml @@ -0,0 +1,4 @@ +channels: + - bioconda +dependencies: + - bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 2977d6686..9a0928463 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -2,8 +2,8 @@ process FUSIONCATCHER { tag "$meta.id" label 'process_high' - conda "bioconda::fusioncatcher=1.33" - container "docker.io/clinicalgenomics/fusioncatcher:1.33" + conda "${moduleDir}/environment.yml" + container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" input: tuple val(meta), path(fasta) diff --git a/modules/local/fusioncatcher/download/environment.yml b/modules/local/fusioncatcher/download/environment.yml index 7fbda99b9..312995854 100644 --- a/modules/local/fusioncatcher/download/environment.yml +++ b/modules/local/fusioncatcher/download/environment.yml @@ -1,5 +1,4 @@ channels: - - conda-forge - bioconda dependencies: - - bioconda::fusioncatcher + - bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 3164f1aa3..65a736077 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER_DOWNLOAD { label 'process_medium' conda "${moduleDir}/environment.yml" - container "community.wave.seqera.io/library/fusioncatcher:e0ca700aac225cc8" + container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" output: path "*" , emit: reference From 90aced2d44603cb0440dd98dd858c0cd87db8f8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 16:24:35 +0000 Subject: [PATCH 150/887] add new test --- .../local/trim_workflow/tests/main.nf.test | 44 ++++++++++++++++++- .../trim_workflow/tests/main.nf.test.snap | 35 +++++++++++++-- 2 files changed, 73 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/trim_workflow/tests/main.nf.test b/subworkflows/local/trim_workflow/tests/main.nf.test index 854f9d4d2..2f7568d6d 100644 --- a/subworkflows/local/trim_workflow/tests/main.nf.test +++ b/subworkflows/local/trim_workflow/tests/main.nf.test @@ -5,8 +5,10 @@ nextflow_workflow { workflow "TRIM_WORKFLOW" tag "qc" tag "subworkflow" + tag "fastqc" + tag "fastp" - test("TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP true") { + test("TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == true") { when { @@ -44,7 +46,45 @@ nextflow_workflow { } } - test("TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP false") { + test("TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == true + fasp_adaptors") { + + when { + + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [id: "test_fastq"], + [ + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz", checkIfExists: true) + ] + ]) + input[1] = Channel.fromPath('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/delete_me/fastp/adapters.fasta', checkIfExists: true) + input[2] = true + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { with(workflow.out) { + assert snapshot( + versions.collect{ file(it) }, + ch_reads_all[0][1].collect { file(it) }, + ch_reads_fusioncatcher[0][1].collect { file(it) }, + file(ch_fastp_html[0][1]).name, + file(ch_fastp_json[0][1]), + ch_fastqc_trimmed[0][1].collect { file(it).name } + ).match() } + } + ) + } + } + + test("TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == false") { when { diff --git a/subworkflows/local/trim_workflow/tests/main.nf.test.snap b/subworkflows/local/trim_workflow/tests/main.nf.test.snap index c119f7504..ae9f9e2e0 100644 --- a/subworkflows/local/trim_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/trim_workflow/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP true": { + "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == true": { "content": [ [ "versions.yml:md5,16187796d989b6260f572247e7dc0fc6", @@ -24,9 +24,9 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-05T14:11:12.374063253" + "timestamp": "2024-12-05T16:21:52.926289296" }, - "TRIM_WORKFLOW - Homo sapiens - FASTQs - FastP false": { + "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == false": { "content": [ true, true, @@ -39,6 +39,33 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-05T14:21:42.396615145" + "timestamp": "2024-12-05T16:22:45.877168833" + }, + "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == true + fasp_adaptors": { + "content": [ + [ + "versions.yml:md5,16187796d989b6260f572247e7dc0fc6", + "versions.yml:md5,ea42abe9875f41f8362a55ee7533f102" + ], + [ + "test_fastq_1.fastp.fastq.gz:md5,adc67a7b4d0bf3520866d7599a4ba814", + "test_fastq_2.fastp.fastq.gz:md5,9ee7d6c5230442970997477464255e67" + ], + [ + "test_fastq_1.fastp.fastq.gz:md5,adc67a7b4d0bf3520866d7599a4ba814", + "test_fastq_2.fastp.fastq.gz:md5,9ee7d6c5230442970997477464255e67" + ], + "test_fastq.fastp.html", + "test_fastq.fastp.json:md5,feb3483311bfa4ded60146f1cbc13fd5", + [ + "test_fastq_trimmed_1_fastqc.zip", + "test_fastq_trimmed_2_fastqc.zip" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-05T16:22:26.29488483" } } \ No newline at end of file From 6189acf28d3a3fd43c5882490f6ed79fbac95f76 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:38:19 +0000 Subject: [PATCH 151/887] refactor: emit a directory and add meta --- modules/local/fusionreport/download/main.nf | 26 ++++---- .../fusionreport/download/tests/main.nf.test | 6 +- .../download/tests/main.nf.test.snap | 66 +++++++++---------- 3 files changed, 48 insertions(+), 50 deletions(-) diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 183d95602..b19a64462 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -6,18 +6,17 @@ process FUSIONREPORT_DOWNLOAD { container "docker.io/clinicalgenomics/fusion-report:3.1.0" output: - path "fusiongdb2.db" , emit: fusiongdb2 - path "mitelman.db" , emit: mitelman - path "cosmic.db" , emit: cosmic, optional: true - path "*.txt" , emit: timestamp - path "*.log" , emit: log - path "versions.yml" , emit: versions + tuple val(meta), path("fusionreport_dbs"), emit: fusionreport_db + path "versions.yml" , emit: versions script: + meta = [id: 'fusionreport_dbs'] def args = task.ext.args ?: '' - def args2 = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' """ fusion_report download $args ./ + mkdir fusionreport_dbs + mv *.txt *.log *.db fusionreport_dbs cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -26,17 +25,18 @@ process FUSIONREPORT_DOWNLOAD { """ stub: + meta = [id: 'fusionreport_dbs'] """ - touch cosmic.db - touch fusiongdb2.db - touch mitelman.db - touch DB-timestamp.txt - touch fusion_report.log + mkdir fusionreport_dbs + touch fusionreport_dbs/cosmic.db + touch fusionreport_dbs/fusiongdb2.db + touch fusionreport_dbs/mitelman.db + touch fusionreport_dbs/DB-timestamp.txt + touch fusionreport_dbs/fusion_report.log cat <<-END_VERSIONS > versions.yml "${task.process}": fusion_report: \$(fusion_report --version | sed 's/fusion-report //') END_VERSIONS """ - } diff --git a/modules/local/fusionreport/download/tests/main.nf.test b/modules/local/fusionreport/download/tests/main.nf.test index 33486764a..dd079587f 100644 --- a/modules/local/fusionreport/download/tests/main.nf.test +++ b/modules/local/fusionreport/download/tests/main.nf.test @@ -19,8 +19,10 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - process.out.fusiongdb2, - process.out.mitelman, + path(process.out.fusionreport_db[0][1]).resolve("fusiongdb2.db"), + path(process.out.fusionreport_db[0][1]).resolve("mitelman.db"), + path(process.out.fusionreport_db[0][1]).resolve("DB-timestamp.txt").exists(), + path(process.out.fusionreport_db[0][1]).resolve("fusion_report.log").exists(), process.out.versions ).match() } ) diff --git a/modules/local/fusionreport/download/tests/main.nf.test.snap b/modules/local/fusionreport/download/tests/main.nf.test.snap index d828fcf51..c328f7486 100644 --- a/modules/local/fusionreport/download/tests/main.nf.test.snap +++ b/modules/local/fusionreport/download/tests/main.nf.test.snap @@ -1,12 +1,10 @@ { "Download fusionreport databases": { "content": [ - [ - "fusiongdb2.db:md5,e1ac123a744e515d3e5f85b8344d526a" - ], - [ - "mitelman.db:md5,1363795c97f77c641065ecd9ad0e484a" - ], + "fusiongdb2.db:md5,e1ac123a744e515d3e5f85b8344d526a", + "mitelman.db:md5,1363795c97f77c641065ecd9ad0e484a", + true, + true, [ "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" ] @@ -15,43 +13,41 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-02T13:09:56.930477745" + "timestamp": "2024-12-05T19:27:38.99855171" }, "Create stub files": { "content": [ { "0": [ - "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + { + "id": "fusionreport_dbs" + }, + [ + "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] ], "1": [ - "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "2": [ - "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "3": [ - "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "4": [ - "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "5": [ "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" ], - "cosmic": [ - "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "fusiongdb2": [ - "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "log": [ - "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "mitelman": [ - "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "timestamp": [ - "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "fusionreport_db": [ + [ + { + "id": "fusionreport_dbs" + }, + [ + "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "cosmic.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusiongdb2.db:md5,d41d8cd98f00b204e9800998ecf8427e", + "mitelman.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] ], "versions": [ "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" @@ -62,6 +58,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-02T13:10:12.577952658" + "timestamp": "2024-12-05T19:35:49.629287874" } } \ No newline at end of file From 2620dcfba89178955f8da8e2617b6b82cc657dfc Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:12:53 +0000 Subject: [PATCH 152/887] test: add fusionreport nf-test --- .../fusionreport/detect/tests/main.nf.test | 60 +++++++++++++++++++ .../fusionreport/detect/tests/nextflow.config | 10 ++++ 2 files changed, 70 insertions(+) create mode 100644 modules/local/fusionreport/detect/tests/main.nf.test create mode 100644 modules/local/fusionreport/detect/tests/nextflow.config diff --git a/modules/local/fusionreport/detect/tests/main.nf.test b/modules/local/fusionreport/detect/tests/main.nf.test new file mode 100644 index 000000000..5d0d89aea --- /dev/null +++ b/modules/local/fusionreport/detect/tests/main.nf.test @@ -0,0 +1,60 @@ +nextflow_process { + + name "Test Process FUSIONREPORT" + script "../main.nf" + process "FUSIONREPORT" + tag "modules" + tag "modules_local" + tag "fusionreport" + + + test("FUSIONREPORT - arriba - starfusion - fusioncatcher") { + config './nextflow.config' + + setup { + run("FUSIONREPORT_DOWNLOAD") { + script "../../../fusionreport/download/main.nf" + process { + """ + """ + } + } + } + + when { + process { + """ + + input[0] = [ + [ id:'test_sample' ], // meta map + file("https://github.com/atrigila/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz"), + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/arriba.tsv"), + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/starfusion.tsv"), + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt") + ] + + input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_db + + input[2] = 1 + """ + } + params { + arriba = true + starfusion = true + fusioncatcher = true + no_cosmic = true + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + +} diff --git a/modules/local/fusionreport/detect/tests/nextflow.config b/modules/local/fusionreport/detect/tests/nextflow.config new file mode 100644 index 000000000..a1c327073 --- /dev/null +++ b/modules/local/fusionreport/detect/tests/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: 'FUSIONREPORT_DOWNLOAD' { + ext.args = "--no-cosmic" + } + + withName: 'FUSIONREPORT' { + ext.args = { {params.no_cosmic} ? "--no-cosmic" : "" } + ext.args2 = "--export csv" + } +} From 9673b855044ce293a1e67a30b2199fe248b58180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 20:58:39 +0000 Subject: [PATCH 153/887] update module --- modules.json | 2 +- modules/nf-core/arriba/arriba/environment.yml | 3 + modules/nf-core/arriba/arriba/main.nf | 17 ++- modules/nf-core/arriba/arriba/meta.yml | 39 +------ .../nf-core/arriba/arriba/tests/main.nf.test | 107 ++++++++++++++++++ .../arriba/arriba/tests/main.nf.test.snap | 55 +++++++++ .../arriba/arriba/tests/nextflow.config | 8 ++ 7 files changed, 186 insertions(+), 45 deletions(-) create mode 100644 modules/nf-core/arriba/arriba/tests/main.nf.test create mode 100644 modules/nf-core/arriba/arriba/tests/main.nf.test.snap create mode 100644 modules/nf-core/arriba/arriba/tests/nextflow.config diff --git a/modules.json b/modules.json index 15c6ecac1..f8ae46aeb 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "arriba/arriba": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "7741dfc830e77a8ead2fcb50b01461ee09d0cdfe", "installed_by": ["modules"] }, "arriba/download": { diff --git a/modules/nf-core/arriba/arriba/environment.yml b/modules/nf-core/arriba/arriba/environment.yml index d0883a0d2..c3a88ffbd 100644 --- a/modules/nf-core/arriba/arriba/environment.yml +++ b/modules/nf-core/arriba/arriba/environment.yml @@ -1,5 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda + dependencies: - bioconda::arriba=2.4.0 diff --git a/modules/nf-core/arriba/arriba/main.nf b/modules/nf-core/arriba/arriba/main.nf index 761d0bf35..75dbf93ad 100644 --- a/modules/nf-core/arriba/arriba/main.nf +++ b/modules/nf-core/arriba/arriba/main.nf @@ -8,14 +8,13 @@ process ARRIBA_ARRIBA { 'biocontainers/arriba:2.4.0--h0033a41_2' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam) tuple val(meta2), path(fasta) tuple val(meta3), path(gtf) - tuple val(meta4), path(blacklist) - tuple val(meta5), path(known_fusions) - tuple val(meta6), path(structural_variants) - tuple val(meta7), path(tags) - tuple val(meta8), path(protein_domains) + path(blacklist) + path(known_fusions) + path(cytobands) + path(protein_domains) output: tuple val(meta), path("*.fusions.tsv") , emit: fusions @@ -30,8 +29,7 @@ process ARRIBA_ARRIBA { def prefix = task.ext.prefix ?: "${meta.id}" def blacklist = blacklist ? "-b $blacklist" : "-f blacklist" def known_fusions = known_fusions ? "-k $known_fusions" : "" - def structural_variants = structural_variants ? "-d $structual_variants" : "" - def tags = tags ? "-t $tags" : "" + def cytobands = cytobands ? "-d $cytobands" : "" def protein_domains = protein_domains ? "-p $protein_domains" : "" """ @@ -43,8 +41,7 @@ process ARRIBA_ARRIBA { -O ${prefix}.fusions.discarded.tsv \\ $blacklist \\ $known_fusions \\ - $structural_variants \\ - $tags \\ + $cytobands \\ $protein_domains \\ $args diff --git a/modules/nf-core/arriba/arriba/meta.yml b/modules/nf-core/arriba/arriba/meta.yml index f230dda1f..91ba21039 100644 --- a/modules/nf-core/arriba/arriba/meta.yml +++ b/modules/nf-core/arriba/arriba/meta.yml @@ -43,48 +43,19 @@ input: type: file description: Annotation GTF file pattern: "*.{gtf}" - - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - blacklist: + - - blacklist: type: file description: Blacklist file pattern: "*.{tsv}" - - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - known_fusions: + - - known_fusions: type: file description: Known fusions file pattern: "*.{tsv}" - - - meta6: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - structural_variants: - type: file - description: Structural variants file - pattern: "*.{tsv}" - - - meta7: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - tags: + - - cytobands: type: file - description: Tags file + description: Cytobands file pattern: "*.{tsv}" - - - meta8: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - protein_domains: + - - protein_domains: type: file description: Protein domains file pattern: "*.{gff3}" diff --git a/modules/nf-core/arriba/arriba/tests/main.nf.test b/modules/nf-core/arriba/arriba/tests/main.nf.test new file mode 100644 index 000000000..4cff86e50 --- /dev/null +++ b/modules/nf-core/arriba/arriba/tests/main.nf.test @@ -0,0 +1,107 @@ + +nextflow_process { + + name "Test Process ARRIBA_ARRIBA" + script "../main.nf" + process "ARRIBA_ARRIBA" + + tag "modules" + tag "modules_nfcore" + tag "arriba" + tag "arriba/arriba" + tag "arriba/download" + tag "star/genomegenerate" + tag "star/align" + + setup { + config "./nextflow.config" + options "-stub" + run("ARRIBA_DOWNLOAD") { + script "../../../arriba/download/main.nf" + process { + """ + input[0] = 'GRCh38' + """ + } + } + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + options "-stub" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + run("STAR_ALIGN") { + script "../../../star/align/main.nf" + options "-stub" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + } + + test("homo_sapiens - paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.rna.paired_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = [] + + input[4] = [] + + input[5] = [] + + input[6] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/arriba/arriba/tests/main.nf.test.snap b/modules/nf-core/arriba/arriba/tests/main.nf.test.snap new file mode 100644 index 000000000..14d46f6b8 --- /dev/null +++ b/modules/nf-core/arriba/arriba/tests/main.nf.test.snap @@ -0,0 +1,55 @@ +{ + "homo_sapiens - paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "2": [ + "versions.yml:md5,d323796555db4a58fe4c6bc08d1dec30" + ], + "fusions": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "fusions_fail": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + ] + ], + "versions": [ + "versions.yml:md5,d323796555db4a58fe4c6bc08d1dec30" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-08T15:41:23.945072" + } +} \ No newline at end of file diff --git a/modules/nf-core/arriba/arriba/tests/nextflow.config b/modules/nf-core/arriba/arriba/tests/nextflow.config new file mode 100644 index 000000000..d3d5b00f6 --- /dev/null +++ b/modules/nf-core/arriba/arriba/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + withName: STAR_GENOMEGENERATE { + ext.args = '--genomeSAindexNbases 11' + } + withName: STAR_ALIGN { + ext.args = '--readFilesCommand zcat --outSAMtype BAM Unsorted --outSAMunmapped Within --outBAMcompression 0 --outFilterMultimapNmax 50 --peOverlapNbasesMin 10 --alignSplicedMateMapLminOverLmate 0.5 --alignSJstitchMismatchNmax 5 -1 5 5 --chimSegmentMin 10 --chimOutType WithinBAM HardClip --chimJunctionOverhangMin 10 --chimScoreDropMax 30 --chimScoreJunctionNonGTAG 0 --chimScoreSeparation 1 --chimSegmentReadGapMax 3 --chimMultimapNmax 50' + } +} From 275889eb49b88552539358a7c98496eca9a403e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Thu, 5 Dec 2024 21:02:17 +0000 Subject: [PATCH 154/887] update subworkflow --- subworkflows/local/arriba_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index ce142a749..ccc888231 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -28,7 +28,7 @@ workflow ARRIBA_WORKFLOW { .map { meta, reads, fusions -> [ meta, fusions ] } ch_arriba_fusion_fail = ch_dummy_file } else { - ARRIBA_ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, [[],[]], [[],[]], ch_arriba_ref_protein_domains ) + ARRIBA_ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, [[],[]], ch_arriba_ref_protein_domains ) ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions From d290fcdc0513cf1fdfc5f97c4e06d43d02829d8f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:56:21 +0100 Subject: [PATCH 155/887] update fusioncatcher container --- modules/local/fusioncatcher/build/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index f6ff09878..4aaaf504e 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -2,7 +2,7 @@ process FUSIONCATCHER_BUILD { tag "fusioncatcher_build" label 'process_medium' - container "docker.io/clinicalgenomics/fusioncatcher:1.33" + container "docker.io/rannickscilifelab/fusioncatcher:1.34" input: val genome_gencode_version From 75b65f7b19ca805195834ea2ae0bdc445368b9ee Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 6 Dec 2024 14:28:30 +0000 Subject: [PATCH 156/887] test: add test to `FUSIONREPORT_DETECT` --- .../fusionreport/detect/tests/main.nf.test | 61 +++++- .../detect/tests/main.nf.test.snap | 186 ++++++++++++++++++ 2 files changed, 245 insertions(+), 2 deletions(-) create mode 100644 modules/local/fusionreport/detect/tests/main.nf.test.snap diff --git a/modules/local/fusionreport/detect/tests/main.nf.test b/modules/local/fusionreport/detect/tests/main.nf.test index 5d0d89aea..bd5ab356a 100644 --- a/modules/local/fusionreport/detect/tests/main.nf.test +++ b/modules/local/fusionreport/detect/tests/main.nf.test @@ -27,7 +27,7 @@ nextflow_process { input[0] = [ [ id:'test_sample' ], // meta map - file("https://github.com/atrigila/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz"), + file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz"), file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/arriba.tsv"), file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/starfusion.tsv"), file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt") @@ -50,11 +50,68 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.fusion_list, + process.out.fusion_list_filtered, + process.out.csv, + file(process.out.report[0][1]).name, + process.out.html[0][1].collect { file(it).name }, + process.out.json, + process.out.versions.flatten().first().toString().split('/')[-1] // md5sum not stable as versions contains DB timestamp + ).match() } ) } } + test("FUSIONREPORT - arriba - starfusion - fusioncatcher - stub") { + config './nextflow.config' + + setup { + run("FUSIONREPORT_DOWNLOAD") { + script "../../../fusionreport/download/main.nf" + process { + """ + """ + } + } + } + + options "-stub" + + when { + process { + """ + + input[0] = [ + [ id:'test_sample' ], // meta map + file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz"), + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/arriba.tsv"), + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/starfusion.tsv"), + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt") + ] + + input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_db + + input[2] = 1 + """ + } + params { + arriba = true + starfusion = true + fusioncatcher = true + no_cosmic = true + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + } diff --git a/modules/local/fusionreport/detect/tests/main.nf.test.snap b/modules/local/fusionreport/detect/tests/main.nf.test.snap new file mode 100644 index 000000000..fb37037fa --- /dev/null +++ b/modules/local/fusionreport/detect/tests/main.nf.test.snap @@ -0,0 +1,186 @@ +{ + "FUSIONREPORT - arriba - starfusion - fusioncatcher": { + "content": [ + [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport.tsv:md5,3593b7021f26cc5427fdc96f0d1c72f0" + ] + ], + [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport_filtered.tsv:md5,3593b7021f26cc5427fdc96f0d1c72f0" + ] + ], + [ + [ + { + "id": "test_sample" + }, + "test_sample.fusions.csv:md5,49f378c2112d7e0b3b17d9095c79e6bd" + ] + ], + "test_sample_fusionreport_index.html", + [ + "AKAP9_BRAF.html", + "BRD4-1_NUTM1.html", + "BRD4_NUTM1.html", + "CD74_AL132671.2.html", + "CD74_ROS1.html", + "CIC_DUX4.html", + "DUX4_IGH@.html", + "EML4_ALK.html", + "ETV6_NTRK3.html", + "EWSR1_ATF1.html", + "EWSR1_FLI1.html", + "FGFR3_TACC3.html", + "FIP1L1_PDGFRA.html", + "GOPC_ROS1.html", + "HOOK3_RET.html", + "IGH@_CRLF2.html", + "MALT1_IGH@.html", + "NPM1_ALK.html", + "TMPRSS2_ETV1.html", + "test_sample_fusionreport_index.html" + ], + [ + [ + { + "id": "test_sample" + }, + "fusion_genes_mqc.json:md5,b196dc8d064a47d17fd3a032b8fbed4f" + ] + ], + "versions.yml" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-06T14:23:44.59690452" + }, + "FUSIONREPORT - arriba - starfusion - fusioncatcher - stub": { + "content": [ + { + "0": [ + "versions.yml:md5,6bd28f2526774f519a7627a30c6a7f2f" + ], + "1": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport_filtered.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test_sample" + }, + "test_sample_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test_sample" + }, + [ + "AAA_BBB.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_sample_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusions.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusions.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csv": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusions.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fusion_list": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fusion_list_filtered": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport_filtered.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "html": [ + [ + { + "id": "test_sample" + }, + [ + "AAA_BBB.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_sample_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "json": [ + [ + { + "id": "test_sample" + }, + "test_sample.fusions.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "report": [ + [ + { + "id": "test_sample" + }, + "test_sample_fusionreport_index.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6bd28f2526774f519a7627a30c6a7f2f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-06T13:12:32.981394201" + } +} \ No newline at end of file From 2c860bb2d80db5aa197ec9dd94b4d91adf2a1cba Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 6 Dec 2024 14:28:38 +0000 Subject: [PATCH 157/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a70a4343..14eb29741 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) - Add nf-test to local subworkflow: `QC_WORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) +- Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/572) ### Changed From e80fd835aa2eef94862d59dde5f535e3f0272bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Fri, 6 Dec 2024 14:31:45 +0000 Subject: [PATCH 158/887] change module structure and first test attempt --- ...iba_workflow.nf => arriba_workflow.nf.bkp} | 0 subworkflows/local/arriba_workflow/main.nf | 92 ++++++++++++ .../local/arriba_workflow/tests/main.nf.test | 136 ++++++++++++++++++ workflows/rnafusion.nf | 10 +- 4 files changed, 237 insertions(+), 1 deletion(-) rename subworkflows/local/{arriba_workflow.nf => arriba_workflow.nf.bkp} (100%) create mode 100644 subworkflows/local/arriba_workflow/main.nf create mode 100644 subworkflows/local/arriba_workflow/tests/main.nf.test diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf.bkp similarity index 100% rename from subworkflows/local/arriba_workflow.nf rename to subworkflows/local/arriba_workflow.nf.bkp diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf new file mode 100644 index 000000000..a19fe86b2 --- /dev/null +++ b/subworkflows/local/arriba_workflow/main.nf @@ -0,0 +1,92 @@ +include { ARRIBA_ARRIBA } from '../../../modules/nf-core/arriba/arriba/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_ARRIBA } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_FOR_ARRIBA } from '../../../modules/nf-core/samtools/sort/main' +include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_ARRIBA } from '../../../modules/nf-core/samtools/view/main' +include { STAR_ALIGN as STAR_FOR_ARRIBA } from '../../../modules/nf-core/star/align/main' + +workflow ARRIBA_WORKFLOW { + take: + reads // channel [ meta, [ fastqs ] ] + ch_gtf // channel [ meta, path_gtf ] + ch_fasta // channel [ meta, path_fasta ] + ch_starindex_ref // channel [ meta, path_index ] + ch_arriba_ref_blacklist // channel [ meta, path_blacklist ] + ch_arriba_ref_known_fusions // channel [ meta, path_known_fusions ] + ch_arriba_ref_cytobands // channel [ meta, path_cytobands ] + ch_arriba_ref_protein_domains // channel [ meta, path_proteins ] + arriba // boolean + all // boolean + fusioninspector_only // boolean + star_ignore_sjdbgtf // boolean + seq_center // string + arriba_fusions // path? + cram // array? + + main: + ch_versions = Channel.empty() + ch_dummy_file = file("$baseDir/assets/dummy_file_arriba.txt", checkIfExists: true) + + if (( arriba || all) && !fusioninspector_only) { + + STAR_FOR_ARRIBA( + reads, + ch_starindex_ref, + ch_gtf, + star_ignore_sjdbgtf, + '', // seq_platform, should be a params like other pipelines + seq_center + ) + + ch_versions = ch_versions.mix(STAR_FOR_ARRIBA.out.versions) + + if ( arriba_fusions ) { + + ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) // This should be done in the main scirpt? + .map { meta, reads, fusions -> [ meta, fusions ] } + ch_arriba_fusion_fail = ch_dummy_file + + } else { + + ARRIBA_ARRIBA ( + STAR_FOR_ARRIBA.out.bam, + ch_fasta, + ch_gtf, + ch_arriba_ref_blacklist.map{ it[1] }, // should we update nf-core module to includes meta? + ch_arriba_ref_known_fusions.map{ it[1] }, + ch_arriba_ref_cytobands.map{ it[1] }, + ch_arriba_ref_protein_domains.map{ it[1] } + ) + + ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) + + ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions + ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ meta, file -> return file} + } + + if ( cram.contains('arriba') ) { + + SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam, ch_fasta) + ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions ) + + SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) + ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) + + SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_VIEW_FOR_ARRIBA.out.cram) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions ) + + } + + } + else { + ch_arriba_fusions = reads.combine(Channel.value( file(ch_dummy_file, checkIfExists:true ) ) ) + .map { meta, reads, fusions -> [ meta, fusions ] } + + ch_arriba_fusion_fail = ch_dummy_file + } + + emit: + fusions = ch_arriba_fusions + fusions_fail = ch_arriba_fusion_fail + versions = ch_versions + } + diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test b/subworkflows/local/arriba_workflow/tests/main.nf.test new file mode 100644 index 000000000..73f91ea28 --- /dev/null +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test @@ -0,0 +1,136 @@ +nextflow_workflow { + + name "Test Subworkflow ARRIBA_WORKFLOW" + script "../main.nf" + //config "./nextflow.config" + workflow "ARRIBA_WORKFLOW" + tag "subworkflow" + tag "arriba" + tag "arriba/arriba" + tag "samtools" + tag "samtools/index" + tag "samtools/sort" + tag "samtools/view" + tag "star" + tag "star/align" + + + test("ARRIBA_WORKFLOW - Homo sapiens chr22") { + + when { + setup { + // Create genome index for STAR + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main" + process { + """ + // FASTA + input[0] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExist: true + ) + .map{ [[id: it.name], it ]} + + + // GTF + input[1] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true + ) + .map{ [[id: it.name], it ]} + """ + } + } + } + + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [ id: "test_fastqs" ], + [ + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_1.fq.gz", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_2.fq.gz", checkIfExists: true) + ] + ] ) + + // ch_gtf + input[1] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_fasta + input[2] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExist: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_starindex_ref + input[3] = STAR_GENOMEGENERATE.out.index.map{ [ [id: "star_index"], it ] } + + // ch_arriba_ref_blacklist + input[4] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExist: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_known_fusions + input[5] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExist: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_cytobands + input[6] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExist: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_protein_domains + input[7] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExist: true + ) + .map{ [ [ id: it.name ], it ] } + + // arriba (boolean) + input[8] = true + + // all (boolean) + input[9] = true + + // fusioninspector_only (boolean) + input[10] = false + + // star_ignore_sjdbgtf (boolean) + input[11] = false + + // seq_center (string) + input[12] = 'test_center' + + // arriba_fusions (path) + input[13] = null + + // cram (array??) + input[14] = [ 'arriba' ] + """ + } + } + + then { + assertAll( + { assert workflow.success }/*, + { assert snapshot(file( workflow.out.versions[0] )).match('versions' ) }, + { assert snapshot(file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1]).md5().match('rnaseq_metrics' ) }, + { assert snapshot(file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1]).md5().match('duplicate_metrics' ) }, + { assert snapshot(file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1]).md5().match('insertsize_metrics') }*/ + ) + } + } + +} diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index bafea68c3..a457a1e3c 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -92,7 +92,15 @@ workflow RNAFUSION { ch_starindex_ensembl_ref, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, - ch_arriba_ref_protein_domains + ch_arriba_ref_cytobands, + ch_arriba_ref_protein_domains, + params.arriba // boolean + params.all // boolean + params.fusioninspector_only // boolean + params.star_ignore_sjdbgtf, + params.seq_center ?: '', + params.arriba_fusions, // path + params.cram // array? ) ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) From a6c082ef6eb4fb0bb050b4fb7a1f2d6fa99c8cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Fri, 6 Dec 2024 18:46:23 +0000 Subject: [PATCH 159/887] update test and generate first snap --- subworkflows/local/arriba_workflow/main.nf | 17 +++-- .../local/arriba_workflow/tests/main.nf.test | 67 +++++++++---------- .../arriba_workflow/tests/main.nf.test.snap | 49 ++++++++++++++ 3 files changed, 91 insertions(+), 42 deletions(-) create mode 100644 subworkflows/local/arriba_workflow/tests/main.nf.test.snap diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index a19fe86b2..5460e9263 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -60,7 +60,7 @@ workflow ARRIBA_WORKFLOW { ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions - ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ meta, file -> return file} + ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ meta, file -> return file } } if ( cram.contains('arriba') ) { @@ -78,15 +78,18 @@ workflow ARRIBA_WORKFLOW { } else { - ch_arriba_fusions = reads.combine(Channel.value( file(ch_dummy_file, checkIfExists:true ) ) ) - .map { meta, reads, fusions -> [ meta, fusions ] } + // Not sure how this dummy file can be useful + // If this tool can be skipped, why not just emitting an empty channel? + ch_arriba_fusions = reads + .combine(Channel.value( file(ch_dummy_file, checkIfExists: true ) ) ) + .map { meta, reads, fusions -> [ meta, fusions ] } - ch_arriba_fusion_fail = ch_dummy_file + ch_arriba_fusion_fail = ch_dummy_file } emit: - fusions = ch_arriba_fusions - fusions_fail = ch_arriba_fusion_fail - versions = ch_versions + fusions = ch_arriba_fusions + fusions_fail = ch_arriba_fusion_fail + versions = ch_versions } diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test b/subworkflows/local/arriba_workflow/tests/main.nf.test index 73f91ea28..1e713fbb1 100644 --- a/subworkflows/local/arriba_workflow/tests/main.nf.test +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test @@ -2,7 +2,6 @@ nextflow_workflow { name "Test Subworkflow ARRIBA_WORKFLOW" script "../main.nf" - //config "./nextflow.config" workflow "ARRIBA_WORKFLOW" tag "subworkflow" tag "arriba" @@ -12,35 +11,35 @@ nextflow_workflow { tag "samtools/sort" tag "samtools/view" tag "star" + tag "star/genomegenerate" tag "star/align" + test("ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4") { - test("ARRIBA_WORKFLOW - Homo sapiens chr22") { - - when { - setup { - // Create genome index for STAR - run("STAR_GENOMEGENERATE") { - script "../../../../modules/nf-core/star/genomegenerate/main" - process { - """ - // FASTA - input[0] = Channel.fromPath( - "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExist: true - ) - .map{ [[id: it.name], it ]} - - - // GTF - input[1] = Channel.fromPath( - "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true - ) - .map{ [[id: it.name], it ]} - """ - } + setup { + // Create genome index for STAR + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main" + process { + """ + // FASTA + input[0] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true + //"/workspace/rnafusion/results/test.fa", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + + // GTF + input[1] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + """ } } + } + when { workflow { """ // ch_reads @@ -63,38 +62,39 @@ nextflow_workflow { // ch_fasta input[2] = Channel.fromPath( - "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExist: true + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true + //"/workspace/rnafusion/results/test.fa", checkIfExists: true ) .map{ [ [ id: it.name ], it ] } // ch_starindex_ref - input[3] = STAR_GENOMEGENERATE.out.index.map{ [ [id: "star_index"], it ] } + input[3] = STAR_GENOMEGENERATE.out.index // ch_arriba_ref_blacklist input[4] = Channel.fromPath( - "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExist: true + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExists: true ) .map{ [ [ id: it.name ], it ] } // ch_arriba_ref_known_fusions input[5] = Channel.fromPath( - "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExist: true + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExists: true ) .map{ [ [ id: it.name ], it ] } // ch_arriba_ref_cytobands input[6] = Channel.fromPath( - "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExist: true + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExists: true ) .map{ [ [ id: it.name ], it ] } // ch_arriba_ref_protein_domains input[7] = Channel.fromPath( - "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExist: true + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", checkIfExists: true ) .map{ [ [ id: it.name ], it ] } @@ -124,11 +124,8 @@ nextflow_workflow { then { assertAll( - { assert workflow.success }/*, - { assert snapshot(file( workflow.out.versions[0] )).match('versions' ) }, - { assert snapshot(file( workflow.out.rnaseq_metrics[0][1] ).readLines()[4..-1]).md5().match('rnaseq_metrics' ) }, - { assert snapshot(file( workflow.out.duplicate_metrics[0][1] ).readLines()[4..-1]).md5().match('duplicate_metrics' ) }, - { assert snapshot(file( workflow.out.insertsize_metrics[0][1] ).readLines()[4..-1]).md5().match('insertsize_metrics') }*/ + { assert workflow.success }, + { assert snapshot(workflow.out).match() } ) } } diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test.snap b/subworkflows/local/arriba_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..f7b6a8db3 --- /dev/null +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test.snap @@ -0,0 +1,49 @@ +{ + "ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4": { + "content": [ + { + "0": [ + [ + { + "id": "test_fastqs" + }, + "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" + ] + ], + "1": [ + "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" + ], + "2": [ + "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", + "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9", + "versions.yml:md5,85458747b55f37c1a5afd39ee7a3a4aa", + "versions.yml:md5,bfc5d96804f2991c7f7c705f1ddf81ec", + "versions.yml:md5,f4f64d3f1fd867d5afa51e03f7cf2824" + ], + "fusions": [ + [ + { + "id": "test_fastqs" + }, + "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" + ] + ], + "fusions_fail": [ + "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" + ], + "versions": [ + "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", + "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9", + "versions.yml:md5,85458747b55f37c1a5afd39ee7a3a4aa", + "versions.yml:md5,bfc5d96804f2991c7f7c705f1ddf81ec", + "versions.yml:md5,f4f64d3f1fd867d5afa51e03f7cf2824" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-06T18:40:22.919178866" + } +} \ No newline at end of file From be6e10262720181536a80ca56fe12a79227ef815 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 9 Dec 2024 12:42:59 +0100 Subject: [PATCH 160/887] fix linting issues --- modules.json | 6 +- .../local/get_rrna_transcript/environment.yml | 6 ++ .../main.nf} | 10 +-- .../local/uscs/custom_gtftogenepred/main.nf | 3 +- modules/nf-core/salmon/quant/main.nf | 3 +- subworkflows/local/build_references.nf | 22 +++-- subworkflows/local/fusionreport_workflow.nf | 2 +- .../nf-core/utils_nextflow_pipeline/main.nf | 2 + .../tests/main.workflow.nf.test | 10 ++- .../nf-core/utils_nfcore_pipeline/main.nf | 89 +++++-------------- .../tests/main.function.nf.test | 46 ++++------ .../tests/main.function.nf.test.snap | 30 ------- .../utils_nfschema_plugin/tests/main.nf.test | 4 +- 13 files changed, 86 insertions(+), 147 deletions(-) create mode 100644 modules/local/get_rrna_transcript/environment.yml rename modules/local/{get_rrna_transcripts.nf => get_rrna_transcript/main.nf} (79%) diff --git a/modules.json b/modules.json index 48fa1f6bd..b41d5fa59 100644 --- a/modules.json +++ b/modules.json @@ -152,17 +152,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", + "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", + "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", + "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", "installed_by": ["subworkflows"] } } diff --git a/modules/local/get_rrna_transcript/environment.yml b/modules/local/get_rrna_transcript/environment.yml new file mode 100644 index 000000000..66b65c3a9 --- /dev/null +++ b/modules/local/get_rrna_transcript/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pirate=1.0.5 + - bioconda::perl-bioperl=1.7.8 diff --git a/modules/local/get_rrna_transcripts.nf b/modules/local/get_rrna_transcript/main.nf similarity index 79% rename from modules/local/get_rrna_transcripts.nf rename to modules/local/get_rrna_transcript/main.nf index cb39b3e4c..5331f534a 100644 --- a/modules/local/get_rrna_transcripts.nf +++ b/modules/local/get_rrna_transcript/main.nf @@ -2,17 +2,17 @@ process GET_RRNA_TRANSCRIPTS { tag 'get_rrna_bed' label 'process_low' - conda "bioconda::pirate=1.0.4 bioconda::perl-bioperl=1.7.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/pirate:1.0.4--hdfd78af_2' : - 'biocontainers/pirate:1.0.4--hdfd78af_2' }" + 'https://depot.galaxyproject.org/singularity/pirate:1.0.5--hdfd78af_0' : + 'biocontainers/pirate:1.0.5--hdfd78af_0' }" input: tuple val(meta), path(gtf) output: - path('rrna.gtf') , emit: rrnagtf - path('rrna.bed') , emit: bed + tuple val(meta), path('rrna.gtf') , emit: rrnagtf + tuple val(meta), path('rrna.bed') , emit: bed path "versions.yml" , emit: versions when: diff --git a/modules/local/uscs/custom_gtftogenepred/main.nf b/modules/local/uscs/custom_gtftogenepred/main.nf index 53a74e3d3..9cc15765e 100644 --- a/modules/local/uscs/custom_gtftogenepred/main.nf +++ b/modules/local/uscs/custom_gtftogenepred/main.nf @@ -11,7 +11,8 @@ process GTF_TO_REFFLAT { tuple val(meta), path (gtf) output: - path('*.refflat'), emit: refflat + path('*.refflat') , emit: refflat + path "versions.yml" , emit: versions script: def genepred = gtf + '.genepred' diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index e2d273525..f1e3b5cda 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -29,8 +29,7 @@ process SALMON_QUANT { prefix = task.ext.prefix ?: "${meta.id}" def reference = "--index $index" - def reads1 = [] - def reads2 = [] + def reads1 = [], reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" if (alignment_mode) { diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 7d942601c..8685feebc 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -5,15 +5,13 @@ */ include { GENCODE_DOWNLOAD } from '../../modules/local/gencode_download/main' -include { FUSIONCATCHER_DOWNLOAD } from '../../modules/local/fusioncatcher/download/main' include { FUSIONCATCHER_BUILD } from '../../modules/local/fusioncatcher/build/main' include { FUSIONREPORT_DOWNLOAD } from '../../modules/local/fusionreport/download/main' include { HGNC_DOWNLOAD } from '../../modules/local/hgnc/main' include { STARFUSION_BUILD } from '../../modules/local/starfusion/build/main' -include { STARFUSION_DOWNLOAD } from '../../modules/local/starfusion/download/main' include { GTF_TO_REFFLAT } from '../../modules/local/uscs/custom_gtftogenepred/main' -include { GET_RRNA_TRANSCRIPTS } from '../../modules/local/get_rrna_transcripts' -// include { CONVERT2BED } from '../../modules/local/convert2bed/main' +include { GET_RRNA_TRANSCRIPTS } from '../../modules/local/get_rrna_transcript/main' + /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -41,7 +39,7 @@ workflow BUILD_REFERENCES { if (!file(params.fasta).exists() || file(params.fasta).isEmpty() || !file(params.gtf).exists() || file(params.gtf).isEmpty()){ GENCODE_DOWNLOAD(params.genome_gencode_version, params.genome) - ch_versions = GENCODE_DOWNLOAD.out.versions + ch_versions = ch_versions.mix(GENCODE_DOWNLOAD.out.versions) ch_fasta = GENCODE_DOWNLOAD.out.fasta.map { that -> [[id:that.Name], that] } ch_gtf = GENCODE_DOWNLOAD.out.gtf.map { that -> [[id:that.Name], that] } } else { @@ -51,7 +49,7 @@ workflow BUILD_REFERENCES { if (!file(params.fai).exists() || file(params.fai).isEmpty()){ SAMTOOLS_FAIDX(ch_fasta, [[],[]]) - ch_versions = SAMTOOLS_FAIDX.out.versions + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) ch_fai = SAMTOOLS_FAIDX.out.fai } else { ch_fai = Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } @@ -60,6 +58,7 @@ workflow BUILD_REFERENCES { if ((!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()) && !params.skip_vcf){ HGNC_DOWNLOAD( ) + ch_versions = ch_versions.mix(HGNC_DOWNLOAD.out.versions) ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref ch_hgnc_date = HGNC_DOWNLOAD.out.hgnc_date } else { @@ -69,8 +68,11 @@ workflow BUILD_REFERENCES { if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty()){ GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) + ch_versions = ch_versions.mix(GATK4_CREATESEQUENCEDICTIONARY.out.versions) GET_RRNA_TRANSCRIPTS(ch_gtf) + ch_versions = ch_versions.mix(GET_RRNA_TRANSCRIPTS.out.versions) GATK4_BEDTOINTERVALLIST(GET_RRNA_TRANSCRIPTS.out.bed.map { it -> [ [id:it.name], it ] }, GATK4_CREATESEQUENCEDICTIONARY.out.dict ) + ch_versions = ch_versions.mix(GATK4_BEDTOINTERVALLIST.out.versions) ch_rrna_interval = GATK4_BEDTOINTERVALLIST.out.interval_list } else { ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } @@ -78,6 +80,7 @@ workflow BUILD_REFERENCES { if (!file(params.refflat).exists() || file(params.refflat).isEmpty()){ GTF_TO_REFFLAT(ch_gtf) + ch_versions = ch_versions.mix(GTF_TO_REFFLAT.out.versions) ch_refflat = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } } else { ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } @@ -86,7 +89,9 @@ workflow BUILD_REFERENCES { if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty() || !file(params.salmon_index_stub_check).exists() || file(params.salmon_index_stub_check).isEmpty()){ // add condition for qc GFFREAD(ch_gtf, ch_fasta.map{ meta, fasta -> [ fasta ] }) + ch_versions = ch_versions.mix(GFFREAD.out.versions) SALMON_INDEX(ch_fasta.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) ch_salmon_index = SALMON_INDEX.out.index } else { ch_salmon_index = Channel.fromPath(params.salmon_index) @@ -96,6 +101,7 @@ workflow BUILD_REFERENCES { (!file(params.starindex_ref).exists() || file(params.starindex_ref).isEmpty() || !file(params.starindex_ref_stub_check).exists() || file(params.starindex_ref_stub_check).isEmpty() )) { STAR_GENOMEGENERATE(ch_fasta, ch_gtf) + ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions) ch_starindex_ref = STAR_GENOMEGENERATE.out.index } else { ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } @@ -106,6 +112,7 @@ workflow BUILD_REFERENCES { !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { ARRIBA_DOWNLOAD(params.genome) + ch_versions = ch_versions.mix(ARRIBA_DOWNLOAD.out.versions) ch_arriba_ref_blacklist = ARRIBA_DOWNLOAD.out.blacklist ch_arriba_ref_cytobands = ARRIBA_DOWNLOAD.out.cytobands ch_arriba_ref_known_fusions = ARRIBA_DOWNLOAD.out.known_fusions @@ -122,6 +129,7 @@ workflow BUILD_REFERENCES { (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { FUSIONCATCHER_BUILD(params.genome_gencode_version) + ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference } else { @@ -133,6 +141,7 @@ workflow BUILD_REFERENCES { (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { STARFUSION_BUILD(ch_fasta, ch_gtf) + ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) ch_starfusion_ref = STARFUSION_BUILD.out.reference } else { @@ -145,6 +154,7 @@ workflow BUILD_REFERENCES { !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } FUSIONREPORT_DOWNLOAD(params.cosmic_username, params.cosmic_passwd) + ch_versions = ch_versions.mix(FUSIONREPORT_DOWNLOAD.out.versions) ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.reference } else { ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref) diff --git a/subworkflows/local/fusionreport_workflow.nf b/subworkflows/local/fusionreport_workflow.nf index a61759f72..5c9bfde13 100644 --- a/subworkflows/local/fusionreport_workflow.nf +++ b/subworkflows/local/fusionreport_workflow.nf @@ -23,7 +23,7 @@ workflow FUSIONREPORT_WORKFLOW { FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) ch_fusion_list = FUSIONREPORT.out.fusion_list ch_fusion_list_filtered = FUSIONREPORT.out.fusion_list_filtered - // ch_versions = ch_versions.mix(FUSIONREPORT.out.versions) + ch_versions = ch_versions.mix(FUSIONREPORT.out.versions) ch_report = FUSIONREPORT.out.report ch_csv = FUSIONREPORT.out.csv } else { diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 0fcbf7b3f..d6e593e85 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -92,10 +92,12 @@ def checkCondaChannels() { channels = config.channels } catch (NullPointerException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } catch (IOException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce8e..02dbf094c 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 5cb7bafef..bfd258760 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -56,21 +56,6 @@ def checkProfileProvided(nextflow_cli_args) { } } -// -// Citation string for pipeline -// -def workflowCitation() { - def temp_doi_ref = "" - def manifest_doi = workflow.manifest.doi.tokenize(",") - // Handling multiple DOIs - // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers - // Removing ` ` since the manifest.doi is a string and not a proper list - manifest_doi.each { doi_ref -> - temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" - } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" -} - // // Generate workflow version string // @@ -150,33 +135,6 @@ def paramsSummaryMultiqc(summary_params) { return yaml_file_text } -// -// nf-core logo -// -def nfCoreLogo(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - String.format( - """\n - ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) -} - -// -// Return dashed line -// -def dashedLine(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - return "-${colors.dim}----------------------------------------------------${colors.reset}-" -} - // // ANSII colours used for terminal logging // @@ -245,28 +203,24 @@ def logColours(monochrome_logs=true) { return colorcodes } -// -// Attach the multiqc report to email -// -def attachMultiqcReport(multiqc_report) { - def mqc_report = null - try { - if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") - } - mqc_report = mqc_report[0] - } +// Return a single report from an object that may be a Path or List +// +def getSingleReport(multiqc_reports) { + if (multiqc_reports instanceof Path) { + return multiqc_reports + } else if (multiqc_reports instanceof List) { + if (multiqc_reports.size() == 0) { + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") + return null + } else if (multiqc_reports.size() == 1) { + return multiqc_reports.first() + } else { + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") + return multiqc_reports.first() } + } else { + return null } - catch (Exception all) { - if (multiqc_report) { - log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") - } - } - return mqc_report } // @@ -320,7 +274,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi email_fields['summary'] = summary << misc_fields // On success try attach the multiqc report - def mqc_report = attachMultiqcReport(multiqc_report) + def mqc_report = getSingleReport(multiqc_report) // Check if we are only sending emails on failure def email_address = email @@ -340,7 +294,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) @@ -351,14 +305,17 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi if (email_address) { try { if (plaintext_email) { -new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') + } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } ['sendmail', '-t'].execute() << sendmail_html log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") } - catch (Exception all) { + catch (Exception msg) { + log.debug(msg.toString()) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test index 1dc317f8f..f117040cb 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -41,26 +41,14 @@ nextflow_function { } } - test("Test Function workflowCitation") { - - function "workflowCitation" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function nfCoreLogo") { + test("Test Function without logColours") { - function "nfCoreLogo" + function "logColours" when { function { """ - input[0] = false + input[0] = true """ } } @@ -73,9 +61,8 @@ nextflow_function { } } - test("Test Function dashedLine") { - - function "dashedLine" + test("Test Function with logColours") { + function "logColours" when { function { @@ -93,14 +80,13 @@ nextflow_function { } } - test("Test Function without logColours") { - - function "logColours" + test("Test Function getSingleReport with a single file") { + function "getSingleReport" when { function { """ - input[0] = true + input[0] = file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true) """ } } @@ -108,18 +94,22 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") } ) } } - test("Test Function with logColours") { - function "logColours" + test("Test Function getSingleReport with multiple files") { + function "getSingleReport" when { function { """ - input[0] = false + input[0] = [ + file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/network.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/expression.tsv', checkIfExists: true) + ] """ } } @@ -127,7 +117,9 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") }, + { assert !function.result.contains("network.tsv") }, + { assert !function.result.contains("expression.tsv") } ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap index 1037232c9..02c670141 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -17,26 +17,6 @@ }, "timestamp": "2024-02-28T12:02:59.729647" }, - "Test Function nfCoreLogo": { - "content": [ - "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:10.562934" - }, - "Test Function workflowCitation": { - "content": [ - "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:07.019761" - }, "Test Function without logColours": { "content": [ { @@ -95,16 +75,6 @@ }, "timestamp": "2024-02-28T12:03:17.969323" }, - "Test Function dashedLine": { - "content": [ - "-\u001b[2m----------------------------------------------------\u001b[0m-" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:14.366181" - }, "Test Function with logColours": { "content": [ { diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 842dc432a..8fb301648 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -42,7 +42,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { @@ -94,7 +94,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { From 41523f932dfd76f044d1519a5210336128a55cc6 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 9 Dec 2024 12:43:53 +0100 Subject: [PATCH 161/887] prettier --- .github/workflows/awsfulltest.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index d1492d8b8..baaa04619 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -54,4 +54,3 @@ jobs: path: | seqera_platform_action_*.log seqera_platform_action_*.json - From 55b0562c864ed88347bc6d1005c06f604a0ad4dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Mon, 9 Dec 2024 11:49:03 +0000 Subject: [PATCH 162/887] update tests after fixing fasta in github --- subworkflows/local/arriba_workflow/main.nf | 5 ++--- subworkflows/local/arriba_workflow/tests/main.nf.test | 2 -- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 5460e9263..fbffb7707 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -41,7 +41,7 @@ workflow ARRIBA_WORKFLOW { if ( arriba_fusions ) { - ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) // This should be done in the main scirpt? + ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) // Should this be done in the main script? .map { meta, reads, fusions -> [ meta, fusions ] } ch_arriba_fusion_fail = ch_dummy_file @@ -76,8 +76,7 @@ workflow ARRIBA_WORKFLOW { } - } - else { + } else { // Not sure how this dummy file can be useful // If this tool can be skipped, why not just emitting an empty channel? ch_arriba_fusions = reads diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test b/subworkflows/local/arriba_workflow/tests/main.nf.test index 1e713fbb1..3fa816ea5 100644 --- a/subworkflows/local/arriba_workflow/tests/main.nf.test +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test @@ -25,7 +25,6 @@ nextflow_workflow { // FASTA input[0] = Channel.fromPath( "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true - //"/workspace/rnafusion/results/test.fa", checkIfExists: true ) .map{ [[id: it.getName() ], it ]} @@ -63,7 +62,6 @@ nextflow_workflow { input[2] = Channel.fromPath( "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true - //"/workspace/rnafusion/results/test.fa", checkIfExists: true ) .map{ [ [ id: it.name ], it ] } From 55db5b52281e11465a16de7396fbd3731907896a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Mon, 9 Dec 2024 12:49:05 +0000 Subject: [PATCH 163/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 335b84c35..7883f2c04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) - Add nf-test to local subworkflow: `QC_WORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) +- Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) ### Changed From ce331dc51d239b4325c48c5088821d2ffd99f31b Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 9 Dec 2024 13:07:02 +0000 Subject: [PATCH 164/887] docs: udpdate changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14eb29741..cc3158142 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) - Add nf-test to local subworkflow: `QC_WORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) -- Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/572) +- Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/577) ### Changed From d7a06eae5d55fd0413a67e680cc0ad3a05c69429 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 9 Dec 2024 13:36:12 +0000 Subject: [PATCH 165/887] test: update nf-test --- tests/test_build.nf.test.snap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 3b5441dc1..16b6c0079 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -34,7 +34,7 @@ "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,0abf61877f65247b15c438d605d85599", - "hgnc_complete_set.txt:md5,34f4bd879d972e511fcb0318df9775b6", + "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,744bf505deb50837b15441e808cad345" ] ], @@ -42,6 +42,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-04T17:55:45.068780109" + "timestamp": "2024-12-09T13:33:28.517098377" } } \ No newline at end of file From df269a91c1fce57e706107c8bc4a8f039f1a9ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Mon, 9 Dec 2024 13:37:33 +0000 Subject: [PATCH 166/887] update test excluding samtools --- subworkflows/local/arriba_workflow/main.nf | 18 ++- .../local/arriba_workflow/tests/main.nf.test | 120 +++++++++++++++++- .../arriba_workflow/tests/main.nf.test.snap | 49 ------- 3 files changed, 131 insertions(+), 56 deletions(-) delete mode 100644 subworkflows/local/arriba_workflow/tests/main.nf.test.snap diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index fbffb7707..4e30c7854 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -19,11 +19,12 @@ workflow ARRIBA_WORKFLOW { fusioninspector_only // boolean star_ignore_sjdbgtf // boolean seq_center // string - arriba_fusions // path? - cram // array? + arriba_fusions // path + cram // array main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() + ch_bam_index = Channel.empty() ch_dummy_file = file("$baseDir/assets/dummy_file_arriba.txt", checkIfExists: true) if (( arriba || all) && !fusioninspector_only) { @@ -74,6 +75,10 @@ workflow ARRIBA_WORKFLOW { SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_VIEW_FOR_ARRIBA.out.cram) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions ) + // Join bam and index files + SAMTOOLS_SORT_FOR_ARRIBA.out.bam + .join(SAMTOOLS_INDEX_FOR_ARRIBA.out.cram) + .set{ ch_bam_index } } } else { @@ -87,8 +92,9 @@ workflow ARRIBA_WORKFLOW { } emit: - fusions = ch_arriba_fusions - fusions_fail = ch_arriba_fusion_fail - versions = ch_versions + fusions = ch_arriba_fusions // channel [ meta, path_fusions ] + fusions_fail = ch_arriba_fusion_fail // channel [ path, fusions_failed ] + bam_index = ch_bam_index // channel [ meta, bam, index ] + versions = ch_versions // channel [ versions ] } diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test b/subworkflows/local/arriba_workflow/tests/main.nf.test index 3fa816ea5..9a9514d7c 100644 --- a/subworkflows/local/arriba_workflow/tests/main.nf.test +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test @@ -14,6 +14,8 @@ nextflow_workflow { tag "star/genomegenerate" tag "star/align" + + // Test #1 Indexing test("ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4") { setup { @@ -114,7 +116,7 @@ nextflow_workflow { // arriba_fusions (path) input[13] = null - // cram (array??) + // cram (array) input[14] = [ 'arriba' ] """ } @@ -128,4 +130,120 @@ nextflow_workflow { } } + + // TEST #2 WITHOUT INDEXING + test("ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4 - cram = []") { + + setup { + // Create genome index for STAR + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main" + process { + """ + // FASTA + input[0] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + + // GTF + input[1] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + """ + } + } + } + + when { + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [ id: "test_fastqs" ], + [ + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_1.fq.gz", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_2.fq.gz", checkIfExists: true) + ] + ] ) + + // ch_gtf + input[1] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_fasta + input[2] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_starindex_ref + input[3] = STAR_GENOMEGENERATE.out.index + + // ch_arriba_ref_blacklist + input[4] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_known_fusions + input[5] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_cytobands + input[6] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_protein_domains + input[7] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // arriba (boolean) + input[8] = true + + // all (boolean) + input[9] = true + + // fusioninspector_only (boolean) + input[10] = false + + // star_ignore_sjdbgtf (boolean) + input[11] = false + + // seq_center (string) + input[12] = 'test_center' + + // arriba_fusions (path) + input[13] = null + + // cram (array) + input[14] = [ ] + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + } diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test.snap b/subworkflows/local/arriba_workflow/tests/main.nf.test.snap deleted file mode 100644 index f7b6a8db3..000000000 --- a/subworkflows/local/arriba_workflow/tests/main.nf.test.snap +++ /dev/null @@ -1,49 +0,0 @@ -{ - "ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4": { - "content": [ - { - "0": [ - [ - { - "id": "test_fastqs" - }, - "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" - ] - ], - "1": [ - "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" - ], - "2": [ - "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", - "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9", - "versions.yml:md5,85458747b55f37c1a5afd39ee7a3a4aa", - "versions.yml:md5,bfc5d96804f2991c7f7c705f1ddf81ec", - "versions.yml:md5,f4f64d3f1fd867d5afa51e03f7cf2824" - ], - "fusions": [ - [ - { - "id": "test_fastqs" - }, - "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" - ] - ], - "fusions_fail": [ - "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" - ], - "versions": [ - "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", - "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9", - "versions.yml:md5,85458747b55f37c1a5afd39ee7a3a4aa", - "versions.yml:md5,bfc5d96804f2991c7f7c705f1ddf81ec", - "versions.yml:md5,f4f64d3f1fd867d5afa51e03f7cf2824" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-06T18:40:22.919178866" - } -} \ No newline at end of file From 86c299d54f63a9a387ded1e118868b287f1890e7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 9 Dec 2024 15:41:31 +0100 Subject: [PATCH 167/887] update comments --- README.md | 2 +- docs/usage.md | 1 - modules/local/hgnc/main.nf | 1 - modules/local/starfusion/build/main.nf | 1 + subworkflows/local/build_references.nf | 2 +- subworkflows/local/trim_workflow/main.nf | 3 +-- workflows/rnafusion.nf | 4 +--- 7 files changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index aa8734571..809de85f1 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ In rnafusion the full-sized test includes reference building and fusion detectio ### Build references -`--references_only` triggers a workflow to ONLY build references, otherwise the references are built with the analysis run: +`--references_only` triggers a workflow to ONLY build references, otherwise the references are build when the analysis is run: 1. Download gencode fasta and gtf files 2. Create [STAR](https://github.com/alexdobin/STAR) index diff --git a/docs/usage.md b/docs/usage.md index 1b0db1c57..c383df54c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -397,7 +397,6 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `test` - A profile with a complete configuration for automated testing - Includes links to test data so needs no other parameters - - Needs to run in two steps: with `--references_only` first and then without `--references_only` to run the analysis - !!!! Run with `-stub` as all references need to be downloaded otherwise !!!! ### `-resume` diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 2aa56038c..aa5c077cc 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -10,7 +10,6 @@ process HGNC_DOWNLOAD { output: path "hgnc_complete_set.txt" , emit: hgnc_ref path "HGNC-DB-timestamp.txt" , emit: hgnc_date - path "versions.yml" , emit: versions diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 6ac3c6942..436a5e4fd 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -10,6 +10,7 @@ process STARFUSION_BUILD { output: path "*" , emit: reference + path "versions.yml" , emit: versions script: def binPath = (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) ? "prep_genome_lib.pl" : "/usr/local/src/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl" diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 8685feebc..2399acbdf 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -94,7 +94,7 @@ workflow BUILD_REFERENCES { ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) ch_salmon_index = SALMON_INDEX.out.index } else { - ch_salmon_index = Channel.fromPath(params.salmon_index) + ch_salmon_index = Channel.fromPath({params.salmon_index}) } if ((params.starindex || params.all || params.starfusion || params.arriba) && diff --git a/subworkflows/local/trim_workflow/main.nf b/subworkflows/local/trim_workflow/main.nf index d2492116f..845adbaf5 100644 --- a/subworkflows/local/trim_workflow/main.nf +++ b/subworkflows/local/trim_workflow/main.nf @@ -7,7 +7,6 @@ workflow TRIM_WORKFLOW { take: reads // channel [ meta, [ fastq files ] ] - adapter_fasta // channel [ path ] main: ch_versions = Channel.empty() @@ -16,7 +15,7 @@ workflow TRIM_WORKFLOW { ch_fastqc_trimmed = Channel.empty() if ( {params.fastp_trim} ) { - FASTP(reads, adapter_fasta.ifEmpty( [] ), false, false, false) + FASTP(reads, {params.adapter_fasta}.ifEmpty( [] ), false, false, false) ch_versions = ch_versions.mix(FASTP.out.versions) FASTQC_FOR_FASTP(FASTP.out.reads) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 523487211..ee0e1e575 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -66,7 +66,6 @@ workflow RNAFUSION { BUILD_REFERENCES() ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) - // // QC from FASTQ files // @@ -81,8 +80,7 @@ workflow RNAFUSION { // Trimming // TRIM_WORKFLOW ( - ch_samplesheet, - ch_adapter_fastp, + ch_samplesheet ) ch_reads = TRIM_WORKFLOW.out.ch_reads_all ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) From aecc7ef189c360c9944005838401d9c54b212efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Mon, 9 Dec 2024 18:27:07 +0000 Subject: [PATCH 168/887] update test to include cram files --- subworkflows/local/arriba_workflow/main.nf | 10 +- .../local/arriba_workflow/tests/main.nf.test | 4 +- .../arriba_workflow/tests/main.nf.test.snap | 114 ++++++++++++++++++ tests/test_build.nf.test.snap | 4 +- tests/test_cosmic.nf.test.snap | 0 workflows/rnafusion.nf | 14 +-- 6 files changed, 129 insertions(+), 17 deletions(-) create mode 100644 subworkflows/local/arriba_workflow/tests/main.nf.test.snap create mode 100644 tests/test_cosmic.nf.test.snap diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 4e30c7854..28a0a0420 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -24,7 +24,7 @@ workflow ARRIBA_WORKFLOW { main: ch_versions = Channel.empty() - ch_bam_index = Channel.empty() + ch_cram_index = Channel.empty() ch_dummy_file = file("$baseDir/assets/dummy_file_arriba.txt", checkIfExists: true) if (( arriba || all) && !fusioninspector_only) { @@ -75,10 +75,8 @@ workflow ARRIBA_WORKFLOW { SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_VIEW_FOR_ARRIBA.out.cram) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions ) - // Join bam and index files - SAMTOOLS_SORT_FOR_ARRIBA.out.bam - .join(SAMTOOLS_INDEX_FOR_ARRIBA.out.cram) - .set{ ch_bam_index } + // Join cram and index files + ch_cram_index = SAMTOOLS_VIEW_FOR_ARRIBA.out.cram.join(SAMTOOLS_INDEX_FOR_ARRIBA.out.crai) } } else { @@ -94,7 +92,7 @@ workflow ARRIBA_WORKFLOW { emit: fusions = ch_arriba_fusions // channel [ meta, path_fusions ] fusions_fail = ch_arriba_fusion_fail // channel [ path, fusions_failed ] - bam_index = ch_bam_index // channel [ meta, bam, index ] + cram_index = ch_cram_index // channel [ meta, cram, crai ] versions = ch_versions // channel [ versions ] } diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test b/subworkflows/local/arriba_workflow/tests/main.nf.test index 9a9514d7c..96786a5b0 100644 --- a/subworkflows/local/arriba_workflow/tests/main.nf.test +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test @@ -21,7 +21,7 @@ nextflow_workflow { setup { // Create genome index for STAR run("STAR_GENOMEGENERATE") { - script "../../../../modules/nf-core/star/genomegenerate/main" + script "../../../../modules/nf-core/star/genomegenerate/main.nf" process { """ // FASTA @@ -137,7 +137,7 @@ nextflow_workflow { setup { // Create genome index for STAR run("STAR_GENOMEGENERATE") { - script "../../../../modules/nf-core/star/genomegenerate/main" + script "../../../../modules/nf-core/star/genomegenerate/main.nf" process { """ // FASTA diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test.snap b/subworkflows/local/arriba_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..3aa777e80 --- /dev/null +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test.snap @@ -0,0 +1,114 @@ +{ + "ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4": { + "content": [ + { + "0": [ + [ + { + "id": "test_fastqs" + }, + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.tsv" + ] + ], + "1": [ + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.discarded.tsv" + ], + "2": [ + [ + { + "id": "test_fastqs" + }, + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/test_fastqs_star_for_arriba_sorted.cram", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/test_fastqs_star_for_arriba_sorted.cram.crai" + ] + ], + "3": [ + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/5b/18880ae27c2497bddad57c4b7ba766/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/48/58af6204cc601a1a0e6e826a117f31/versions.yml" + ], + "cram_index": [ + [ + { + "id": "test_fastqs" + }, + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/test_fastqs_star_for_arriba_sorted.cram", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/test_fastqs_star_for_arriba_sorted.cram.crai" + ] + ], + "fusions": [ + [ + { + "id": "test_fastqs" + }, + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.tsv" + ] + ], + "fusions_fail": [ + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.discarded.tsv" + ], + "versions": [ + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/5b/18880ae27c2497bddad57c4b7ba766/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/versions.yml", + "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/48/58af6204cc601a1a0e6e826a117f31/versions.yml" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-09T18:02:58.142697295" + }, + "ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4 - cram = []": { + "content": [ + { + "0": [ + [ + { + "id": "test_fastqs" + }, + "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" + ] + ], + "1": [ + "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", + "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9" + ], + "cram_index": [ + + ], + "fusions": [ + [ + { + "id": "test_fastqs" + }, + "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" + ] + ], + "fusions_fail": [ + "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" + ], + "versions": [ + "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", + "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-09T18:15:28.965848873" + } +} \ No newline at end of file diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 3b5441dc1..28c648187 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -34,7 +34,7 @@ "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,0abf61877f65247b15c438d605d85599", - "hgnc_complete_set.txt:md5,34f4bd879d972e511fcb0318df9775b6", + "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,744bf505deb50837b15441e808cad345" ] ], @@ -42,6 +42,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-04T17:55:45.068780109" + "timestamp": "2024-12-09T18:20:09.914393513" } } \ No newline at end of file diff --git a/tests/test_cosmic.nf.test.snap b/tests/test_cosmic.nf.test.snap new file mode 100644 index 000000000..e69de29bb diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index a457a1e3c..0908b30c3 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -94,13 +94,13 @@ workflow RNAFUSION { ch_arriba_ref_known_fusions, ch_arriba_ref_cytobands, ch_arriba_ref_protein_domains, - params.arriba // boolean - params.all // boolean - params.fusioninspector_only // boolean - params.star_ignore_sjdbgtf, - params.seq_center ?: '', - params.arriba_fusions, // path - params.cram // array? + params.arriba, // boolean + params.all, // boolean + params.fusioninspector_only, // boolean + params.star_ignore_sjdbgtf, // boolean + params.seq_center ?: '', // string + params.arriba_fusions, // path + params.cram // array ) ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) From 9d87a377b35816d4a1ae14246ebc25458464cf1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Mon, 9 Dec 2024 18:58:19 +0000 Subject: [PATCH 169/887] remove original script --- subworkflows/local/arriba_workflow.nf.bkp | 64 ----------------------- 1 file changed, 64 deletions(-) delete mode 100644 subworkflows/local/arriba_workflow.nf.bkp diff --git a/subworkflows/local/arriba_workflow.nf.bkp b/subworkflows/local/arriba_workflow.nf.bkp deleted file mode 100644 index ccc888231..000000000 --- a/subworkflows/local/arriba_workflow.nf.bkp +++ /dev/null @@ -1,64 +0,0 @@ -include { ARRIBA_ARRIBA } from '../../modules/nf-core/arriba/arriba/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_ARRIBA} from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_FOR_ARRIBA} from '../../modules/nf-core/samtools/sort/main' -include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_ARRIBA} from '../../modules/nf-core/samtools/view/main' -include { STAR_ALIGN as STAR_FOR_ARRIBA } from '../../modules/nf-core/star/align/main' - -workflow ARRIBA_WORKFLOW { - take: - reads - ch_gtf - ch_fasta - ch_starindex_ref - ch_arriba_ref_blacklist - ch_arriba_ref_known_fusions - ch_arriba_ref_protein_domains - - main: - ch_versions = Channel.empty() - ch_dummy_file = file("$baseDir/assets/dummy_file_arriba.txt", checkIfExists: true) - - if ((params.arriba || params.all) && !params.fusioninspector_only) { - - STAR_FOR_ARRIBA( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') - ch_versions = ch_versions.mix(STAR_FOR_ARRIBA.out.versions) - - if (params.arriba_fusions) { - ch_arriba_fusions = reads.combine( Channel.value( file( params.arriba_fusions, checkIfExists: true ) ) ) - .map { meta, reads, fusions -> [ meta, fusions ] } - ch_arriba_fusion_fail = ch_dummy_file - } else { - ARRIBA_ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, [[],[]], ch_arriba_ref_protein_domains ) - ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) - - ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions - ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ meta, file -> return file} - } - - if (params.cram.contains('arriba') ){ - - SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam, ch_fasta) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions ) - - SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) - ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) - - SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_VIEW_FOR_ARRIBA.out.cram) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions ) - - } - - } - else { - ch_arriba_fusions = reads.combine(Channel.value( file(ch_dummy_file, checkIfExists:true ) ) ) - .map { meta, reads, fusions -> [ meta, fusions ] } - - ch_arriba_fusion_fail = ch_dummy_file - } - - emit: - fusions = ch_arriba_fusions - fusions_fail = ch_arriba_fusion_fail - versions = ch_versions - } - From 3a45cbbcdf5081372ed98aa2a10b8783725418a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Mon, 9 Dec 2024 19:03:43 +0000 Subject: [PATCH 170/887] fix changelog --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 923901134..5a7ecea74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/577) - Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) - ### Changed - Updated modules and migrated non-specific modules to nf-core/modules [#484](https://github.com/nf-core/rnafusion/pull/484) From 032583a93135193e38d6ce761a6d31dc989b1f05 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 01:05:43 +0000 Subject: [PATCH 171/887] fix: fix container versions --- modules/local/starfusion/build/environment.yml | 9 +++++---- modules/local/starfusion/build/main.nf | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index 06a9828af..3c0f4ac53 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -4,7 +4,8 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 - - bioconda::star-fusion=1.7.0 - - bioconda::trinity=2.15.2 - - bioconda::samtools=1.21 - - bioconda::star=2.7.11b + - bioconda::minimap2 + - bioconda::samtools + - bioconda::star + - bioconda::star-fusion=1.14.0 + - bioconda::trinity diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 6ac3c6942..202dae023 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -2,7 +2,7 @@ process STARFUSION_BUILD { tag 'star-fusion' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' + container 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:63e3d21ca68ea531' input: tuple val(meta), path(fasta) @@ -24,7 +24,7 @@ process STARFUSION_BUILD { wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m --no-check-certificate wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3p --no-check-certificate gunzip Pfam-A.hmm.gz && hmmpress Pfam-A.hmm - $binPath \\ + /opt/conda/lib/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ --annot_filter_rule AnnotFilterRule.pm \\ From 6dcac4fc79d78df11ae8f1d7a2cbb58725490879 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 01:08:37 +0000 Subject: [PATCH 172/887] test: add nf-test initial draft --- .../local/fusioninspector/tests/main.nf.test | 57 +++++++++++++++++++ .../local/starfusion/build/tests/main.nf.test | 55 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 modules/local/fusioninspector/tests/main.nf.test create mode 100644 modules/local/starfusion/build/tests/main.nf.test diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test new file mode 100644 index 000000000..0afa34acc --- /dev/null +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -0,0 +1,57 @@ +nextflow_process { + + name "Test Process FUSIONINSPECTOR" + script "../main.nf" + process "FUSIONINSPECTOR" + + test("FUSIONINSPECTOR - human") { + + when { + process { + """ + input[0] = [ + [ id:'test_sample' ], + [ + file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_1.fastq.gz"), + file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_2.fastq.gz") + ], + file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/fusion_targets.A.txt") + ] + input[1] = file("/path/to/reference/genome_lib") + """ + } + } + + then { + assert snapshot(process.out).match() + } + + } + + test("FUSIONINSPECTOR - human - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test_stub' ], + [ + file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_1.fastq.gz"), + file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_2.fastq.gz") + ], + file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/fusion_targets.A.txt") + ] + input[1] = file("https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/GRCh37_gencode_v19_CTAT_lib_Mar012021.STAR_v2.7.11a.plug-n-play.tar.gz") + """ + } + } + + then { + assert snapshot(process.out).match() + } + + } + +} diff --git a/modules/local/starfusion/build/tests/main.nf.test b/modules/local/starfusion/build/tests/main.nf.test new file mode 100644 index 000000000..ef9aa3931 --- /dev/null +++ b/modules/local/starfusion/build/tests/main.nf.test @@ -0,0 +1,55 @@ +nextflow_process { + + name "Test Process STARFUSION_BUILD" + script "../main.nf" + process "STARFUSION_BUILD" + + test("STARFUSION_BUILD - human - chr4") { + + when { + process { + """ + input[0] = [ + [ id:'fasta' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa") + ] + input[1] = [ + [ id:'gtf' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf") + ] + """ + } + } + + then { + assert snapshot(process.out).match() + } + + } + + test("STARFUSION_BUILD - human - chr4") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'fasta' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa") + ] + input[1] = [ + [ id:'gtf' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf") + ] + """ + } + } + + then { + assert snapshot(process.out).match() + } + + } + +} From 35b5d9cb50a489c6c576bc2aa93f7cd5a6991e6c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:44:24 +0100 Subject: [PATCH 173/887] fix i/o in channels --- conf/modules.config | 8 +++---- subworkflows/local/build_references.nf | 6 +++--- subworkflows/local/trim_workflow/main.nf | 2 +- workflows/rnafusion.nf | 27 +++++------------------- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d20ca0f2d..d021ae36e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,10 +18,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - withName: '.*' { - ext.when = { !params.references_only || task.process.contains('BUILD_REFERENCES') } - } - withName: 'ARRIBA_ARRIBA' { publishDir = [ path: { "${params.outdir}/arriba" }, @@ -371,4 +367,8 @@ process { withName: 'VCF_COLLECT' { ext.when = { {!params.fusioninspector_only} && {!params.skip_vcf} } } + + withName: '.*' { + ext.when = { !params.references_only || task.process.contains('BUILD_REFERENCES') } + } } diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 2399acbdf..e158f566b 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -71,7 +71,7 @@ workflow BUILD_REFERENCES { ch_versions = ch_versions.mix(GATK4_CREATESEQUENCEDICTIONARY.out.versions) GET_RRNA_TRANSCRIPTS(ch_gtf) ch_versions = ch_versions.mix(GET_RRNA_TRANSCRIPTS.out.versions) - GATK4_BEDTOINTERVALLIST(GET_RRNA_TRANSCRIPTS.out.bed.map { it -> [ [id:it.name], it ] }, GATK4_CREATESEQUENCEDICTIONARY.out.dict ) + GATK4_BEDTOINTERVALLIST(GET_RRNA_TRANSCRIPTS.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict ) ch_versions = ch_versions.mix(GATK4_BEDTOINTERVALLIST.out.versions) ch_rrna_interval = GATK4_BEDTOINTERVALLIST.out.interval_list } else { @@ -153,9 +153,9 @@ workflow BUILD_REFERENCES { (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } - FUSIONREPORT_DOWNLOAD(params.cosmic_username, params.cosmic_passwd) + FUSIONREPORT_DOWNLOAD() ch_versions = ch_versions.mix(FUSIONREPORT_DOWNLOAD.out.versions) - ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.reference + ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.mitelman.map{ it.parent } } else { ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref) } diff --git a/subworkflows/local/trim_workflow/main.nf b/subworkflows/local/trim_workflow/main.nf index 845adbaf5..512a07b54 100644 --- a/subworkflows/local/trim_workflow/main.nf +++ b/subworkflows/local/trim_workflow/main.nf @@ -15,7 +15,7 @@ workflow TRIM_WORKFLOW { ch_fastqc_trimmed = Channel.empty() if ( {params.fastp_trim} ) { - FASTP(reads, {params.adapter_fasta}.ifEmpty( [] ), false, false, false) + FASTP(reads, {params.adapter_fasta}, false, false, false) ch_versions = ch_versions.mix(FASTP.out.versions) FASTQC_FOR_FASTP(FASTP.out.reads) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index ee0e1e575..cf3585339 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -38,27 +38,10 @@ workflow RNAFUSION { main: - ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() - ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() - ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() - ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() - ch_adapter_fastp = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta, checkIfExists: true) : Channel.empty() - ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() - ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() - ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() - ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() - ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() - ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() - ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() - ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() - ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() - ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() - ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() - - ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() + // // Create references if necessary // @@ -66,6 +49,7 @@ workflow RNAFUSION { BUILD_REFERENCES() ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) + // // QC from FASTQ files // @@ -85,7 +69,6 @@ workflow RNAFUSION { ch_reads = TRIM_WORKFLOW.out.ch_reads_all ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) @@ -108,7 +91,7 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) -//Run STAR fusion + //Run STAR fusion STARFUSION_WORKFLOW ( ch_reads, BUILD_REFERENCES.out.ch_gtf, @@ -118,14 +101,14 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) -//Run fusioncatcher + //Run fusioncatcher FUSIONCATCHER_WORKFLOW ( ch_reads ) ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) -//Run stringtie + //Run stringtie STRINGTIE_WORKFLOW ( STARFUSION_WORKFLOW.out.ch_bam_sorted, BUILD_REFERENCES.out.ch_gtf From 24a46103dd3a07ae43f22b094e2c7da943126c29 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:36:53 +0100 Subject: [PATCH 174/887] test build removed from ci as build_references happens before the run --- .github/workflows/ci.yml | 1 - conf/test_build.config | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 71ff72459..a510d72db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,6 @@ jobs: - "latest-stable" test_profile: - "test_stub" - - "test_build" compute_profile: - "docker" - "singularity" diff --git a/conf/test_build.config b/conf/test_build.config index 616d734f0..260023271 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -15,7 +15,7 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - build_references = true + references_only = true input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' no_cosmic = true all = true From 94fe6092cf313e650b7f4bed6b6ad041da20f09c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:37:56 +0100 Subject: [PATCH 175/887] remove double nested folder --- CHANGELOG.md | 1 + conf/modules.config | 2 +- modules/local/fusionreport/download/main.nf | 22 ++++++++++----------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 690024b2c..b7b8659cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) +- Remove double nested folder introduced in [#572](https://github.com/nf-core/rnafusion/pull/577), []() ### Fixed diff --git a/conf/modules.config b/conf/modules.config index abe0e79d4..264d1c87e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -114,7 +114,7 @@ process { ext.args = { {params.no_cosmic} ? "--no-cosmic" : " --cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } ext.args2 = { params.qiagen ? "--qiagen" : "" } publishDir = [ - path: { "${params.genomes_base}/fusion_report_db" }, + path: { "${params.genomes_base}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index b19a64462..89f631db4 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -6,17 +6,17 @@ process FUSIONREPORT_DOWNLOAD { container "docker.io/clinicalgenomics/fusion-report:3.1.0" output: - tuple val(meta), path("fusionreport_dbs"), emit: fusionreport_db + tuple val(meta), path("fusion_report_db"), emit: fusionreport_ref path "versions.yml" , emit: versions script: - meta = [id: 'fusionreport_dbs'] + meta = [id: 'fusion_report_db'] def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' """ fusion_report download $args ./ - mkdir fusionreport_dbs - mv *.txt *.log *.db fusionreport_dbs + mkdir fusion_report_db + mv *.txt *.log *.db fusion_report_db/ cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -25,14 +25,14 @@ process FUSIONREPORT_DOWNLOAD { """ stub: - meta = [id: 'fusionreport_dbs'] + meta = [id: 'fusion_report_db'] """ - mkdir fusionreport_dbs - touch fusionreport_dbs/cosmic.db - touch fusionreport_dbs/fusiongdb2.db - touch fusionreport_dbs/mitelman.db - touch fusionreport_dbs/DB-timestamp.txt - touch fusionreport_dbs/fusion_report.log + mkdir fusion_report_db + touch fusion_report_db/cosmic.db + touch fusion_report_db/fusiongdb2.db + touch fusion_report_db/mitelman.db + touch fusion_report_db/DB-timestamp.txt + touch fusion_report_db/fusion_report.log cat <<-END_VERSIONS > versions.yml "${task.process}": From e52244904c69d632320322f911c935d396c60fad Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:39:19 +0100 Subject: [PATCH 176/887] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7b8659cc..a2603f3e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) -- Remove double nested folder introduced in [#572](https://github.com/nf-core/rnafusion/pull/577), []() +- Remove double nested folder introduced in [#572](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) ### Fixed From 18ab239ce99002d3bab715c734ce3010b704ec5a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:40:24 +0100 Subject: [PATCH 177/887] update changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2603f3e9..0371c2067 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) - Add nf-test to local subworkflow: `QC_WORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) -- Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/577) +- Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#577](https://github.com/nf-core/rnafusion/pull/577) ### Changed @@ -27,7 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) -- Remove double nested folder introduced in [#572](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) +- Remove double nested folder introduced in [#577](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) ### Fixed From 76cf2aaffc1630665ec3ad9e1534549eefaa2002 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:20:11 +0100 Subject: [PATCH 178/887] update snapshots, add meta --- conf/modules.config | 2 +- conf/test.config | 2 + modules/local/fusionreport/detect/main.nf | 2 +- modules/local/fusionreport/download/main.nf | 20 +- subworkflows/local/build_references.nf | 6 +- subworkflows/local/fusionreport_workflow.nf | 1 - .../utils_nfcore_rnafusion_pipeline/main.nf | 2 +- test.xml | 1 + tests/test_cosmic.nf.test.snap | 68 +++ tests/test_stub.nf.test.snap | 459 +++++++++++++++++- 10 files changed, 540 insertions(+), 23 deletions(-) create mode 100644 test.xml create mode 100644 tests/test_cosmic.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index d021ae36e..bbbee5c2c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -111,7 +111,7 @@ process { ext.args = { {params.no_cosmic} ? "--no-cosmic" : " --cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } ext.args2 = { params.qiagen ? "--qiagen" : "" } publishDir = [ - path: { "${params.genomes_base}/fusion_report_db" }, + path: { "${params.genomes_base}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/test.config b/conf/test.config index 3cafa252b..1902de0a9 100644 --- a/conf/test.config +++ b/conf/test.config @@ -16,4 +16,6 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' + all = true + no_cosmic = true } diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 5482d4bf7..56a29ab4c 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -7,7 +7,7 @@ process FUSIONREPORT { input: tuple val(meta), path(reads), path(arriba_fusions), path(starfusion_fusions), path(fusioncatcher_fusions) - path(fusionreport_ref) + tuple val(meta2), path(fusionreport_ref) val(tools_cutoff) output: diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index b19a64462..a2c2a96ba 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -6,17 +6,17 @@ process FUSIONREPORT_DOWNLOAD { container "docker.io/clinicalgenomics/fusion-report:3.1.0" output: - tuple val(meta), path("fusionreport_dbs"), emit: fusionreport_db + tuple val(meta), path("fusion_report_db"), emit: fusionreport_ref path "versions.yml" , emit: versions script: - meta = [id: 'fusionreport_dbs'] + meta = [id: 'fusion_report_db'] def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' """ fusion_report download $args ./ - mkdir fusionreport_dbs - mv *.txt *.log *.db fusionreport_dbs + mkdir fusion_report_db + mv *.txt *.log *.db fusion_report_db cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -27,12 +27,12 @@ process FUSIONREPORT_DOWNLOAD { stub: meta = [id: 'fusionreport_dbs'] """ - mkdir fusionreport_dbs - touch fusionreport_dbs/cosmic.db - touch fusionreport_dbs/fusiongdb2.db - touch fusionreport_dbs/mitelman.db - touch fusionreport_dbs/DB-timestamp.txt - touch fusionreport_dbs/fusion_report.log + mkdir fusion_report_db + touch fusion_report_db/cosmic.db + touch fusion_report_db/fusiongdb2.db + touch fusion_report_db/mitelman.db + touch fusion_report_db/DB-timestamp.txt + touch fusion_report_db/fusion_report.log cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index e158f566b..8e9cc4b1e 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -152,12 +152,12 @@ workflow BUILD_REFERENCES { if ((params.fusionreport || params.all) && (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { - if (!params.cosmic_username || !params.cosmic_passwd) { exit 1, 'COSMIC username and/or password missing' } + if (!params.no_cosmic && (!params.cosmic_username || !params.cosmic_passwd)) { exit 1, 'COSMIC username and/or password missing' } FUSIONREPORT_DOWNLOAD() ch_versions = ch_versions.mix(FUSIONREPORT_DOWNLOAD.out.versions) - ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.mitelman.map{ it.parent } + ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref } else { - ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref) + ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } } emit: diff --git a/subworkflows/local/fusionreport_workflow.nf b/subworkflows/local/fusionreport_workflow.nf index 5c9bfde13..80fe73378 100644 --- a/subworkflows/local/fusionreport_workflow.nf +++ b/subworkflows/local/fusionreport_workflow.nf @@ -19,7 +19,6 @@ workflow FUSIONREPORT_WORKFLOW { .join(arriba_fusions, remainder: true) .join(starfusion_fusions, remainder: true) .join(fusioncatcher_fusions, remainder: true) - FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) ch_fusion_list = FUSIONREPORT.out.fusion_list ch_fusion_list_filtered = FUSIONREPORT.out.fusion_list_filtered diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 4b46c5c02..1f905a44b 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -157,7 +157,7 @@ def validateInputParameters() { genomeExistsError() if (params.no_cosmic) { - log.warn("Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD`") + log.warn("Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD` and skip using it in `FUSIONREPORT`") } } diff --git a/test.xml b/test.xml new file mode 100644 index 000000000..e8f1835bc --- /dev/null +++ b/test.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/test_cosmic.nf.test.snap b/tests/test_cosmic.nf.test.snap new file mode 100644 index 000000000..dc3ab947a --- /dev/null +++ b/tests/test_cosmic.nf.test.snap @@ -0,0 +1,68 @@ +{ + "test cosmic no fastp trim build": { + "content": [ + 0, + { + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-10T12:42:49.558429" + }, + "test cosmic no fastp trim": { + "content": [ + 0, + { + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-10T12:42:06.51355" + }, + "test cosmic with fastp trim": { + "content": [ + 0, + { + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-10T12:41:17.841938" + } +} \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 3b83c2400..febef3c8d 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,22 +1,131 @@ { "stub test no fastp trim": { "content": [ - 4, + 31, { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTP": { + "fastp": "0.23.4" + }, "FASTQC": { "fastqc": "0.12.1" }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER": { + "fusioncatcher": 1.33 + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "fusioncatcher.py 1.35" + }, "FUSIONREPORT": { "fusion_report": "2.1.5" }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.7.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.7.0" + }, + "STAR_FOR_ARRIBA": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -25,28 +134,156 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ref_annot.cdna.fa", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json" + "salmon/test_meta_info.json", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T19:27:00.717876194" + "timestamp": "2024-12-10T14:12:48.526275" }, "stub test with fastp trim": { "content": [ - 6, + 31, { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, "FASTP": { "fastp": "0.23.4" }, @@ -56,14 +293,96 @@ "FASTQC_FOR_FASTP": { "fastqc": "0.12.1" }, + "FUSIONCATCHER": { + "fusioncatcher": 1.33 + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "fusioncatcher.py 1.35" + }, "FUSIONREPORT": { "fusion_report": "2.1.5" }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.7.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.7.0" + }, + "STAR_FOR_ARRIBA": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", "fastp", "fastp/test.fastp.html", "fastp/test.fastp.json", @@ -76,6 +395,12 @@ "fastqc_for_fastp", "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -84,22 +409,144 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ref_annot.cdna.fa", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json" + "salmon/test_meta_info.json", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T19:26:43.375635514" + "timestamp": "2024-12-10T14:10:38.383967" } } \ No newline at end of file From 56ed001b0fce281ba4375db685969541cc70e7af Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:25:59 +0100 Subject: [PATCH 179/887] remove trash files --- test.fusionreport.tsv | 0 test.fusionreport_filtered.tsv | 0 test.fusions.csv | 0 test.fusions.json | 0 test.xml | 1 - test_fusionreport_index.html | 0 6 files changed, 1 deletion(-) delete mode 100644 test.fusionreport.tsv delete mode 100644 test.fusionreport_filtered.tsv delete mode 100644 test.fusions.csv delete mode 100644 test.fusions.json delete mode 100644 test.xml delete mode 100644 test_fusionreport_index.html diff --git a/test.fusionreport.tsv b/test.fusionreport.tsv deleted file mode 100644 index e69de29bb..000000000 diff --git a/test.fusionreport_filtered.tsv b/test.fusionreport_filtered.tsv deleted file mode 100644 index e69de29bb..000000000 diff --git a/test.fusions.csv b/test.fusions.csv deleted file mode 100644 index e69de29bb..000000000 diff --git a/test.fusions.json b/test.fusions.json deleted file mode 100644 index e69de29bb..000000000 diff --git a/test.xml b/test.xml deleted file mode 100644 index e8f1835bc..000000000 --- a/test.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test_fusionreport_index.html b/test_fusionreport_index.html deleted file mode 100644 index e69de29bb..000000000 From 2e928ed27519168d7ee851a9e593496031d5e104 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:59:16 +0100 Subject: [PATCH 180/887] update test --- modules/local/fusionreport/detect/tests/main.nf.test | 5 ++--- modules/local/fusionreport/detect/tests/main.nf.test.snap | 6 +++--- modules/local/fusionreport/download/tests/main.nf.test | 8 ++++---- .../local/fusionreport/download/tests/main.nf.test.snap | 8 ++++---- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/modules/local/fusionreport/detect/tests/main.nf.test b/modules/local/fusionreport/detect/tests/main.nf.test index bd5ab356a..9fc895403 100644 --- a/modules/local/fusionreport/detect/tests/main.nf.test +++ b/modules/local/fusionreport/detect/tests/main.nf.test @@ -33,8 +33,7 @@ nextflow_process { file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt") ] - input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_db - + input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref input[2] = 1 """ } @@ -91,7 +90,7 @@ nextflow_process { file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt") ] - input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_db + input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref input[2] = 1 """ diff --git a/modules/local/fusionreport/detect/tests/main.nf.test.snap b/modules/local/fusionreport/detect/tests/main.nf.test.snap index fb37037fa..21d16b61b 100644 --- a/modules/local/fusionreport/detect/tests/main.nf.test.snap +++ b/modules/local/fusionreport/detect/tests/main.nf.test.snap @@ -68,7 +68,7 @@ "content": [ { "0": [ - "versions.yml:md5,6bd28f2526774f519a7627a30c6a7f2f" + "versions.yml:md5,8cabeb934dbeb51399427d83c57bf1b4" ], "1": [ [ @@ -173,7 +173,7 @@ ] ], "versions": [ - "versions.yml:md5,6bd28f2526774f519a7627a30c6a7f2f" + "versions.yml:md5,8cabeb934dbeb51399427d83c57bf1b4" ] } ], @@ -181,6 +181,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-06T13:12:32.981394201" + "timestamp": "2024-12-10T14:55:14.475834" } } \ No newline at end of file diff --git a/modules/local/fusionreport/download/tests/main.nf.test b/modules/local/fusionreport/download/tests/main.nf.test index dd079587f..35af2a52b 100644 --- a/modules/local/fusionreport/download/tests/main.nf.test +++ b/modules/local/fusionreport/download/tests/main.nf.test @@ -19,10 +19,10 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - path(process.out.fusionreport_db[0][1]).resolve("fusiongdb2.db"), - path(process.out.fusionreport_db[0][1]).resolve("mitelman.db"), - path(process.out.fusionreport_db[0][1]).resolve("DB-timestamp.txt").exists(), - path(process.out.fusionreport_db[0][1]).resolve("fusion_report.log").exists(), + path(process.out.fusionreport_ref[0][1]).resolve("fusiongdb2.db"), + path(process.out.fusionreport_ref[0][1]).resolve("mitelman.db"), + path(process.out.fusionreport_ref[0][1]).resolve("DB-timestamp.txt").exists(), + path(process.out.fusionreport_ref[0][1]).resolve("fusion_report.log").exists(), process.out.versions ).match() } ) diff --git a/modules/local/fusionreport/download/tests/main.nf.test.snap b/modules/local/fusionreport/download/tests/main.nf.test.snap index c328f7486..797788065 100644 --- a/modules/local/fusionreport/download/tests/main.nf.test.snap +++ b/modules/local/fusionreport/download/tests/main.nf.test.snap @@ -21,7 +21,7 @@ "0": [ [ { - "id": "fusionreport_dbs" + "id": "fusion_report_db" }, [ "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -35,10 +35,10 @@ "1": [ "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" ], - "fusionreport_db": [ + "fusion_report_db": [ [ { - "id": "fusionreport_dbs" + "id": "fusion_report_db" }, [ "DB-timestamp.txt:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -60,4 +60,4 @@ }, "timestamp": "2024-12-05T19:35:49.629287874" } -} \ No newline at end of file +} From 82c1fc01a58dec24c61b8756ad2a530a12b54ae0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:12:18 +0100 Subject: [PATCH 181/887] update download snapshot --- modules/local/fusionreport/download/tests/main.nf.test.snap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/fusionreport/download/tests/main.nf.test.snap b/modules/local/fusionreport/download/tests/main.nf.test.snap index 797788065..722d8c68b 100644 --- a/modules/local/fusionreport/download/tests/main.nf.test.snap +++ b/modules/local/fusionreport/download/tests/main.nf.test.snap @@ -35,7 +35,7 @@ "1": [ "versions.yml:md5,fa5f13c563f431912048c1802b5a0c74" ], - "fusion_report_db": [ + "fusionreport_ref": [ [ { "id": "fusion_report_db" @@ -58,6 +58,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-05T19:35:49.629287874" + "timestamp": "2024-12-10T15:05:22.781845" } -} +} \ No newline at end of file From 87f5ff80b4b69f74e9d16a08acfa62845d2856d3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:14:22 +0100 Subject: [PATCH 182/887] update detect snapshot --- modules/local/fusionreport/detect/tests/main.nf.test.snap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/fusionreport/detect/tests/main.nf.test.snap b/modules/local/fusionreport/detect/tests/main.nf.test.snap index 21d16b61b..c20e3ec41 100644 --- a/modules/local/fusionreport/detect/tests/main.nf.test.snap +++ b/modules/local/fusionreport/detect/tests/main.nf.test.snap @@ -68,7 +68,7 @@ "content": [ { "0": [ - "versions.yml:md5,8cabeb934dbeb51399427d83c57bf1b4" + "versions.yml:md5,6bd28f2526774f519a7627a30c6a7f2f" ], "1": [ [ @@ -173,7 +173,7 @@ ] ], "versions": [ - "versions.yml:md5,8cabeb934dbeb51399427d83c57bf1b4" + "versions.yml:md5,6bd28f2526774f519a7627a30c6a7f2f" ] } ], @@ -181,6 +181,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-10T14:55:14.475834" + "timestamp": "2024-12-10T15:13:58.414161" } } \ No newline at end of file From 5c124b015f5fa81593c27b3f1a789f47c92f64d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Tue, 10 Dec 2024 14:19:26 +0000 Subject: [PATCH 183/887] restructure module --- modules/local/fusioncatcher/detect/main.nf | 10 +-- modules/local/fusioncatcher/download/main.nf | 5 +- ...kflow.nf => fusioncatcher_workflow.nf.bkp} | 0 .../local/fusioncatcher_workflow/main.nf | 40 ++++++++++++ .../fusioncatcher_workflow/tests/main.nf.test | 65 +++++++++++++++++++ .../tests/main.nf.test.snap | 25 +++++++ 6 files changed, 138 insertions(+), 7 deletions(-) rename subworkflows/local/{fusioncatcher_workflow.nf => fusioncatcher_workflow.nf.bkp} (100%) create mode 100644 subworkflows/local/fusioncatcher_workflow/main.nf create mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test create mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 9a0928463..ddbacce1e 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -1,13 +1,13 @@ process FUSIONCATCHER { - tag "$meta.id" + tag "$meta.id - $meta2.id" label 'process_high' conda "${moduleDir}/environment.yml" container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" input: - tuple val(meta), path(fasta) - path reference + tuple val(meta), path(fastqs, stageAs: "input/*") + tuple val(meta2), path(reference, stageAs: "reference/*") output: tuple val(meta), path("*.fusioncatcher.fusion-genes.txt") , optional:true , emit: fusions @@ -25,8 +25,8 @@ process FUSIONCATCHER { def single_end = meta.single_end ? "--single-end" : "" """ fusioncatcher.py \\ - -d $reference \\ - -i $reads \\ + -d reference \\ + -i input \\ -p $task.cpus \\ -o . \\ --skip-blat \\ diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 65a736077..b0659a153 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -6,8 +6,8 @@ process FUSIONCATCHER_DOWNLOAD { container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" output: - path "*" , emit: reference - path "versions.yml" , emit: versions + tuple env(meta), path("*"), emit: reference + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -18,6 +18,7 @@ process FUSIONCATCHER_DOWNLOAD { def args2 = task.ext.args2 ?: '' def human_version = "v102" def url = "http://sourceforge.net/projects/fusioncatcher/files/data/human_${human_version}.tar.gz.aa" + def meta = [ id: "human_${human_version}" ] """ if wget --spider "$url" 2>/dev/null; then wget $args $url diff --git a/subworkflows/local/fusioncatcher_workflow.nf b/subworkflows/local/fusioncatcher_workflow.nf.bkp similarity index 100% rename from subworkflows/local/fusioncatcher_workflow.nf rename to subworkflows/local/fusioncatcher_workflow.nf.bkp diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf new file mode 100644 index 000000000..c268545a7 --- /dev/null +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -0,0 +1,40 @@ +include { FUSIONCATCHER } from '../../../modules/local/fusioncatcher/detect/main' + +workflow FUSIONCATCHER_WORKFLOW { + take: + reads // channel [ meta, [ fastqs ] ] + fusioncatcher_ref // channel [ meta, path ] + run_fusioncatcher // boolean + all // boolean + fusioninspector_only // boolean + fusioncatcher_fusions // path, string + + main: + ch_versions = Channel.empty() + ch_dummy_file = file("$baseDir/assets/dummy_file_fusioncatcher.txt", checkIfExists: true) + + if (( run_fusioncatcher || all) && !fusioninspector_only ) { + if (fusioncatcher_fusions){ + + ch_fusioncatcher_fusions = reads.combine(Channel.value(file(fusioncatcher_fusions, checkIfExists:true))) + .map { meta, reads, fusions -> [ meta, fusions ] } + } else { + + FUSIONCATCHER ( + reads, + fusioncatcher_ref + ) + ch_fusioncatcher_fusions = FUSIONCATCHER.out.fusions + ch_versions = ch_versions.mix(FUSIONCATCHER.out.versions) + } + } + else { + ch_fusioncatcher_fusions = reads.combine(Channel.value(file(ch_dummy_file, checkIfExists:true))) + .map { meta, reads, fusions -> [ meta, fusions ] } + } + + emit: + fusions = ch_fusioncatcher_fusions + versions = ch_versions + } + diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test new file mode 100644 index 000000000..4d91798ca --- /dev/null +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -0,0 +1,65 @@ +nextflow_workflow { + + name "Test Subworkflow FUSIONCATCHER_WORKFLOW" + script "../main.nf" + workflow "FUSIONCATCHER_WORKFLOW" + tag "subworkflow" + tag "fusioncatcher" + tag "fusioncatcher/download" + tag "fusioncatcher/detect" + + // Test + test("FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4") { + + setup { + // Download reference files for fusioncatch + run("FUSIONCATCHER_DOWNLOAD") { + script "../../../../modules/local/fusioncatcher/download/main.nf" + process { + """ + // No arguments required. Human version v102 + """ + } + } + } + + when { + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [ id: "test_fastqs", single_end: false ], + [ + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_1.fq.gz", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_2.fq.gz", checkIfExists: true) + ] + ] ) + + // ch_references + input[1] = FUSIONCATCHER_DOWNLOAD.out.reference + + // fusioncatcher (boolean) + input[2] = true + + // all (boolean) + input[3] = true + + // fusioninspector_only (boolean) + input[4] = false + + // fusioncatcher_fusions (string path) + input[5] = null + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + +} diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..19d409a0a --- /dev/null +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -0,0 +1,25 @@ +{ + "FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "fusions": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-09T20:39:28.49363464" + } +} \ No newline at end of file From 23c4014a6a22839223540a7dd98426fb89cd31d7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:24:20 +0100 Subject: [PATCH 184/887] use stubs --- .github/workflows/awstest.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 78bdb317c..977adb49a 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -26,6 +26,7 @@ jobs: "cosmic_username": "${{ secrets.cosmic_username }}", "cosmic_passwd": "${{ secrets.cosmic_passwd }}", "all": true, + "stub": true } profiles: test,aws_tower - uses: actions/upload-artifact@v4 From d52f0a055fb82ae8def0b400c016820af38bf222 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:24:42 +0100 Subject: [PATCH 185/887] update changelog, first step --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 690024b2c..1980cd861 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) - + ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" GTF_TO_REFFLAT ### Fixed - Fixed some Nextflow run-commands in the docs [#491](https://github.com/nf-core/rnafusion/pull/491) From 5409f8c2566342a4d2debe406ef4e19b52231d74 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:25:02 +0100 Subject: [PATCH 186/887] update GTF_TO_REFFLAT options, update snapshots --- conf/modules.config | 1 + modules/local/fusioncatcher/build/meta.yml | 3 +- modules/local/fusioncatcher/download/main.nf | 2 +- modules/local/starfusion/download/main.nf | 2 +- nextflow.config | 3 +- tests/test_build.nf.test.snap | 33 +++----------------- tests/test_cosmic.nf.test.snap | 22 ++++--------- 7 files changed, 15 insertions(+), 51 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index bbbee5c2c..3c3765453 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -144,6 +144,7 @@ process { } withName: 'GTF_TO_REFFLAT' { + ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" publishDir = [ path: { "${params.genomes_base}/gencode" }, mode: params.publish_dir_mode, diff --git a/modules/local/fusioncatcher/build/meta.yml b/modules/local/fusioncatcher/build/meta.yml index 40421a4ee..202be7e17 100644 --- a/modules/local/fusioncatcher/build/meta.yml +++ b/modules/local/fusioncatcher/build/meta.yml @@ -1,4 +1,4 @@ -name: fusioncatcher_download +name: fusioncatcher_build description: Build genome for fusioncatcher keywords: - sort @@ -19,7 +19,6 @@ output: - reference: type: directory description: Path to fusioncatcher references - pattern: "*" authors: - "@praveenraj2018, @rannick" diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 7afdb4c6d..ed97c834a 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -20,7 +20,7 @@ process FUSIONCATCHER_DOWNLOAD { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - // TODO: move to my sourceforge + // TODO: move to S3 // def url = """ diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 85bb39c15..6ef1df633 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -8,7 +8,7 @@ process STARFUSION_DOWNLOAD { path "ctat_genome_lib_build_dir/*" , emit: reference - // TODO: move to my sourceforge + // TODO: move to S3 script: """ wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/__genome_libs_StarFv1.10/GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz --no-check-certificate diff --git a/nextflow.config b/nextflow.config index 31e754979..db9eb1417 100644 --- a/nextflow.config +++ b/nextflow.config @@ -61,13 +61,12 @@ params { // Skip steps skip_qc = false - skip_vcf = false skip_vis = false skip_vcf = false skip_salmon_index = false // Download references option - download_refs = true + download_refs = false // Path to references fasta = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}_dna_primary_assembly.fa" diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 16b6c0079..5332634b5 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -2,46 +2,21 @@ "test_build": { "content": [ [ - "bedops", - "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", - "gffread", - "gffread/Homo_sapiens.GRCh38.102.fasta", "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", "references", - "references/ensembl", - "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", - "references/ensembl/Homo_sapiens.GRCh38.102.genepred", - "references/ensembl/Homo_sapiens.GRCh38.102.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.refflat", - "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", "references/hgnc", "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "rrnatranscripts", - "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" + "references/hgnc/hgnc_complete_set.txt" ], [ - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,5bc3ccc76735ae46699a75269f0ea65b", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,092f1bf29fce906ff7b5ece02b4b21c8", - "Homo_sapiens.GRCh38.102.fasta:md5,d1f17b045dc60c49f2cc29e30006afc0", - "Homo_sapiens.GRCh38.102.chr.gtf:md5,0069687307852c63596b4d2ebdbbaf0c", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d527f3eb6b664020cf4d882b5820056f", - "Homo_sapiens.GRCh38.102.genepred:md5,59c577ca4ab033c0ce1feac1e387bcab", - "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", - "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,0abf61877f65247b15c438d605d85599", - "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,744bf505deb50837b15441e808cad345" + "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-09T13:33:28.517098377" + "timestamp": "2024-12-10T15:09:04.076558" } } \ No newline at end of file diff --git a/tests/test_cosmic.nf.test.snap b/tests/test_cosmic.nf.test.snap index dc3ab947a..b8e6d4a5f 100644 --- a/tests/test_cosmic.nf.test.snap +++ b/tests/test_cosmic.nf.test.snap @@ -24,14 +24,9 @@ "test cosmic no fastp trim": { "content": [ 0, - { - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + null, [ - "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + "pipeline_info" ], [ @@ -41,19 +36,14 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-10T12:42:06.51355" + "timestamp": "2024-12-10T15:09:53.130295" }, "test cosmic with fastp trim": { "content": [ 0, - { - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + null, [ - "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + "pipeline_info" ], [ @@ -63,6 +53,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-10T12:41:17.841938" + "timestamp": "2024-12-10T15:09:29.277399" } } \ No newline at end of file From ef5ab96f749a1dd7d6c32f54f39fa395892c7a20 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:00:35 +0100 Subject: [PATCH 187/887] update star in snapshot --- tests/test_stub.nf.test.snap | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index febef3c8d..0c4a35781 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -80,17 +80,17 @@ "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": 2.7.11b, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": 2.7.11b, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": 2.7.11b, "samtools": 1.2, "gawk": "5.1.0" }, @@ -355,17 +355,17 @@ "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": 2.7.11b, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": 2.7.11b, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": 2.7.11b, "samtools": 1.2, "gawk": "5.1.0" }, @@ -549,4 +549,4 @@ }, "timestamp": "2024-12-10T14:10:38.383967" } -} \ No newline at end of file +} From 58aab76ed09c8434b0249531cbca20368c3b0dfb Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:11:47 +0000 Subject: [PATCH 188/887] fix: simplify starfusion module --- modules/local/starfusion/build/main.nf | 28 +++++++++----------------- 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 202dae023..4d3c70b6f 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -7,31 +7,23 @@ process STARFUSION_BUILD { input: tuple val(meta), path(fasta) tuple val(meta2), path(gtf) + path fusion_annot_lib + val dfam_species output: - path "*" , emit: reference + path "ctat_genome_lib_build_dir" , emit: reference script: - def binPath = (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) ? "prep_genome_lib.pl" : "/usr/local/src/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl" + def binPath = (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) ? "prep_genome_lib.pl" : "/opt/conda/lib/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl" + if (dfam_species != "human" && dfam_species != "mouse") { + error "Invalid species for --dfam_db. Only 'human' or 'mouse' are accepted. Provided: ${dfam_species}" + } """ - export TMPDIR=/tmp - wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam34.0/Pfam-A.hmm.gz --no-check-certificate - wget https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz -O CTAT_HumanFusionLib_Mar2021.dat.gz --no-check-certificate - wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm -O AnnotFilterRule.pm --no-check-certificate - wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm --no-check-certificate - wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3f --no-check-certificate - wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3i --no-check-certificate - wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m --no-check-certificate - wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3p --no-check-certificate - gunzip Pfam-A.hmm.gz && hmmpress Pfam-A.hmm - /opt/conda/lib/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl \\ + prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ - --annot_filter_rule AnnotFilterRule.pm \\ - --fusion_annot_lib CTAT_HumanFusionLib_Mar2021.dat.gz \\ - --pfam_db Pfam-A.hmm \\ - --dfam_db homo_sapiens_dfam.hmm \\ - --max_readlength $params.read_length \\ + --dfam_db ${dfam_species} \\ + --fusion_annot_lib $fusion_annot_lib \\ --CPU $task.cpus cat <<-END_VERSIONS > versions.yml From 7ff8be18d1466fe07ea8eb74a11f9b56c0e1d014 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:15:57 +0000 Subject: [PATCH 189/887] tests: update nf-test starfusion --- .../local/starfusion/build/tests/main.nf.test | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/modules/local/starfusion/build/tests/main.nf.test b/modules/local/starfusion/build/tests/main.nf.test index ef9aa3931..75993c004 100644 --- a/modules/local/starfusion/build/tests/main.nf.test +++ b/modules/local/starfusion/build/tests/main.nf.test @@ -4,19 +4,23 @@ nextflow_process { script "../main.nf" process "STARFUSION_BUILD" - test("STARFUSION_BUILD - human - chr4") { + test("STARFUSION_BUILD - human - minigenome") { when { process { """ input[0] = [ - [ id:'fasta' ], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa") + [ id:'minigenome fasta' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") ] input[1] = [ - [ id:'gtf' ], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf") + [ id:'minigenome gtf' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") ] + + input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input [3] = "human" + """ } } @@ -27,7 +31,7 @@ nextflow_process { } - test("STARFUSION_BUILD - human - chr4") { + test("STARFUSION_BUILD - human - minigenome - stub") { options "-stub" @@ -35,13 +39,17 @@ nextflow_process { process { """ input[0] = [ - [ id:'fasta' ], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa") + [ id:'minigenome fasta' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") ] input[1] = [ - [ id:'gtf' ], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf") + [ id:'minigenome gtf' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") ] + + input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input [3] = "human" + """ } } From 0770939ea7f410f511aa01955bc6e07ea44f76e2 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 21:19:53 +0000 Subject: [PATCH 190/887] refactor: add stubs and ext.args --- modules/local/starfusion/build/main.nf | 42 ++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 4d3c70b6f..129436480 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -1,5 +1,6 @@ process STARFUSION_BUILD { - tag 'star-fusion' + tag "$meta.id" + label 'process_high' conda "${moduleDir}/environment.yml" container 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:63e3d21ca68ea531' @@ -14,16 +15,18 @@ process STARFUSION_BUILD { path "ctat_genome_lib_build_dir" , emit: reference script: - def binPath = (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) ? "prep_genome_lib.pl" : "/opt/conda/lib/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl" if (dfam_species != "human" && dfam_species != "mouse") { error "Invalid species for --dfam_db. Only 'human' or 'mouse' are accepted. Provided: ${dfam_species}" } + def args = task.ext.args ?: '' """ prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ --dfam_db ${dfam_species} \\ + --pfam_db current \\ --fusion_annot_lib $fusion_annot_lib \\ + ${args} \\ --CPU $task.cpus cat <<-END_VERSIONS > versions.yml @@ -35,7 +38,40 @@ process STARFUSION_BUILD { stub: """ mkdir ctat_genome_lib_build_dir - touch ref_annot.cdna.fa + touch ctat_genome_lib_build_dir/AnnotFilterRule.pm + touch ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz + touch ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans + touch ctat_genome_lib_build_dir/ref_genome.fa.mm2 + touch ctat_genome_lib_build_dir/ref_genome.fa.ntf + touch ctat_genome_lib_build_dir/blast_pairs.dat.gz + touch ctat_genome_lib_build_dir/ref_annot.cdna.fa + touch ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu + touch ctat_genome_lib_build_dir/ref_genome.fa.ndb + touch ctat_genome_lib_build_dir/ref_genome.fa.nto + touch ctat_genome_lib_build_dir/blast_pairs.idx + touch ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx + touch ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed + touch ctat_genome_lib_build_dir/ref_genome.fa.nhr + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx + touch ctat_genome_lib_build_dir/__chkpts + touch ctat_genome_lib_build_dir/ref_annot.cds + touch ctat_genome_lib_build_dir/ref_annot.pep + touch ctat_genome_lib_build_dir/ref_genome.fa.nin + touch ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat + touch ctat_genome_lib_build_dir/fusion_annot_lib.gz + touch ctat_genome_lib_build_dir/ref_annot.cdsplus.fa + touch ctat_genome_lib_build_dir/ref_annot.prot_info.dbm + touch ctat_genome_lib_build_dir/ref_genome.fa.njs + touch ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm + touch ctat_genome_lib_build_dir/fusion_annot_lib.idx + touch ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx + touch ctat_genome_lib_build_dir/ref_genome.fa + touch ctat_genome_lib_build_dir/ref_genome.fa.not + touch ctat_genome_lib_build_dir/trans.blast.dat.gz + touch ctat_genome_lib_build_dir/pfam_domains.dbm + touch ctat_genome_lib_build_dir/ref_annot.gtf + touch ctat_genome_lib_build_dir/ref_genome.fa.fai + touch ctat_genome_lib_build_dir/ref_genome.fa.nsq cat <<-END_VERSIONS > versions.yml "${task.process}": From 5b0b9e108798bf0804aa791986bbbac9e6c3bf40 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 21:42:15 +0000 Subject: [PATCH 191/887] docs: update meta.yml --- modules/local/starfusion/build/meta.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/local/starfusion/build/meta.yml b/modules/local/starfusion/build/meta.yml index c87b251b1..d7f65a0b9 100644 --- a/modules/local/starfusion/build/meta.yml +++ b/modules/local/starfusion/build/meta.yml @@ -1,7 +1,7 @@ -name: starfusion_downloadgenome +name: starfusion_build description: Download STAR-fusion genome resource required to run STAR-Fusion caller keywords: - - downoad + - download tools: - star-fusion: description: Fusion calling algorithm for RNAseq data @@ -20,6 +20,13 @@ input: type: file description: genome gtf file pattern: "*.{gtf}" + - fusion_annot_lib: + type: file + description: Fusion annotation library (key/val pairs, tab-delimited). + pattern: "*.dat.gz" + - dfam_species: + type: string + description: DNA transposable element database (Dfam.hmm), required for repeat masking. Only 'human' or 'mouse' are accepted (will automatically pull the resources from dfam). output: - reference: From 572e8df646ff4f7bf01eece487a3363dca6720c3 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 22:13:14 +0000 Subject: [PATCH 192/887] test: update snapshots --- modules/local/starfusion/build/main.nf | 8 +- .../starfusion/build/tests/main.nf.test.snap | 260 ++++++++++++++++++ 2 files changed, 264 insertions(+), 4 deletions(-) create mode 100644 modules/local/starfusion/build/tests/main.nf.test.snap diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 129436480..80b529118 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -39,11 +39,11 @@ process STARFUSION_BUILD { """ mkdir ctat_genome_lib_build_dir touch ctat_genome_lib_build_dir/AnnotFilterRule.pm - touch ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz + gzip -c /dev/null > ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz touch ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans touch ctat_genome_lib_build_dir/ref_genome.fa.mm2 touch ctat_genome_lib_build_dir/ref_genome.fa.ntf - touch ctat_genome_lib_build_dir/blast_pairs.dat.gz + gzip -c /dev/null > ctat_genome_lib_build_dir/blast_pairs.dat.gz touch ctat_genome_lib_build_dir/ref_annot.cdna.fa touch ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu touch ctat_genome_lib_build_dir/ref_genome.fa.ndb @@ -58,7 +58,7 @@ process STARFUSION_BUILD { touch ctat_genome_lib_build_dir/ref_annot.pep touch ctat_genome_lib_build_dir/ref_genome.fa.nin touch ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat - touch ctat_genome_lib_build_dir/fusion_annot_lib.gz + gzip -c /dev/null > ctat_genome_lib_build_dir/fusion_annot_lib.gz touch ctat_genome_lib_build_dir/ref_annot.cdsplus.fa touch ctat_genome_lib_build_dir/ref_annot.prot_info.dbm touch ctat_genome_lib_build_dir/ref_genome.fa.njs @@ -67,7 +67,7 @@ process STARFUSION_BUILD { touch ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx touch ctat_genome_lib_build_dir/ref_genome.fa touch ctat_genome_lib_build_dir/ref_genome.fa.not - touch ctat_genome_lib_build_dir/trans.blast.dat.gz + gzip -c /dev/null > ctat_genome_lib_build_dir/trans.blast.dat.gz touch ctat_genome_lib_build_dir/pfam_domains.dbm touch ctat_genome_lib_build_dir/ref_annot.gtf touch ctat_genome_lib_build_dir/ref_genome.fa.fai diff --git a/modules/local/starfusion/build/tests/main.nf.test.snap b/modules/local/starfusion/build/tests/main.nf.test.snap new file mode 100644 index 000000000..5e5e99acf --- /dev/null +++ b/modules/local/starfusion/build/tests/main.nf.test.snap @@ -0,0 +1,260 @@ +{ + "STARFUSION_BUILD - human - minigenome": { + "content": [ + { + "0": [ + [ + "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "PFAM.domtblout.dat.gz:md5,6d8ba244e68072be23895ec22c8a8ce4", + [ + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "blast_pairs.dat.gz:md5,06d08c55cfa099ccb56d312ca0970729", + "blast_pairs.idx:md5,884cc8c9886409f7ec0fdf8586ffb78d", + "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", + "fusion_annot_lib.idx:md5,39ab4cd5eab589c5fce9b4bfed82c729", + "pfam_domains.dbm:md5,04c75694f8e36461b43d1c693fdf3414", + "ref_annot.cdna.fa:md5,fe801b66cfab298c575971401e93c18c", + "ref_annot.cdna.fa.idx:md5,3c19e33d5424174f1a3de1f21f6746ff", + "ref_annot.cds:md5,4376fb48bd8bf47f13854b3f6bba8297", + "ref_annot.cdsplus.fa:md5,71e98a5b5d8cf371ec4b5db32c19120e", + "ref_annot.cdsplus.fa.idx:md5,8cb47913bfb0d73d3f55cd5ceafa8bfe", + "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", + "ref_annot.gtf.gene_spans:md5,f178dd54a1f81174dfd203e212937e63", + "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", + "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", + "ref_annot.pep:md5,fe3f58b430d99c06c816521ac439c4df", + "ref_annot.prot_info.dbm:md5,6983b8dccd3e3f920566fab403a15090", + "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", + "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", + "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", + "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", + "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", + "ref_genome.fa.nin:md5,167a13425cf4aac970ae936bd43cbd43", + "ref_genome.fa.njs:md5,7350b9e036410da25ed2c0d717649221", + "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", + "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", + "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", + "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", + [ + "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", + "Log.out:md5,944cceca8093617ab4ece780628459f5", + "SA:md5,7dd9083264be9c6a2194d990bc10d237", + "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", + "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", + "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", + "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", + "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", + "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", + "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", + "genomeParameters.txt:md5,aabd07882af60af4bba0438a475e4e1a", + "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", + "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", + "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", + "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2" + ], + "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", + "trans.blast.align_coords.align_coords.dbm:md5,6000e63ebabe57652cfa8858ef6cc484", + "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" + ] + ], + "reference": [ + [ + "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "PFAM.domtblout.dat.gz:md5,6d8ba244e68072be23895ec22c8a8ce4", + [ + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "blast_pairs.dat.gz:md5,06d08c55cfa099ccb56d312ca0970729", + "blast_pairs.idx:md5,884cc8c9886409f7ec0fdf8586ffb78d", + "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", + "fusion_annot_lib.idx:md5,39ab4cd5eab589c5fce9b4bfed82c729", + "pfam_domains.dbm:md5,04c75694f8e36461b43d1c693fdf3414", + "ref_annot.cdna.fa:md5,fe801b66cfab298c575971401e93c18c", + "ref_annot.cdna.fa.idx:md5,3c19e33d5424174f1a3de1f21f6746ff", + "ref_annot.cds:md5,4376fb48bd8bf47f13854b3f6bba8297", + "ref_annot.cdsplus.fa:md5,71e98a5b5d8cf371ec4b5db32c19120e", + "ref_annot.cdsplus.fa.idx:md5,8cb47913bfb0d73d3f55cd5ceafa8bfe", + "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", + "ref_annot.gtf.gene_spans:md5,f178dd54a1f81174dfd203e212937e63", + "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", + "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", + "ref_annot.pep:md5,fe3f58b430d99c06c816521ac439c4df", + "ref_annot.prot_info.dbm:md5,6983b8dccd3e3f920566fab403a15090", + "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", + "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", + "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", + "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", + "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", + "ref_genome.fa.nin:md5,167a13425cf4aac970ae936bd43cbd43", + "ref_genome.fa.njs:md5,7350b9e036410da25ed2c0d717649221", + "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", + "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", + "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", + "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", + [ + "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", + "Log.out:md5,944cceca8093617ab4ece780628459f5", + "SA:md5,7dd9083264be9c6a2194d990bc10d237", + "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", + "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", + "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", + "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", + "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", + "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", + "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", + "genomeParameters.txt:md5,aabd07882af60af4bba0438a475e4e1a", + "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", + "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", + "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", + "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2" + ], + "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", + "trans.blast.align_coords.align_coords.dbm:md5,6000e63ebabe57652cfa8858ef6cc484", + "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-10T22:11:39.460127957" + }, + "STARFUSION_BUILD - human - minigenome - stub": { + "content": [ + { + "0": [ + [ + "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", + "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "pfam_domains.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cds:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mm2.splice.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.pep:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.prot_info.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.mm2:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ndb:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.not:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reference": [ + [ + "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", + "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "pfam_domains.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cds:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mm2.splice.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.pep:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.prot_info.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.mm2:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ndb:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.not:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-10T22:12:14.50896742" + } +} \ No newline at end of file From 5f6857e8d865c8bf60aa7f9015065769337bd297 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 10 Dec 2024 22:18:32 +0000 Subject: [PATCH 193/887] refactor: revert add nf-test initial draft --- .../local/fusioninspector/tests/main.nf.test | 57 ------------------- 1 file changed, 57 deletions(-) delete mode 100644 modules/local/fusioninspector/tests/main.nf.test diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test deleted file mode 100644 index 0afa34acc..000000000 --- a/modules/local/fusioninspector/tests/main.nf.test +++ /dev/null @@ -1,57 +0,0 @@ -nextflow_process { - - name "Test Process FUSIONINSPECTOR" - script "../main.nf" - process "FUSIONINSPECTOR" - - test("FUSIONINSPECTOR - human") { - - when { - process { - """ - input[0] = [ - [ id:'test_sample' ], - [ - file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_1.fastq.gz"), - file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_2.fastq.gz") - ], - file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/fusion_targets.A.txt") - ] - input[1] = file("/path/to/reference/genome_lib") - """ - } - } - - then { - assert snapshot(process.out).match() - } - - } - - test("FUSIONINSPECTOR - human - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test_stub' ], - [ - file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_1.fastq.gz"), - file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/test.reads_2.fastq.gz") - ], - file("https://raw.githubusercontent.com/FusionInspector/FusionInspector/master/test/fusion_targets.A.txt") - ] - input[1] = file("https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/GRCh37_gencode_v19_CTAT_lib_Mar012021.STAR_v2.7.11a.plug-n-play.tar.gz") - """ - } - } - - then { - assert snapshot(process.out).match() - } - - } - -} From 117884c783977964fe3ee9196ebbc44944f2eaa3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:39:08 +0100 Subject: [PATCH 194/887] add human_gencode_filter to starfusion build --- CHANGELOG.md | 3 +- modules/local/fusioncatcher/download/main.nf | 1 - modules/local/starfusion/build/main.nf | 1 + subworkflows/local/arriba_workflow.nf | 2 +- test.xml | 240 +++++++++++++++++++ 5 files changed, 244 insertions(+), 3 deletions(-) create mode 100644 test.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 1980cd861..a1444c08d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated to nf-core/tools 3.0.2 [#504](https://github.com/nf-core/rnafusion/pull/504) - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) - ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" GTF_TO_REFFLAT + ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" GTF_TO_REFFLAT + ### Fixed - Fixed some Nextflow run-commands in the docs [#491](https://github.com/nf-core/rnafusion/pull/491) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index ed97c834a..03c0a1f3c 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -19,7 +19,6 @@ process FUSIONCATCHER_DOWNLOAD { script: def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' // TODO: move to S3 // def url = diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 436a5e4fd..10485ac00 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -33,6 +33,7 @@ process STARFUSION_BUILD { --pfam_db Pfam-A.hmm \\ --dfam_db homo_sapiens_dfam.hmm \\ --max_readlength $params.read_length \\ + --human_gencode_filter \\ --CPU $task.cpus cat <<-END_VERSIONS > versions.yml diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 5d8446783..5575f5c0d 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -52,7 +52,7 @@ workflow ARRIBA_WORKFLOW { } else { ch_arriba_fusions = reads.combine(Channel.value( file(ch_dummy_file, checkIfExists:true ) ) ) - .map { meta, reads, fusions -> [ meta, fusions ] } + .map { it -> [ it[0], it[2] ] } ch_arriba_fusion_fail = ch_dummy_file } diff --git a/test.xml b/test.xml new file mode 100644 index 000000000..2aed29e11 --- /dev/null +++ b/test.xml @@ -0,0 +1,240 @@ +Nextflow stdout: + +N E X T F L O W ~ version 24.10.2 +Launching `/Users/annick.renevey/Projects/rnafusion/tests/../main.nf` [elated_pasteur] DSL2 - revision: dc78081240 + +------------------------------------------------------ + ,--./,-. + ___ __ __ __ ___ /,-._.--~' + |\ | |__ __ / ` / \ |__) |__ } { + | \| | \__, \__/ | \ |___ \`-._,-`-, + `._,._,' + nf-core/rnafusion 4.0.0dev +------------------------------------------------------ +Input/output options + input : https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv + outdir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output + genomes_base : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references + genome_gencode_version : 46 + starfusion_build : true + all : true + arriba_ref_blacklist : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz + arriba_ref_cytobands : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv + arriba_ref_known_fusions : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz + arriba_ref_protein_domains : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3 + gencode_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode + fusioncatcher_limitSjdbInsertNsj : 2000000 + fusioncatcher_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusioncatcher/human_v46 + fusioncatcher_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt + fusioninspector_limitSjdbInsertNsj: 1000000 + fusionreport_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusion_report_db + fusionreport_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusion_report_db/mitelman.db + hgnc_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/hgnc/hgnc_complete_set.txt + hgnc_date : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/hgnc/HGNC-DB-timestamp.txt + salmon_index : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/salmon/salmon + salmon_index_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/salmon/salmon/complete_ref_lens.bin + starfusion_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/starfusion/ctat_genome_lib_build_dir + starfusion_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/starfusion/Pfam-A.hmm + starindex_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/star + starindex_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/star/star/Genome + tools_cutoff : 1 + +Read trimming options + fastp_trim : true + adapter_fasta : [] + +Alignment compression options + cram : [] + +Reference genome options + fasta : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa + fai : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa.fai + genome : GRCh38 + gtf : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46.gtf + refflat : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46.gtf.refflat + rrna_intervals : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46.interval_list + no_cosmic : true + +Institutional config options + config_profile_name : Test profile + config_profile_description : Minimal test dataset to check pipeline function + +Core Nextflow options + runName : elated_pasteur + containerEngine : docker + launchDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0 + workDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/work + projectDir : /Users/annick.renevey/Projects/rnafusion + userName : annick.renevey + profile : test,docker + configFiles :  + +!! Only displaying parameters that differ from the pipeline defaults !! +------------------------------------------------------ +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x + +* Software dependencies + https://github.com/nf-core/rnafusion/blob/master/CITATIONS.md + +WARN: nf-core pipelines do not accept positional arguments. The positional argument `true` has been detected. +HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`. + +WARN: Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD` and skip using it in `FUSIONREPORT` +[13/a75f51] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONCATCHER_BUILD (fusioncatcher_build) +[78/f27e8a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:HGNC_DOWNLOAD (hgnc) +[c9/d109b6] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:ARRIBA_DOWNLOAD (arriba) +[1b/cb8505] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GENCODE_DOWNLOAD (gencode_download) +[61/738ba4] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONREPORT_DOWNLOAD (fusionreport) +[6c/ccb83a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FASTQC (test) +[52/593378] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTP (test) +[18/18b5f3] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SAMTOOLS_FAIDX (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) +[38/36e8dd] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_CREATESEQUENCEDICTIONARY (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) +[b3/7aad17] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GET_RRNA_TRANSCRIPTS (get_rrna_bed) +[53/e4d111] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STAR_GENOMEGENERATE (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) +[37/d0930c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GFFREAD (Homo_sapiens.GRCh38.46.gtf) +[26/aa9b36] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GTF_TO_REFFLAT (Homo_sapiens.GRCh38.46.gtf) +[18/66b9c3] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STARFUSION_BUILD (star-fusion) +[05/6e1246] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTQC_FOR_FASTP (test) +[83/52bcc1] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONCATCHER_WORKFLOW:FUSIONCATCHER (test) +[5b/c0d7bc] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_BEDTOINTERVALLIST (Homo_sapiens.GRCh38.46.gtf) +[24/c5d0b9] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STAR_FOR_STARFUSION (test) +[43/8be8df] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:STAR_FOR_ARRIBA (test) +[f9/87735b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SALMON_INDEX (Homo_sapiens.GRCh38.46.gtf.fasta) +[b4/64a1cd] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTRNASEQMETRICS (test) +[cc/99a46b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTINSERTSIZEMETRICS (test) +[0b/18a022] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STARFUSION (test) +[aa/000cc3] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:SAMTOOLS_INDEX_FOR_STARFUSION (test) +[3d/4dfbba] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_STRINGTIE (test) +[10/6bc883] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:GATK4_MARKDUPLICATES (test) +[74/397e36] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:ARRIBA_ARRIBA (test) +[df/483739] Submitted process > NFCORE_RNAFUSION:RNAFUSION:SALMON_QUANT (test) +[92/376a4b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_MERGE (1) +[b6/26ca21] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONREPORT_WORKFLOW:FUSIONREPORT (test) +[51/2177ee] Submitted process > NFCORE_RNAFUSION:RNAFUSION:MULTIQC +-[nf-core/rnafusion] Pipeline completed successfully- +Nextflow stderr: + +Nextflow stdout: + +N E X T F L O W ~ version 24.10.2 +Launching `/Users/annick.renevey/Projects/rnafusion/tests/../main.nf` [naughty_becquerel] DSL2 - revision: dc78081240 + +------------------------------------------------------ + ,--./,-. + ___ __ __ __ ___ /,-._.--~' + |\ | |__ __ / ` / \ |__) |__ } { + | \| | \__, \__/ | \ |___ \`-._,-`-, + `._,._,' + nf-core/rnafusion 4.0.0dev +------------------------------------------------------ +Input/output options + input : https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv + outdir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output + genomes_base : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references + genome_gencode_version : 46 + starfusion_build : true + all : true + arriba_ref_blacklist : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz + arriba_ref_cytobands : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv + arriba_ref_known_fusions : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz + arriba_ref_protein_domains : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3 + gencode_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode + fusioncatcher_limitSjdbInsertNsj : 2000000 + fusioncatcher_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusioncatcher/human_v46 + fusioncatcher_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt + fusioninspector_limitSjdbInsertNsj: 1000000 + fusionreport_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusion_report_db + fusionreport_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusion_report_db/mitelman.db + hgnc_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/hgnc/hgnc_complete_set.txt + hgnc_date : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/hgnc/HGNC-DB-timestamp.txt + salmon_index : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/salmon/salmon + salmon_index_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/salmon/salmon/complete_ref_lens.bin + starfusion_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/starfusion/ctat_genome_lib_build_dir + starfusion_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/starfusion/Pfam-A.hmm + starindex_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/star + starindex_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/star/star/Genome + tools_cutoff : 1 + +Read trimming options + adapter_fasta : [] + +Alignment compression options + cram : [] + +Reference genome options + fasta : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa + fai : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa.fai + genome : GRCh38 + gtf : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46.gtf + refflat : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46.gtf.refflat + rrna_intervals : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46.interval_list + no_cosmic : true + +Institutional config options + config_profile_name : Test profile + config_profile_description : Minimal test dataset to check pipeline function + +Core Nextflow options + runName : naughty_becquerel + containerEngine : docker + launchDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1 + workDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/work + projectDir : /Users/annick.renevey/Projects/rnafusion + userName : annick.renevey + profile : test,docker + configFiles :  + +!! Only displaying parameters that differ from the pipeline defaults !! +------------------------------------------------------ +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x + +* Software dependencies + https://github.com/nf-core/rnafusion/blob/master/CITATIONS.md + +WARN: nf-core pipelines do not accept positional arguments. The positional argument `true` has been detected. +HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`. + +WARN: Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD` and skip using it in `FUSIONREPORT` +[8d/ee20bb] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:HGNC_DOWNLOAD (hgnc) +[d6/69323a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GENCODE_DOWNLOAD (gencode_download) +[b9/5c89ae] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONREPORT_DOWNLOAD (fusionreport) +[43/355279] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONCATCHER_BUILD (fusioncatcher_build) +[94/cf96bf] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:ARRIBA_DOWNLOAD (arriba) +[e4/d33580] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_CREATESEQUENCEDICTIONARY (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) +[db/fa3dd4] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SAMTOOLS_FAIDX (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) +[90/118532] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FASTQC (test) +[b9/6593b4] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTP (test) +[b4/28611c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GTF_TO_REFFLAT (Homo_sapiens.GRCh38.46.gtf) +[d0/9b767c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GET_RRNA_TRANSCRIPTS (get_rrna_bed) +[c2/fd36fd] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GFFREAD (Homo_sapiens.GRCh38.46.gtf) +[76/b9b243] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STAR_GENOMEGENERATE (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) +[d6/350166] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STARFUSION_BUILD (star-fusion) +[89/c38359] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTQC_FOR_FASTP (test) +[92/431af8] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONCATCHER_WORKFLOW:FUSIONCATCHER (test) +[43/c4079e] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_BEDTOINTERVALLIST (Homo_sapiens.GRCh38.46.gtf) +[e6/3c5e19] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SALMON_INDEX (Homo_sapiens.GRCh38.46.gtf.fasta) +[71/f9cbec] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:STAR_FOR_ARRIBA (test) +[96/59d525] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STAR_FOR_STARFUSION (test) +[99/6d4d21] Submitted process > NFCORE_RNAFUSION:RNAFUSION:SALMON_QUANT (test) +[9c/fd7ac5] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:ARRIBA_ARRIBA (test) +[29/6b167b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_STRINGTIE (test) +[39/c6c23e] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STARFUSION (test) +[35/474e2f] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:SAMTOOLS_INDEX_FOR_STARFUSION (test) +[66/b0ff6a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:GATK4_MARKDUPLICATES (test) +[63/a246b6] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTRNASEQMETRICS (test) +[41/50018c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTINSERTSIZEMETRICS (test) +[8c/96974e] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_MERGE (1) +[fe/e581e9] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONREPORT_WORKFLOW:FUSIONREPORT (test) +[99/47d296] Submitted process > NFCORE_RNAFUSION:RNAFUSION:MULTIQC +-[nf-core/rnafusion] Pipeline completed successfully- +Nextflow stderr: + + \ No newline at end of file From 3788788d1b26dd07dd9cfb85c8cb1091f6630f8e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:44:52 +0100 Subject: [PATCH 195/887] remove test.xml --- test.xml | 240 ------------------------------------------------------- 1 file changed, 240 deletions(-) delete mode 100644 test.xml diff --git a/test.xml b/test.xml deleted file mode 100644 index 2aed29e11..000000000 --- a/test.xml +++ /dev/null @@ -1,240 +0,0 @@ -Nextflow stdout: - -N E X T F L O W ~ version 24.10.2 -Launching `/Users/annick.renevey/Projects/rnafusion/tests/../main.nf` [elated_pasteur] DSL2 - revision: dc78081240 - ------------------------------------------------------- - ,--./,-. - ___ __ __ __ ___ /,-._.--~' - |\ | |__ __ / ` / \ |__) |__ } { - | \| | \__, \__/ | \ |___ \`-._,-`-, - `._,._,' - nf-core/rnafusion 4.0.0dev ------------------------------------------------------- -Input/output options - input : https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv - outdir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output - genomes_base : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references - genome_gencode_version : 46 - starfusion_build : true - all : true - arriba_ref_blacklist : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz - arriba_ref_cytobands : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv - arriba_ref_known_fusions : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz - arriba_ref_protein_domains : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3 - gencode_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode - fusioncatcher_limitSjdbInsertNsj : 2000000 - fusioncatcher_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusioncatcher/human_v46 - fusioncatcher_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt - fusioninspector_limitSjdbInsertNsj: 1000000 - fusionreport_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusion_report_db - fusionreport_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/fusion_report_db/mitelman.db - hgnc_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/hgnc/hgnc_complete_set.txt - hgnc_date : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/hgnc/HGNC-DB-timestamp.txt - salmon_index : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/salmon/salmon - salmon_index_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/salmon/salmon/complete_ref_lens.bin - starfusion_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/starfusion/ctat_genome_lib_build_dir - starfusion_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/starfusion/Pfam-A.hmm - starindex_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/star - starindex_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/star/star/Genome - tools_cutoff : 1 - -Read trimming options - fastp_trim : true - adapter_fasta : [] - -Alignment compression options - cram : [] - -Reference genome options - fasta : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa - fai : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa.fai - genome : GRCh38 - gtf : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46.gtf - refflat : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46.gtf.refflat - rrna_intervals : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/output/references/gencode/Homo_sapiens_GRCh38_46.interval_list - no_cosmic : true - -Institutional config options - config_profile_name : Test profile - config_profile_description : Minimal test dataset to check pipeline function - -Core Nextflow options - runName : elated_pasteur - containerEngine : docker - launchDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0 - workDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/acc69f529568702c4fabd8a30cf1fcb0/work - projectDir : /Users/annick.renevey/Projects/rnafusion - userName : annick.renevey - profile : test,docker - configFiles :  - -!! Only displaying parameters that differ from the pipeline defaults !! ------------------------------------------------------- -* The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x - -* Software dependencies - https://github.com/nf-core/rnafusion/blob/master/CITATIONS.md - -WARN: nf-core pipelines do not accept positional arguments. The positional argument `true` has been detected. -HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`. - -WARN: Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD` and skip using it in `FUSIONREPORT` -[13/a75f51] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONCATCHER_BUILD (fusioncatcher_build) -[78/f27e8a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:HGNC_DOWNLOAD (hgnc) -[c9/d109b6] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:ARRIBA_DOWNLOAD (arriba) -[1b/cb8505] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GENCODE_DOWNLOAD (gencode_download) -[61/738ba4] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONREPORT_DOWNLOAD (fusionreport) -[6c/ccb83a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FASTQC (test) -[52/593378] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTP (test) -[18/18b5f3] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SAMTOOLS_FAIDX (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) -[38/36e8dd] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_CREATESEQUENCEDICTIONARY (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) -[b3/7aad17] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GET_RRNA_TRANSCRIPTS (get_rrna_bed) -[53/e4d111] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STAR_GENOMEGENERATE (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) -[37/d0930c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GFFREAD (Homo_sapiens.GRCh38.46.gtf) -[26/aa9b36] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GTF_TO_REFFLAT (Homo_sapiens.GRCh38.46.gtf) -[18/66b9c3] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STARFUSION_BUILD (star-fusion) -[05/6e1246] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTQC_FOR_FASTP (test) -[83/52bcc1] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONCATCHER_WORKFLOW:FUSIONCATCHER (test) -[5b/c0d7bc] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_BEDTOINTERVALLIST (Homo_sapiens.GRCh38.46.gtf) -[24/c5d0b9] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STAR_FOR_STARFUSION (test) -[43/8be8df] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:STAR_FOR_ARRIBA (test) -[f9/87735b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SALMON_INDEX (Homo_sapiens.GRCh38.46.gtf.fasta) -[b4/64a1cd] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTRNASEQMETRICS (test) -[cc/99a46b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTINSERTSIZEMETRICS (test) -[0b/18a022] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STARFUSION (test) -[aa/000cc3] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:SAMTOOLS_INDEX_FOR_STARFUSION (test) -[3d/4dfbba] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_STRINGTIE (test) -[10/6bc883] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:GATK4_MARKDUPLICATES (test) -[74/397e36] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:ARRIBA_ARRIBA (test) -[df/483739] Submitted process > NFCORE_RNAFUSION:RNAFUSION:SALMON_QUANT (test) -[92/376a4b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_MERGE (1) -[b6/26ca21] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONREPORT_WORKFLOW:FUSIONREPORT (test) -[51/2177ee] Submitted process > NFCORE_RNAFUSION:RNAFUSION:MULTIQC --[nf-core/rnafusion] Pipeline completed successfully- -Nextflow stderr: - -Nextflow stdout: - -N E X T F L O W ~ version 24.10.2 -Launching `/Users/annick.renevey/Projects/rnafusion/tests/../main.nf` [naughty_becquerel] DSL2 - revision: dc78081240 - ------------------------------------------------------- - ,--./,-. - ___ __ __ __ ___ /,-._.--~' - |\ | |__ __ / ` / \ |__) |__ } { - | \| | \__, \__/ | \ |___ \`-._,-`-, - `._,._,' - nf-core/rnafusion 4.0.0dev ------------------------------------------------------- -Input/output options - input : https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv - outdir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output - genomes_base : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references - genome_gencode_version : 46 - starfusion_build : true - all : true - arriba_ref_blacklist : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz - arriba_ref_cytobands : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv - arriba_ref_known_fusions : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz - arriba_ref_protein_domains : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3 - gencode_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode - fusioncatcher_limitSjdbInsertNsj : 2000000 - fusioncatcher_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusioncatcher/human_v46 - fusioncatcher_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt - fusioninspector_limitSjdbInsertNsj: 1000000 - fusionreport_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusion_report_db - fusionreport_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/fusion_report_db/mitelman.db - hgnc_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/hgnc/hgnc_complete_set.txt - hgnc_date : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/hgnc/HGNC-DB-timestamp.txt - salmon_index : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/salmon/salmon - salmon_index_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/salmon/salmon/complete_ref_lens.bin - starfusion_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/starfusion/ctat_genome_lib_build_dir - starfusion_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/starfusion/Pfam-A.hmm - starindex_ref : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/star - starindex_ref_stub_check : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/star/star/Genome - tools_cutoff : 1 - -Read trimming options - adapter_fasta : [] - -Alignment compression options - cram : [] - -Reference genome options - fasta : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa - fai : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa.fai - genome : GRCh38 - gtf : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46.gtf - refflat : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46.gtf.refflat - rrna_intervals : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/output/references/gencode/Homo_sapiens_GRCh38_46.interval_list - no_cosmic : true - -Institutional config options - config_profile_name : Test profile - config_profile_description : Minimal test dataset to check pipeline function - -Core Nextflow options - runName : naughty_becquerel - containerEngine : docker - launchDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1 - workDir : /Users/annick.renevey/Projects/rnafusion/.nf-test/tests/5d4f02e50caba01d5f317164e187f7c1/work - projectDir : /Users/annick.renevey/Projects/rnafusion - userName : annick.renevey - profile : test,docker - configFiles :  - -!! Only displaying parameters that differ from the pipeline defaults !! ------------------------------------------------------- -* The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x - -* Software dependencies - https://github.com/nf-core/rnafusion/blob/master/CITATIONS.md - -WARN: nf-core pipelines do not accept positional arguments. The positional argument `true` has been detected. -HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`. - -WARN: Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD` and skip using it in `FUSIONREPORT` -[8d/ee20bb] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:HGNC_DOWNLOAD (hgnc) -[d6/69323a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GENCODE_DOWNLOAD (gencode_download) -[b9/5c89ae] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONREPORT_DOWNLOAD (fusionreport) -[43/355279] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:FUSIONCATCHER_BUILD (fusioncatcher_build) -[94/cf96bf] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:ARRIBA_DOWNLOAD (arriba) -[e4/d33580] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_CREATESEQUENCEDICTIONARY (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) -[db/fa3dd4] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SAMTOOLS_FAIDX (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) -[90/118532] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FASTQC (test) -[b9/6593b4] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTP (test) -[b4/28611c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GTF_TO_REFFLAT (Homo_sapiens.GRCh38.46.gtf) -[d0/9b767c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GET_RRNA_TRANSCRIPTS (get_rrna_bed) -[c2/fd36fd] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GFFREAD (Homo_sapiens.GRCh38.46.gtf) -[76/b9b243] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STAR_GENOMEGENERATE (Homo_sapiens.GRCh38.46_dna_primary_assembly.fa) -[d6/350166] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:STARFUSION_BUILD (star-fusion) -[89/c38359] Submitted process > NFCORE_RNAFUSION:RNAFUSION:TRIM_WORKFLOW:FASTQC_FOR_FASTP (test) -[92/431af8] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONCATCHER_WORKFLOW:FUSIONCATCHER (test) -[43/c4079e] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:GATK4_BEDTOINTERVALLIST (Homo_sapiens.GRCh38.46.gtf) -[e6/3c5e19] Submitted process > NFCORE_RNAFUSION:RNAFUSION:BUILD_REFERENCES:SALMON_INDEX (Homo_sapiens.GRCh38.46.gtf.fasta) -[71/f9cbec] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:STAR_FOR_ARRIBA (test) -[96/59d525] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STAR_FOR_STARFUSION (test) -[99/6d4d21] Submitted process > NFCORE_RNAFUSION:RNAFUSION:SALMON_QUANT (test) -[9c/fd7ac5] Submitted process > NFCORE_RNAFUSION:RNAFUSION:ARRIBA_WORKFLOW:ARRIBA_ARRIBA (test) -[29/6b167b] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_STRINGTIE (test) -[39/c6c23e] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:STARFUSION (test) -[35/474e2f] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STARFUSION_WORKFLOW:SAMTOOLS_INDEX_FOR_STARFUSION (test) -[66/b0ff6a] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:GATK4_MARKDUPLICATES (test) -[63/a246b6] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTRNASEQMETRICS (test) -[41/50018c] Submitted process > NFCORE_RNAFUSION:RNAFUSION:QC_WORKFLOW:PICARD_COLLECTINSERTSIZEMETRICS (test) -[8c/96974e] Submitted process > NFCORE_RNAFUSION:RNAFUSION:STRINGTIE_WORKFLOW:STRINGTIE_MERGE (1) -[fe/e581e9] Submitted process > NFCORE_RNAFUSION:RNAFUSION:FUSIONREPORT_WORKFLOW:FUSIONREPORT (test) -[99/47d296] Submitted process > NFCORE_RNAFUSION:RNAFUSION:MULTIQC --[nf-core/rnafusion] Pipeline completed successfully- -Nextflow stderr: - - \ No newline at end of file From 8e9be7cd6f83b175bdc15ef0a3fc8f9c89a33897 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 11 Dec 2024 12:45:38 +0100 Subject: [PATCH 196/887] update snap --- tests/test_stub.nf.test.snap | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 0c4a35781..6cefb329b 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -80,17 +80,17 @@ "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": 2.7.11b, + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": 2.7.11b, + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": 2.7.11b, + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, @@ -272,7 +272,7 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-10T14:12:48.526275" + "timestamp": "2024-12-11T12:43:59.534889" }, "stub test with fastp trim": { "content": [ @@ -355,17 +355,17 @@ "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": 2.7.11b, + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": 2.7.11b, + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": 2.7.11b, + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, @@ -547,6 +547,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-10T14:10:38.383967" + "timestamp": "2024-12-11T12:40:22.066494" } -} +} \ No newline at end of file From 5cdf95aabc8c45e9687889558db88eddb603c925 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 11 Dec 2024 13:23:10 +0100 Subject: [PATCH 197/887] try updating snapshot again --- tests/test_stub.nf.test.snap | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 6cefb329b..83c76dd72 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -80,17 +80,17 @@ "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, @@ -355,17 +355,17 @@ "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, @@ -549,4 +549,4 @@ }, "timestamp": "2024-12-11T12:40:22.066494" } -} \ No newline at end of file +} From c257c62c7af34ddf0b3621fff1e0a9440cc57c20 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 11 Dec 2024 13:23:28 +0000 Subject: [PATCH 198/887] fix: add versions to dependencies --- modules/local/starfusion/build/environment.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index 3c0f4ac53..d02ab2d69 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -4,8 +4,8 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 - - bioconda::minimap2 - - bioconda::samtools - - bioconda::star + - bioconda::minimap2=2.28 + - bioconda::samtools=1.6 + - bioconda::star=2.7.11a - bioconda::star-fusion=1.14.0 - - bioconda::trinity + - bioconda::trinity=2.8.5 From f2df932841d056dfdc05821822e10848f0144267 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 11 Dec 2024 13:42:58 +0000 Subject: [PATCH 199/887] feat: add fusion annot lib as an external param --- nextflow.config | 1 + nextflow_schema.json | 5 +++++ subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf | 4 ++++ workflows/build_references.nf | 4 +++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index d436182c4..2d148cf9e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,6 +30,7 @@ params { read_length = 100 starfusion_build = true genomes = [:] + fusion_annot_lib = null // Genomes options fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.all.fa" diff --git a/nextflow_schema.json b/nextflow_schema.json index 017a19fb8..05df1956b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -362,6 +362,11 @@ "type": "boolean", "fa_icon": "far fa-file-code", "description": "Avoid using Cosmic DB (for example in clinical case applications where a paid license applies." + }, + "fusion_annot_lib": { + "type": "string", + "description": "Path to Fusion Annotation Library to be used in STARFUSION_BUILD.", + "fa_icon": "far fa-file-code" } } }, diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index a4aaf9c4b..ad97686a3 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -161,6 +161,10 @@ def validateInputParameters() { log.warn("No cosmic credentials were provided. Skipping COSMIC DB download from `FUSIONREPORT_DOWNLOAD`") } + if (params.starfusion_build && !params.fusion_annot_lib) { + error("No fusion annotation library provided. `STARFUSION_BUILD` is unable to run.") + } + } // diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 4886a7bb7..037e87055 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -68,7 +68,9 @@ workflow BUILD_REFERENCES { if (params.starfusion || params.all) { if (params.starfusion_build){ - STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) + val_species = Channel.value("human") + ch_fusion_annot_lib = params.fusion_annot_lib + STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf, ch_fusion_annot_lib, val_species) } else { STARFUSION_DOWNLOAD() } From 9dc94cbd968bf00b72501bc07b57b5c6d316a91c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:19:43 +0000 Subject: [PATCH 200/887] docs: add param type and where to get it --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 2d148cf9e..32ccc1d0e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,7 +30,7 @@ params { read_length = 100 starfusion_build = true genomes = [:] - fusion_annot_lib = null + fusion_annot_lib = null // path to dat.gz CTAT genome lib (e.g. https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/GRCh38_gencode_v44_CTAT_lib_Oct292023.plug-n-play.tar.gz) // Genomes options fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.all.fa" From d2a7bd4e75746efeb8c193a8836792648e7fc7e7 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:34:31 +0000 Subject: [PATCH 201/887] test: run starfusion in test_build --- conf/test_build.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/test_build.config b/conf/test_build.config index 616d734f0..2449ee9a7 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -21,4 +21,7 @@ params { all = true skip_salmon_index = true + starfusion_build = true + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } From cf71e6265f86a966f12a5487e5dfa32b988bda66 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:34:58 +0000 Subject: [PATCH 202/887] refactor: add metamap to output --- modules/local/starfusion/build/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 80b529118..f3014ca93 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -12,7 +12,7 @@ process STARFUSION_BUILD { val dfam_species output: - path "ctat_genome_lib_build_dir" , emit: reference + tuple val(meta), path("ctat_genome_lib_build_dir"), emit: reference script: if (dfam_species != "human" && dfam_species != "mouse") { From ef36aedf24c9206bfe24763ee5bb4cf01aa97a69 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:00:41 +0000 Subject: [PATCH 203/887] test: update tests --- .../local/starfusion/build/tests/main.nf.test | 77 +++- .../starfusion/build/tests/main.nf.test.snap | 388 +++++++----------- 2 files changed, 231 insertions(+), 234 deletions(-) diff --git a/modules/local/starfusion/build/tests/main.nf.test b/modules/local/starfusion/build/tests/main.nf.test index 75993c004..8eb1b6f66 100644 --- a/modules/local/starfusion/build/tests/main.nf.test +++ b/modules/local/starfusion/build/tests/main.nf.test @@ -26,7 +26,82 @@ nextflow_process { } then { - assert snapshot(process.out).match() + assert snapshot( + path(process.out.reference[0][1]).resolve("AnnotFilterRule.pm"), + path(process.out.reference[0][1]).resolve("blast_pairs.dat.gz").exists(), + path(process.out.reference[0][1]).resolve("blast_pairs.idx").exists(), + path(process.out.reference[0][1]).resolve("__chkpts/annotfiltrule_cp.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/blast_pairs.idx.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/cp_gene_blast_pairs.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/cp_pfam_dat.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/cp_ref_annot_cdna.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/fusion_annot_lib.cp.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/_fusion_annot_lib.idx.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/index_pfam_hits.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/index_ref_annot_cdna.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/makeblastdb.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/mm2_genome_idx.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/mm2.splice_bed.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/_prot_info_db.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/ref_annot.gtf.gene_spans.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/ref_annot.gtf.mini.sortu.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/ref_annot.gtf.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/ref_genome_fai.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/ref_genome.fa.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/trans.blast.dat.cp.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/trans.blast.dat.index.ok"), + path(process.out.reference[0][1]).resolve("__chkpts/validate_ctat_genome_lib.ok"), + path(process.out.reference[0][1]).resolve("fusion_annot_lib.gz"), + path(process.out.reference[0][1]).resolve("fusion_annot_lib.idx").exists(), + path(process.out.reference[0][1]).resolve("pfam_domains.dbm").exists(), + path(process.out.reference[0][1]).resolve("PFAM.domtblout.dat.gz").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.cdna.fa").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.cdna.fa.idx").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.cds").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.cdsplus.fa").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.cdsplus.fa.idx").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.gtf"), + path(process.out.reference[0][1]).resolve("ref_annot.gtf.gene_spans").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.gtf.mini.sortu"), + path(process.out.reference[0][1]).resolve("ref_annot.gtf.mm2.splice.bed"), + path(process.out.reference[0][1]).resolve("ref_annot.pep").exists(), + path(process.out.reference[0][1]).resolve("ref_annot.prot_info.dbm").exists(), + path(process.out.reference[0][1]).resolve("ref_genome.fa"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.fai"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.mm2"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.ndb"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.nhr"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.nin").exists(), + path(process.out.reference[0][1]).resolve("ref_genome.fa.njs").exists(), + path(process.out.reference[0][1]).resolve("ref_genome.fa.not"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.nsq"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.ntf"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.nto"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx").exists(), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/build.ok"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/chrLength.txt"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/chrNameLength.txt"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/chrName.txt"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/chrStart.txt"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/exonGeTrInfo.tab"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/exonInfo.tab"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/geneInfo.tab"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/Genome"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/genomeParameters.txt").exists(), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/Log.out").exists(), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/SA"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/SAindex"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/sjdbInfo.txt"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/sjdbList.out.tab"), + path(process.out.reference[0][1]).resolve("ref_genome.fa.star.idx/transcriptInfo.tab"), + path(process.out.reference[0][1]).resolve("trans.blast.align_coords.align_coords.dat"), + path(process.out.reference[0][1]).resolve("trans.blast.align_coords.align_coords.dbm").exists(), + path(process.out.reference[0][1]).resolve("trans.blast.dat.gz"), + process.out.versions + ).match() } } diff --git a/modules/local/starfusion/build/tests/main.nf.test.snap b/modules/local/starfusion/build/tests/main.nf.test.snap index 5e5e99acf..6ccede318 100644 --- a/modules/local/starfusion/build/tests/main.nf.test.snap +++ b/modules/local/starfusion/build/tests/main.nf.test.snap @@ -1,252 +1,174 @@ { "STARFUSION_BUILD - human - minigenome": { "content": [ - { - "0": [ - [ - "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", - "PFAM.domtblout.dat.gz:md5,6d8ba244e68072be23895ec22c8a8ce4", - [ - "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "blast_pairs.dat.gz:md5,06d08c55cfa099ccb56d312ca0970729", - "blast_pairs.idx:md5,884cc8c9886409f7ec0fdf8586ffb78d", - "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", - "fusion_annot_lib.idx:md5,39ab4cd5eab589c5fce9b4bfed82c729", - "pfam_domains.dbm:md5,04c75694f8e36461b43d1c693fdf3414", - "ref_annot.cdna.fa:md5,fe801b66cfab298c575971401e93c18c", - "ref_annot.cdna.fa.idx:md5,3c19e33d5424174f1a3de1f21f6746ff", - "ref_annot.cds:md5,4376fb48bd8bf47f13854b3f6bba8297", - "ref_annot.cdsplus.fa:md5,71e98a5b5d8cf371ec4b5db32c19120e", - "ref_annot.cdsplus.fa.idx:md5,8cb47913bfb0d73d3f55cd5ceafa8bfe", - "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", - "ref_annot.gtf.gene_spans:md5,f178dd54a1f81174dfd203e212937e63", - "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", - "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", - "ref_annot.pep:md5,fe3f58b430d99c06c816521ac439c4df", - "ref_annot.prot_info.dbm:md5,6983b8dccd3e3f920566fab403a15090", - "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", - "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", - "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", - "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", - "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", - "ref_genome.fa.nin:md5,167a13425cf4aac970ae936bd43cbd43", - "ref_genome.fa.njs:md5,7350b9e036410da25ed2c0d717649221", - "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", - "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", - "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", - "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", - [ - "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", - "Log.out:md5,944cceca8093617ab4ece780628459f5", - "SA:md5,7dd9083264be9c6a2194d990bc10d237", - "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", - "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", - "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", - "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", - "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", - "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", - "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", - "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", - "genomeParameters.txt:md5,aabd07882af60af4bba0438a475e4e1a", - "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", - "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", - "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", - "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2" - ], - "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", - "trans.blast.align_coords.align_coords.dbm:md5,6000e63ebabe57652cfa8858ef6cc484", - "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" - ] - ], - "reference": [ - [ - "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", - "PFAM.domtblout.dat.gz:md5,6d8ba244e68072be23895ec22c8a8ce4", - [ - "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "blast_pairs.dat.gz:md5,06d08c55cfa099ccb56d312ca0970729", - "blast_pairs.idx:md5,884cc8c9886409f7ec0fdf8586ffb78d", - "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", - "fusion_annot_lib.idx:md5,39ab4cd5eab589c5fce9b4bfed82c729", - "pfam_domains.dbm:md5,04c75694f8e36461b43d1c693fdf3414", - "ref_annot.cdna.fa:md5,fe801b66cfab298c575971401e93c18c", - "ref_annot.cdna.fa.idx:md5,3c19e33d5424174f1a3de1f21f6746ff", - "ref_annot.cds:md5,4376fb48bd8bf47f13854b3f6bba8297", - "ref_annot.cdsplus.fa:md5,71e98a5b5d8cf371ec4b5db32c19120e", - "ref_annot.cdsplus.fa.idx:md5,8cb47913bfb0d73d3f55cd5ceafa8bfe", - "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", - "ref_annot.gtf.gene_spans:md5,f178dd54a1f81174dfd203e212937e63", - "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", - "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", - "ref_annot.pep:md5,fe3f58b430d99c06c816521ac439c4df", - "ref_annot.prot_info.dbm:md5,6983b8dccd3e3f920566fab403a15090", - "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", - "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", - "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", - "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", - "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", - "ref_genome.fa.nin:md5,167a13425cf4aac970ae936bd43cbd43", - "ref_genome.fa.njs:md5,7350b9e036410da25ed2c0d717649221", - "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", - "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", - "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", - "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", - [ - "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", - "Log.out:md5,944cceca8093617ab4ece780628459f5", - "SA:md5,7dd9083264be9c6a2194d990bc10d237", - "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", - "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", - "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", - "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", - "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", - "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", - "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", - "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", - "genomeParameters.txt:md5,aabd07882af60af4bba0438a475e4e1a", - "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", - "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", - "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", - "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2" - ], - "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", - "trans.blast.align_coords.align_coords.dbm:md5,6000e63ebabe57652cfa8858ef6cc484", - "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" - ] - ] - } + "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + true, + true, + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", + true, + true, + true, + true, + true, + true, + true, + true, + "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", + true, + "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", + "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", + true, + true, + "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", + "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", + "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", + "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", + "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", + true, + true, + "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", + "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", + "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", + "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", + true, + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", + "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", + "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", + "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", + "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", + "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", + "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", + "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", + true, + true, + "SA:md5,7dd9083264be9c6a2194d990bc10d237", + "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", + "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", + "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", + "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", + "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", + "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", + true, + "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128", + null ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-10T22:11:39.460127957" + "timestamp": "2024-12-11T15:32:32.307712922" }, "STARFUSION_BUILD - human - minigenome - stub": { "content": [ { "0": [ [ - "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", - "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_annot_lib.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "pfam_domains.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdna.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cds:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.gene_spans:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.mini.sortu:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.mm2.splice.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.pep:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.prot_info.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.mm2:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.ndb:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nin:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.njs:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.not:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + { + "id": "minigenome fasta" + }, + [ + "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", + "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "pfam_domains.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cds:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mm2.splice.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.pep:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.prot_info.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.mm2:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ndb:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.not:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "reference": [ [ - "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", - "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusion_annot_lib.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "pfam_domains.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdna.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cds:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.cdsplus.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.gene_spans:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.mini.sortu:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.gtf.mm2.splice.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.pep:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_annot.prot_info.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.mm2:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.ndb:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nin:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.njs:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.not:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", - "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + { + "id": "minigenome fasta" + }, + [ + "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", + "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "pfam_domains.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cds:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mm2.splice.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.pep:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.prot_info.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.mm2:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ndb:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.not:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ] } @@ -255,6 +177,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-10T22:12:14.50896742" + "timestamp": "2024-12-11T15:05:16.428455255" } -} \ No newline at end of file +} From 1b649b46013bc48d09ddc630799b99c02d4f1eb2 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:59:05 +0000 Subject: [PATCH 204/887] test: add fusion_annot_lib so that stub does not fail --- tests/test_stub.nf.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index 41c7194f0..b0601a9f7 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -14,6 +14,7 @@ nextflow_pipeline { params { outdir = "$outputDir" fastp_trim = true + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' } } @@ -44,6 +45,7 @@ nextflow_pipeline { when { params { outdir = "$outputDir" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' } } From 85563b931302f4f58e7db4c99b26d22e92bc4d33 Mon Sep 17 00:00:00 2001 From: Alan M Date: Wed, 11 Dec 2024 18:25:06 +0100 Subject: [PATCH 205/887] init test with local reference --- modules/local/fusioncatcher/detect/main.nf | 2 +- modules/local/fusioncatcher/download/main.nf | 2 +- .../local/fusioncatcher_workflow/main.nf | 2 +- .../fusioncatcher_workflow/tests/main.nf.test | 6 ++--- .../tests/main.nf.test.snap | 25 ------------------- 5 files changed, 6 insertions(+), 31 deletions(-) delete mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index ddbacce1e..4b615fc38 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -21,7 +21,7 @@ process FUSIONCATCHER { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def reads = fasta.toString().replace(" ", ",") + def reads = fastqs.toString().replace(" ", ",") def single_end = meta.single_end ? "--single-end" : "" """ fusioncatcher.py \\ diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index b0659a153..8a82d9da7 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -18,7 +18,7 @@ process FUSIONCATCHER_DOWNLOAD { def args2 = task.ext.args2 ?: '' def human_version = "v102" def url = "http://sourceforge.net/projects/fusioncatcher/files/data/human_${human_version}.tar.gz.aa" - def meta = [ id: "human_${human_version}" ] + meta = [ id: "human_${human_version}" ] """ if wget --spider "$url" 2>/dev/null; then wget $args $url diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf index c268545a7..3bf7c9e9a 100644 --- a/subworkflows/local/fusioncatcher_workflow/main.nf +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -10,7 +10,7 @@ workflow FUSIONCATCHER_WORKFLOW { fusioncatcher_fusions // path, string main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_dummy_file = file("$baseDir/assets/dummy_file_fusioncatcher.txt", checkIfExists: true) if (( run_fusioncatcher || all) && !fusioninspector_only ) { diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test index 4d91798ca..e4614e8de 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -11,7 +11,7 @@ nextflow_workflow { // Test test("FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4") { - setup { + /*setup { // Download reference files for fusioncatch run("FUSIONCATCHER_DOWNLOAD") { script "../../../../modules/local/fusioncatcher/download/main.nf" @@ -21,7 +21,7 @@ nextflow_workflow { """ } } - } + }*/ when { workflow { @@ -37,7 +37,7 @@ nextflow_workflow { ] ) // ch_references - input[1] = FUSIONCATCHER_DOWNLOAD.out.reference + input[1] = Channel.fromPath("/scratch/moebbs/NEXTFLOW_CODE/reference_rnafusion/human_v102").map{ [ [id: "human_v102"], it] } //FUSIONCATCHER_DOWNLOAD.out.reference // fusioncatcher (boolean) input[2] = true diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap deleted file mode 100644 index 19d409a0a..000000000 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap +++ /dev/null @@ -1,25 +0,0 @@ -{ - "FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4": { - "content": [ - { - "0": [ - - ], - "1": [ - - ], - "fusions": [ - - ], - "versions": [ - - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-09T20:39:28.49363464" - } -} \ No newline at end of file From 4fd46f4e97034c94957e6140112d07965461426b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20M=C3=B6bbs?= Date: Wed, 11 Dec 2024 18:19:10 +0000 Subject: [PATCH 206/887] PR changes --- subworkflows/local/arriba_workflow/main.nf | 11 +- .../local/arriba_workflow/tests/main.nf.test | 147 +++++++++++++++++- .../arriba_workflow/tests/main.nf.test.snap | 135 +++++----------- workflows/rnafusion.nf | 5 + 4 files changed, 193 insertions(+), 105 deletions(-) diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 28a0a0420..5f59916a2 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -27,14 +27,14 @@ workflow ARRIBA_WORKFLOW { ch_cram_index = Channel.empty() ch_dummy_file = file("$baseDir/assets/dummy_file_arriba.txt", checkIfExists: true) - if (( arriba || all) && !fusioninspector_only) { + if (( arriba || all ) && !fusioninspector_only) { STAR_FOR_ARRIBA( reads, ch_starindex_ref, ch_gtf, star_ignore_sjdbgtf, - '', // seq_platform, should be a params like other pipelines + '', seq_center ) @@ -42,7 +42,7 @@ workflow ARRIBA_WORKFLOW { if ( arriba_fusions ) { - ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) // Should this be done in the main script? + ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) .map { meta, reads, fusions -> [ meta, fusions ] } ch_arriba_fusion_fail = ch_dummy_file @@ -52,7 +52,7 @@ workflow ARRIBA_WORKFLOW { STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, - ch_arriba_ref_blacklist.map{ it[1] }, // should we update nf-core module to includes meta? + ch_arriba_ref_blacklist.map{ it[1] }, ch_arriba_ref_known_fusions.map{ it[1] }, ch_arriba_ref_cytobands.map{ it[1] }, ch_arriba_ref_protein_domains.map{ it[1] } @@ -80,8 +80,7 @@ workflow ARRIBA_WORKFLOW { } } else { - // Not sure how this dummy file can be useful - // If this tool can be skipped, why not just emitting an empty channel? + ch_arriba_fusions = reads .combine(Channel.value( file(ch_dummy_file, checkIfExists: true ) ) ) .map { meta, reads, fusions -> [ meta, fusions ] } diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test b/subworkflows/local/arriba_workflow/tests/main.nf.test index 96786a5b0..e49a3768c 100644 --- a/subworkflows/local/arriba_workflow/tests/main.nf.test +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test @@ -125,13 +125,146 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot(workflow.out).match() } + { with(workflow.out) { + assert snapshot( + file(fusions[0][1]), + file(fusions_fail[0]), + file(cram_index[0][1]).name, + file(cram_index[0][2]).name, + versions.collect{ file(it) } + ).match() + } + } ) } } - // TEST #2 WITHOUT INDEXING + // Test #2 With arriba_fusions file + test("ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4 - External fusion file") { + + setup { + // Create genome index for STAR + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main.nf" + process { + """ + // FASTA + input[0] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + + // GTF + input[1] = Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + """ + } + } + } + + when { + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [ id: "test_fastqs" ], + [ + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_1.fq.gz", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_2.fq.gz", checkIfExists: true) + ] + ] ) + + // ch_gtf + input[1] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_fasta + input[2] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.1700000-54900000.fa", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_starindex_ref + input[3] = STAR_GENOMEGENERATE.out.index + + // ch_arriba_ref_blacklist + input[4] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_known_fusions + input[5] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_cytobands + input[6] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_arriba_ref_protein_domains + input[7] = + Channel.fromPath( + "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // arriba (boolean) + input[8] = true + + // all (boolean) + input[9] = true + + // fusioninspector_only (boolean) + input[10] = false + + // star_ignore_sjdbgtf (boolean) + input[11] = false + + // seq_center (string) + input[12] = 'test_center' + + // arriba_fusions (string path) + input[13] = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/test_fastqs.arriba.fusions.tsv" + + // cram (array) + input[14] = [ 'arriba' ] + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { with(workflow.out) { + assert snapshot( + fusions[0].size() == 2, + fusions_fail.size() == 1, + file(cram_index[0][1]).name, + file(cram_index[0][2]).name, + versions.collect{ file(it) } + ).match() + } + } + ) + } + } + + // TEST #3 WITHOUT INDEXING test("ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4 - cram = []") { setup { @@ -241,7 +374,15 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot(workflow.out).match() } + { with(workflow.out) { + assert snapshot( + file(fusions[0][1]), + file(fusions_fail[0]), + cram_index.size() == 0, + versions.collect{ file(it) } + ).match() + } + } ) } } diff --git a/subworkflows/local/arriba_workflow/tests/main.nf.test.snap b/subworkflows/local/arriba_workflow/tests/main.nf.test.snap index 3aa777e80..2057827a2 100644 --- a/subworkflows/local/arriba_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/arriba_workflow/tests/main.nf.test.snap @@ -1,114 +1,57 @@ { + "ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4 - External fusion file": { + "content": [ + true, + true, + "test_fastqs_star_for_arriba_sorted.cram", + "test_fastqs_star_for_arriba_sorted.cram.crai", + [ + "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9", + "versions.yml:md5,85458747b55f37c1a5afd39ee7a3a4aa", + "versions.yml:md5,bfc5d96804f2991c7f7c705f1ddf81ec", + "versions.yml:md5,f4f64d3f1fd867d5afa51e03f7cf2824" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-11T15:53:59.18258718" + }, "ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4": { "content": [ - { - "0": [ - [ - { - "id": "test_fastqs" - }, - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.tsv" - ] - ], - "1": [ - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.discarded.tsv" - ], - "2": [ - [ - { - "id": "test_fastqs" - }, - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/test_fastqs_star_for_arriba_sorted.cram", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/test_fastqs_star_for_arriba_sorted.cram.crai" - ] - ], - "3": [ - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/5b/18880ae27c2497bddad57c4b7ba766/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/48/58af6204cc601a1a0e6e826a117f31/versions.yml" - ], - "cram_index": [ - [ - { - "id": "test_fastqs" - }, - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/test_fastqs_star_for_arriba_sorted.cram", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/test_fastqs_star_for_arriba_sorted.cram.crai" - ] - ], - "fusions": [ - [ - { - "id": "test_fastqs" - }, - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.tsv" - ] - ], - "fusions_fail": [ - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/test_fastqs.arriba.fusions.discarded.tsv" - ], - "versions": [ - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/da/0878f3451a0f8db34ffd9b178974e6/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/5b/18880ae27c2497bddad57c4b7ba766/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/b5/57dffeefbc4801b0f7c4af2c8530e6/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/c8/482130c0382c0d0318b9e98d0650da/versions.yml", - "/workspace/rnafusion/.nf-test/tests/7899df1159e4d52047799028a4a24a9a/work/48/58af6204cc601a1a0e6e826a117f31/versions.yml" - ] - } + "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d", + "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98", + "test_fastqs_star_for_arriba_sorted.cram", + "test_fastqs_star_for_arriba_sorted.cram.crai", + [ + "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", + "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9", + "versions.yml:md5,85458747b55f37c1a5afd39ee7a3a4aa", + "versions.yml:md5,bfc5d96804f2991c7f7c705f1ddf81ec", + "versions.yml:md5,f4f64d3f1fd867d5afa51e03f7cf2824" + ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-09T18:02:58.142697295" + "timestamp": "2024-12-11T15:43:48.053656601" }, "ARRIBA_WORKFLOW - Homo sapiens - FASTQs chr4 - cram = []": { "content": [ - { - "0": [ - [ - { - "id": "test_fastqs" - }, - "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" - ] - ], - "1": [ - "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", - "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9" - ], - "cram_index": [ - - ], - "fusions": [ - [ - { - "id": "test_fastqs" - }, - "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d" - ] - ], - "fusions_fail": [ - "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98" - ], - "versions": [ - "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", - "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9" - ] - } + "test_fastqs.arriba.fusions.tsv:md5,8f39789c4428e81eb9a8d0e54c34c43d", + "test_fastqs.arriba.fusions.discarded.tsv:md5,b804c1ed5b01d34163f5c0b2f6810f98", + true, + [ + "versions.yml:md5,24030f38976402fad0861e6ec99ee6b6", + "versions.yml:md5,439bbb92ff0a83f1e278fc396e9d8ce9" + ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-09T18:15:28.965848873" + "timestamp": "2024-12-11T16:07:37.079418154" } } \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 0908b30c3..0c8a6e5fb 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -85,6 +85,11 @@ workflow RNAFUSION { // // SUBWORKFLOW: Run STAR alignment and Arriba // + + // TODO: add params.seq_platform and pass it as argument to arriba_workflow + // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe inputed from samplesheet? + // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file + ARRIBA_WORKFLOW ( ch_reads_all, ch_gtf, From 6a50a0bc8fd212492352536f8492c2f27ef4db0f Mon Sep 17 00:00:00 2001 From: Alan M Date: Wed, 11 Dec 2024 20:32:47 +0100 Subject: [PATCH 207/887] create test with full reference locally --- modules/local/fusioncatcher/detect/main.nf | 6 +-- .../fusioncatcher_workflow/tests/main.nf.test | 5 +-- .../tests/main.nf.test.snap | 37 +++++++++++++++++++ 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 4b615fc38..c7ba7bfb4 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -1,5 +1,5 @@ process FUSIONCATCHER { - tag "$meta.id - $meta2.id" + tag "$meta.id" label 'process_high' conda "${moduleDir}/environment.yml" @@ -7,7 +7,7 @@ process FUSIONCATCHER { input: tuple val(meta), path(fastqs, stageAs: "input/*") - tuple val(meta2), path(reference, stageAs: "reference/*") + tuple val(meta2), path(reference) output: tuple val(meta), path("*.fusioncatcher.fusion-genes.txt") , optional:true , emit: fusions @@ -25,7 +25,7 @@ process FUSIONCATCHER { def single_end = meta.single_end ? "--single-end" : "" """ fusioncatcher.py \\ - -d reference \\ + -d ${reference} \\ -i input \\ -p $task.cpus \\ -o . \\ diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test index e4614e8de..89d2f78ad 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -11,7 +11,7 @@ nextflow_workflow { // Test test("FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4") { - /*setup { + setup { // Download reference files for fusioncatch run("FUSIONCATCHER_DOWNLOAD") { script "../../../../modules/local/fusioncatcher/download/main.nf" @@ -21,8 +21,7 @@ nextflow_workflow { """ } } - }*/ - + when { workflow { """ diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..522bc131b --- /dev/null +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -0,0 +1,37 @@ +{ + "FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4": { + "content": [ + { + "0": [ + [ + { + "id": "test_fastqs", + "single_end": false + }, + "test_fastqs.fusioncatcher.fusion-genes.txt:md5,c826a24c49abfcec8164c478e1e74892" + ] + ], + "1": [ + "versions.yml:md5,38af82f57bcacbd86c21109a3d425e62" + ], + "fusions": [ + [ + { + "id": "test_fastqs", + "single_end": false + }, + "test_fastqs.fusioncatcher.fusion-genes.txt:md5,c826a24c49abfcec8164c478e1e74892" + ] + ], + "versions": [ + "versions.yml:md5,38af82f57bcacbd86c21109a3d425e62" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.0" + }, + "timestamp": "2024-12-11T19:59:17.754866" + } +} \ No newline at end of file From 9bacad7c76f05c9b956dc2fe1b6351cc14608e40 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Thu, 12 Dec 2024 11:24:26 +0000 Subject: [PATCH 208/887] Template update for nf-core/tools version 3.1.0 --- .github/CONTRIBUTING.md | 12 +- .github/workflows/awsfulltest.yml | 21 +- .github/workflows/branch.yml | 18 +- .github/workflows/ci.yml | 2 +- .github/workflows/download_pipeline.yml | 8 +- .github/workflows/fix-linting.yml | 4 +- .github/workflows/linting.yml | 10 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 2 +- .../workflows/template_version_comment.yml | 2 +- .gitpod.yml | 11 +- .nf-core.yml | 8 +- .vscode/settings.json | 3 + conf/base.config | 2 +- conf/modules.config | 1 + docs/usage.md | 32 +- modules.json | 8 +- modules/nf-core/fastqc/main.nf | 2 +- modules/nf-core/fastqc/meta.yml | 1 + nextflow.config | 53 ++- nextflow_schema.json | 6 + ro-crate-metadata.json | 338 ++++++++++++++++++ .../utils_nfcore_rnafusion_pipeline/main.nf | 7 +- .../nf-core/utils_nextflow_pipeline/main.nf | 2 + .../tests/main.workflow.nf.test | 10 +- .../nf-core/utils_nfcore_pipeline/main.nf | 89 ++--- .../tests/main.function.nf.test | 46 +-- .../tests/main.function.nf.test.snap | 30 -- .../utils_nfschema_plugin/tests/main.nf.test | 4 +- workflows/rnafusion.nf | 2 +- 30 files changed, 518 insertions(+), 218 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 ro-crate-metadata.json diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 7d143af54..b10a5a24f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# nf-core/rnafusion: Contributing Guidelines +# `nf-core/rnafusion`: Contributing Guidelines Hi there! Many thanks for taking an interest in improving nf-core/rnafusion. @@ -55,9 +55,9 @@ These tests are run both with the latest available version of `Nextflow` and als :warning: Only in the unlikely and regretful event of a release happening with a bug. -- On your own fork, make a new branch `patch` based on `upstream/master`. +- On your own fork, make a new branch `patch` based on `upstream/main` or `upstream/master`. - Fix the bug, and bump version (X.Y.Z+1). -- A PR should be made on `master` from patch to directly this particular bug. +- Open a pull-request from `patch` to `main`/`master` with the changes. ## Getting help @@ -65,13 +65,13 @@ For further information/help, please consult the [nf-core/rnafusion documentatio ## Pipeline contribution conventions -To make the nf-core/rnafusion code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. +To make the `nf-core/rnafusion` code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. ### Adding a new step If you wish to contribute a new step, please use the following coding standards: -1. Define the corresponding input channel into your new process from the expected previous process channel +1. Define the corresponding input channel into your new process from the expected previous process channel. 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new parameters to `nextflow.config` with a default (see below). @@ -84,7 +84,7 @@ If you wish to contribute a new step, please use the following coding standards: ### Default values -Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. +Parameters should be initialised / defined with default values within the `params` scope in `nextflow.config`. Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 68975fb0d..2281992a2 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,11 +1,12 @@ name: nf-core AWS full size tests -# This workflow is triggered on PRs opened against the master branch. +# This workflow is triggered on PRs opened against the main/master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: pull_request: branches: + - main - master workflow_dispatch: pull_request_review: @@ -18,18 +19,30 @@ jobs: if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - - uses: octokit/request-action@v2.x + - name: Get PR reviews + uses: octokit/request-action@v2.x + if: github.event_name != 'workflow_dispatch' id: check_approvals + continue-on-error: true with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews?per_page=100 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - id: test_variables + + - name: Check for approvals + if: ${{ failure() && github.event_name != 'workflow_dispatch' }} + run: | + echo "No review approvals found. At least 2 approvals are required to run this action automatically." + exit 1 + + - name: Check for enough approvals (>=2) + id: test_variables if: github.event_name != 'workflow_dispatch' run: | JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 19704d239..00e20510e 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -1,15 +1,17 @@ name: nf-core branch protection -# This workflow is triggered on PRs to master branch on the repository -# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +# This workflow is triggered on PRs to `main`/`master` branch on the repository +# It fails when someone tries to make a PR against the nf-core `main`/`master` branch instead of `dev` on: pull_request_target: - branches: [master] + branches: + - main + - master jobs: test: runs-on: ubuntu-latest steps: - # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches + # PRs to the nf-core repo main/master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches - name: Check PRs if: github.repository == 'nf-core/rnafusion' run: | @@ -22,7 +24,7 @@ jobs: uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 with: message: | - ## This PR is against the `master` branch :x: + ## This PR is against the `${{github.event.pull_request.base.ref}}` branch :x: * Do not close this PR * Click _Edit_ and change the `base` to `dev` @@ -32,9 +34,9 @@ jobs: Hi @${{ github.event.pull_request.user.login }}, - It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `master` branch. - The `master` branch on nf-core repositories should always contain code from the latest release. - Because of this, PRs to `master` are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. + It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) ${{github.event.pull_request.base.ref}} branch. + The ${{github.event.pull_request.base.ref}} branch on nf-core repositories should always contain code from the latest release. + Because of this, PRs to ${{github.event.pull_request.base.ref}} are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page. Note that even after this, the test will continue to show as failing until you push a new commit. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 04fba0396..68412b2ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: profile: "singularity" steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Set up Nextflow uses: nf-core/setup-nextflow@v2 diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 713dc3e73..2576cc0c7 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -2,7 +2,7 @@ name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually -# - when a PR is opened or reopened to master branch +# - when a PR is opened or reopened to main/master branch # - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev. on: workflow_dispatch: @@ -17,9 +17,11 @@ on: - edited - synchronize branches: + - main - master pull_request_target: branches: + - main - master env: @@ -35,7 +37,7 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" architecture: "x64" @@ -69,7 +71,7 @@ jobs: --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ --container-cache-utilisation 'amend' \ --download-configuration 'yes' diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index df750880c..1e4ccb869 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix-linting.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: token: ${{ secrets.nf_core_bot_auth_token }} @@ -32,7 +32,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index a502573c5..dbd52d5a2 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,10 +14,10 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Set up Python 3.12 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" @@ -31,12 +31,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Install Nextflow uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" architecture: "x64" @@ -74,7 +74,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 42e519bfa..0bed96d36 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 + uses: dawidd6/action-download-artifact@80620a5d27ce0ae443b965134db88467fc607b43 # v7 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index c6ba35df4..450b1d5e4 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.10" - name: Install dependencies diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml index e8aafe44d..537529bc1 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template_version_comment.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: ref: ${{ github.event.pull_request.head.sha }} diff --git a/.gitpod.yml b/.gitpod.yml index 461186376..83599f633 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -6,12 +6,5 @@ tasks: nextflow self-update vscode: - extensions: # based on nf-core.nf-core-extensionpack - #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - - nextflow.nextflow # Nextflow syntax highlighting - - oderwat.indent-rainbow # Highlight indentation level - - streetsidesoftware.code-spell-checker # Spelling checker for source code - - charliermarsh.ruff # Code linter Ruff + extensions: + - nf-core.nf-core-extensionpack # https://github.com/nf-core/vscode-extensionpack diff --git a/.nf-core.yml b/.nf-core.yml index 097a52b0e..37d9e4cd7 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,10 +1,10 @@ -bump_version: null lint: files_unchanged: - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md -nf_core_version: 3.0.2 -org_path: null + - conf/igenomes.config + - conf/igenomes_ignored.config +nf_core_version: 3.1.0 repository_type: pipeline template: author: Martin Proks, Annick Renevey @@ -14,6 +14,4 @@ template: name: rnafusion org: nf-core outdir: . - skip_features: null version: 4.0.0dev -update: null diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..a33b527cc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "markdown.styles": ["public/vscode_markdown.css"] +} diff --git a/conf/base.config b/conf/base.config index f5ec67936..c0779b554 100644 --- a/conf/base.config +++ b/conf/base.config @@ -20,7 +20,7 @@ process { maxErrors = '-1' // Process-specific resource requirements - // NOTE - Please try and re-use the labels below as much as possible. + // NOTE - Please try and reuse the labels below as much as possible. // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. diff --git a/conf/modules.config b/conf/modules.config index d266a387f..d203d2b6e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -21,6 +21,7 @@ process { withName: FASTQC { ext.args = '--quiet' } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/docs/usage.md b/docs/usage.md index 01ddc7731..c8a121d09 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -75,9 +75,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -:::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -::: +> [!WARNING] +> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). The above pipeline run specified with a params file in yaml format: @@ -106,23 +105,21 @@ nextflow pull nf-core/rnafusion ### Reproducibility -It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +It is a good idea to specify the pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/rnafusion releases page](https://github.com/nf-core/rnafusion/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. -To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. +To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -:::tip -If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. -::: +> [!TIP] +> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. ## Core Nextflow arguments -:::note -These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). -::: +> [!NOTE] +> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen) ### `-profile` @@ -130,16 +127,15 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +> [!IMPORTANT] +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is suported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer environment. - `test` - A profile with a complete configuration for automated testing @@ -175,13 +171,13 @@ Specify the path to a specific config file (this is a core Nextflow command). Se ### Resource requests -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the pipeline steps, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher resources request (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. ### Custom Containers -In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases, you may wish to change the container or conda environment used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However, in some cases the pipeline specified version maybe out of date. To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. diff --git a/modules.json b/modules.json index 01a6c107b..d655d7870 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "dc94b6ee04a05ddb9f7ae050712ff30a13149164", "installed_by": ["modules"] }, "multiqc": { @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", + "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", + "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", + "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d8989f481..752c3a10c 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -24,7 +24,7 @@ process FASTQC { // Make list of old name and new name pairs to use for renaming in the bash while loop def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } def rename_to = old_new_pairs*.join(' ').join(' ') - def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') + def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ') // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index 4827da7af..2b2e62b8a 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -11,6 +11,7 @@ tools: FastQC gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other overrepresented sequences. homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ diff --git a/nextflow.config b/nextflow.config index 872c08044..4383d5421 100644 --- a/nextflow.config +++ b/nextflow.config @@ -38,8 +38,7 @@ params { show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - - // Config options + trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')// Config options config_profile_name = null config_profile_description = null @@ -153,6 +152,13 @@ profiles { executor.name = 'local' executor.cpus = 4 executor.memory = 8.GB + process { + resourceLimits = [ + memory: 8.GB, + cpus : 4, + time : 1.h + ] + } } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } @@ -201,30 +207,49 @@ set -C # No clobber - prevent output redirection from overwriting files. // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false -def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true - file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html" } report { enabled = true - file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html" } trace { enabled = true - file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt" } dag { enabled = true - file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html" } manifest { name = 'nf-core/rnafusion' - author = """Martin Proks, Annick Renevey""" + author = """Martin Proks, Annick Renevey""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead + contributors = [ + // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 + [ + name: 'Martin Proks', + affiliation: '', + email: '', + github: '', + contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '' + ], + [ + name: ' Annick Renevey', + affiliation: '', + email: '', + github: '', + contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '' + ], + ] homePage = 'https://github.com/nf-core/rnafusion' description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' + defaultBranch = 'master' nextflowVersion = '!>=24.04.2' version = '4.0.0dev' doi = '' @@ -237,9 +262,10 @@ plugins { validation { defaultIgnoreParams = ["genomes"] + monochromeLogs = params.monochrome_logs help { enabled = true - command = "nextflow run $manifest.name -profile --input samplesheet.csv --outdir " + command = "nextflow run nf-core/rnafusion -profile --input samplesheet.csv --outdir " fullParameter = "help_full" showHiddenParameter = "show_hidden" beforeText = """ @@ -249,15 +275,15 @@ validation { \033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m \033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m \033[0;32m`._,._,\'\033[0m -\033[0;35m ${manifest.name} ${manifest.version}\033[0m +\033[0;35m nf-core/rnafusion ${manifest.version}\033[0m -\033[2m----------------------------------------------------\033[0m- """ - afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} + afterText = """${manifest.doi ? "\n* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} * The nf-core framework https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/${manifest.name}/blob/master/CITATIONS.md + https://github.com/nf-core/rnafusion/blob/master/CITATIONS.md """ } summary { @@ -265,6 +291,3 @@ validation { afterText = validation.help.afterText } } - -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 021e105a2..69a4e5dbd 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -218,6 +218,12 @@ "description": "Base URL or local path to location of pipeline test dataset files", "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", "hidden": true + }, + "trace_report_suffix": { + "type": "string", + "fa_icon": "far calendar", + "description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.", + "hidden": true } } } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json new file mode 100644 index 000000000..f1d7090ab --- /dev/null +++ b/ro-crate-metadata.json @@ -0,0 +1,338 @@ +{ + "@context": [ + "https://w3id.org/ro/crate/1.1/context", + { + "GithubService": "https://w3id.org/ro/terms/test#GithubService", + "JenkinsService": "https://w3id.org/ro/terms/test#JenkinsService", + "PlanemoEngine": "https://w3id.org/ro/terms/test#PlanemoEngine", + "TestDefinition": "https://w3id.org/ro/terms/test#TestDefinition", + "TestInstance": "https://w3id.org/ro/terms/test#TestInstance", + "TestService": "https://w3id.org/ro/terms/test#TestService", + "TestSuite": "https://w3id.org/ro/terms/test#TestSuite", + "TravisService": "https://w3id.org/ro/terms/test#TravisService", + "definition": "https://w3id.org/ro/terms/test#definition", + "engineVersion": "https://w3id.org/ro/terms/test#engineVersion", + "instance": "https://w3id.org/ro/terms/test#instance", + "resource": "https://w3id.org/ro/terms/test#resource", + "runsOn": "https://w3id.org/ro/terms/test#runsOn" + } + ], + "@graph": [ + { + "@id": "./", + "@type": "Dataset", + "creativeWorkStatus": "InProgress", + "datePublished": "2024-12-12T11:24:21+00:00", + "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "hasPart": [ + { + "@id": "main.nf" + }, + { + "@id": "assets/" + }, + { + "@id": "conf/" + }, + { + "@id": "docs/" + }, + { + "@id": "docs/images/" + }, + { + "@id": "modules/" + }, + { + "@id": "modules/nf-core/" + }, + { + "@id": "workflows/" + }, + { + "@id": "subworkflows/" + }, + { + "@id": "nextflow.config" + }, + { + "@id": "README.md" + }, + { + "@id": "nextflow_schema.json" + }, + { + "@id": "CHANGELOG.md" + }, + { + "@id": "LICENSE" + }, + { + "@id": "CODE_OF_CONDUCT.md" + }, + { + "@id": "CITATIONS.md" + }, + { + "@id": "modules.json" + }, + { + "@id": "docs/usage.md" + }, + { + "@id": "docs/output.md" + }, + { + "@id": ".nf-core.yml" + }, + { + "@id": ".pre-commit-config.yaml" + }, + { + "@id": ".prettierignore" + } + ], + "isBasedOn": "https://github.com/nf-core/rnafusion", + "license": "MIT", + "mainEntity": { + "@id": "main.nf" + }, + "mentions": [ + { + "@id": "#e018c319-519d-4a99-bdba-7c9c8860b896" + } + ], + "name": "nf-core/rnafusion" + }, + { + "@id": "ro-crate-metadata.json", + "@type": "CreativeWork", + "about": { + "@id": "./" + }, + "conformsTo": [ + { + "@id": "https://w3id.org/ro/crate/1.1" + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate/1.0" + } + ] + }, + { + "@id": "main.nf", + "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "creator": [ + { + "@id": "https://orcid.org/0000-0001-9017-591X" + }, + { + "@id": "#phil.ewels@scilifelab.se" + }, + { + "@id": "https://orcid.org/0000-0002-8178-3128" + }, + { + "@id": "#max.u.garcia@gmail.com" + } + ], + "dateCreated": "", + "dateModified": "2024-12-12T11:24:21Z", + "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", + "keywords": ["nf-core", "nextflow", "fusion", "fusion-genes", "gene-fusion", "rna", "rna-seq"], + "license": ["MIT"], + "maintainer": [ + { + "@id": "https://orcid.org/0000-0002-8178-3128" + } + ], + "name": ["nf-core/rnafusion"], + "programmingLanguage": { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" + }, + "sdPublisher": { + "@id": "https://nf-co.re/" + }, + "url": ["https://github.com/nf-core/rnafusion", "https://nf-co.re/rnafusion/dev/"], + "version": ["4.0.0dev"] + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", + "@type": "ComputerLanguage", + "identifier": { + "@id": "https://www.nextflow.io/" + }, + "name": "Nextflow", + "url": { + "@id": "https://www.nextflow.io/" + }, + "version": "!>=24.04.2" + }, + { + "@id": "#e018c319-519d-4a99-bdba-7c9c8860b896", + "@type": "TestSuite", + "instance": [ + { + "@id": "#36a96043-5ef5-4bc3-86eb-32712383dda8" + } + ], + "mainEntity": { + "@id": "main.nf" + }, + "name": "Test suite for nf-core/rnafusion" + }, + { + "@id": "#36a96043-5ef5-4bc3-86eb-32712383dda8", + "@type": "TestInstance", + "name": "GitHub Actions workflow for testing nf-core/rnafusion", + "resource": "repos/nf-core/rnafusion/actions/workflows/ci.yml", + "runsOn": { + "@id": "https://w3id.org/ro/terms/test#GithubService" + }, + "url": "https://api.github.com" + }, + { + "@id": "https://w3id.org/ro/terms/test#GithubService", + "@type": "TestService", + "name": "Github Actions", + "url": { + "@id": "https://github.com" + } + }, + { + "@id": "assets/", + "@type": "Dataset", + "description": "Additional files" + }, + { + "@id": "conf/", + "@type": "Dataset", + "description": "Configuration files" + }, + { + "@id": "docs/", + "@type": "Dataset", + "description": "Markdown files for documenting the pipeline" + }, + { + "@id": "docs/images/", + "@type": "Dataset", + "description": "Images for the documentation files" + }, + { + "@id": "modules/", + "@type": "Dataset", + "description": "Modules used by the pipeline" + }, + { + "@id": "modules/nf-core/", + "@type": "Dataset", + "description": "nf-core modules" + }, + { + "@id": "workflows/", + "@type": "Dataset", + "description": "Main pipeline workflows to be executed in main.nf" + }, + { + "@id": "subworkflows/", + "@type": "Dataset", + "description": "Smaller subworkflows" + }, + { + "@id": "nextflow.config", + "@type": "File", + "description": "Main Nextflow configuration file" + }, + { + "@id": "README.md", + "@type": "File", + "description": "Basic pipeline usage information" + }, + { + "@id": "nextflow_schema.json", + "@type": "File", + "description": "JSON schema for pipeline parameter specification" + }, + { + "@id": "CHANGELOG.md", + "@type": "File", + "description": "Information on changes made to the pipeline" + }, + { + "@id": "LICENSE", + "@type": "File", + "description": "The license - should be MIT" + }, + { + "@id": "CODE_OF_CONDUCT.md", + "@type": "File", + "description": "The nf-core code of conduct" + }, + { + "@id": "CITATIONS.md", + "@type": "File", + "description": "Citations needed when using the pipeline" + }, + { + "@id": "modules.json", + "@type": "File", + "description": "Version information for modules from nf-core/modules" + }, + { + "@id": "docs/usage.md", + "@type": "File", + "description": "Usage documentation" + }, + { + "@id": "docs/output.md", + "@type": "File", + "description": "Output documentation" + }, + { + "@id": ".nf-core.yml", + "@type": "File", + "description": "nf-core configuration file, configuring template features and linting rules" + }, + { + "@id": ".pre-commit-config.yaml", + "@type": "File", + "description": "Configuration file for pre-commit hooks" + }, + { + "@id": ".prettierignore", + "@type": "File", + "description": "Ignore file for prettier" + }, + { + "@id": "https://nf-co.re/", + "@type": "Organization", + "name": "nf-core", + "url": "https://nf-co.re/" + }, + { + "@id": "https://orcid.org/0000-0001-9017-591X", + "@type": "Person", + "email": "rickard.hammaren@scilifelab.se", + "name": "Rickard Hammar\u00e9n" + }, + { + "@id": "#phil.ewels@scilifelab.se", + "@type": "Person", + "email": "phil.ewels@scilifelab.se", + "name": "Phil Ewels" + }, + { + "@id": "https://orcid.org/0000-0002-8178-3128", + "@type": "Person", + "email": "mproksik@gmail.com", + "name": "Martin Proks" + }, + { + "@id": "#max.u.garcia@gmail.com", + "@type": "Person", + "email": "max.u.garcia@gmail.com", + "name": "Maxime Garcia" + } + ] +} diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 834a4e5c6..df68ef3ab 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -116,7 +116,8 @@ workflow PIPELINE_COMPLETION { main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") - + def multiqc_reports = multiqc_report.toList() + // // Completion email and summary // @@ -129,7 +130,7 @@ workflow PIPELINE_COMPLETION { plaintext_email, outdir, monochrome_logs, - multiqc_report.toList() + multiqc_reports.getVal(), ) } @@ -225,7 +226,7 @@ def toolBibliographyText() { } def methodsDescriptionText(mqc_methods_yaml) { - // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file + // Convert to a named map so can be used as with familiar NXF ${workflow} variable syntax in the MultiQC YML file def meta = [:] meta.workflow = workflow.toMap() meta["manifest_map"] = workflow.manifest.toMap() diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 0fcbf7b3f..d6e593e85 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -92,10 +92,12 @@ def checkCondaChannels() { channels = config.channels } catch (NullPointerException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } catch (IOException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce8e..02dbf094c 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 5cb7bafef..bfd258760 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -56,21 +56,6 @@ def checkProfileProvided(nextflow_cli_args) { } } -// -// Citation string for pipeline -// -def workflowCitation() { - def temp_doi_ref = "" - def manifest_doi = workflow.manifest.doi.tokenize(",") - // Handling multiple DOIs - // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers - // Removing ` ` since the manifest.doi is a string and not a proper list - manifest_doi.each { doi_ref -> - temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" - } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" -} - // // Generate workflow version string // @@ -150,33 +135,6 @@ def paramsSummaryMultiqc(summary_params) { return yaml_file_text } -// -// nf-core logo -// -def nfCoreLogo(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - String.format( - """\n - ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) -} - -// -// Return dashed line -// -def dashedLine(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - return "-${colors.dim}----------------------------------------------------${colors.reset}-" -} - // // ANSII colours used for terminal logging // @@ -245,28 +203,24 @@ def logColours(monochrome_logs=true) { return colorcodes } -// -// Attach the multiqc report to email -// -def attachMultiqcReport(multiqc_report) { - def mqc_report = null - try { - if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") - } - mqc_report = mqc_report[0] - } +// Return a single report from an object that may be a Path or List +// +def getSingleReport(multiqc_reports) { + if (multiqc_reports instanceof Path) { + return multiqc_reports + } else if (multiqc_reports instanceof List) { + if (multiqc_reports.size() == 0) { + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") + return null + } else if (multiqc_reports.size() == 1) { + return multiqc_reports.first() + } else { + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") + return multiqc_reports.first() } + } else { + return null } - catch (Exception all) { - if (multiqc_report) { - log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") - } - } - return mqc_report } // @@ -320,7 +274,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi email_fields['summary'] = summary << misc_fields // On success try attach the multiqc report - def mqc_report = attachMultiqcReport(multiqc_report) + def mqc_report = getSingleReport(multiqc_report) // Check if we are only sending emails on failure def email_address = email @@ -340,7 +294,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) @@ -351,14 +305,17 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi if (email_address) { try { if (plaintext_email) { -new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') + } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } ['sendmail', '-t'].execute() << sendmail_html log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") } - catch (Exception all) { + catch (Exception msg) { + log.debug(msg.toString()) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test index 1dc317f8f..f117040cb 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -41,26 +41,14 @@ nextflow_function { } } - test("Test Function workflowCitation") { - - function "workflowCitation" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function nfCoreLogo") { + test("Test Function without logColours") { - function "nfCoreLogo" + function "logColours" when { function { """ - input[0] = false + input[0] = true """ } } @@ -73,9 +61,8 @@ nextflow_function { } } - test("Test Function dashedLine") { - - function "dashedLine" + test("Test Function with logColours") { + function "logColours" when { function { @@ -93,14 +80,13 @@ nextflow_function { } } - test("Test Function without logColours") { - - function "logColours" + test("Test Function getSingleReport with a single file") { + function "getSingleReport" when { function { """ - input[0] = true + input[0] = file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true) """ } } @@ -108,18 +94,22 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") } ) } } - test("Test Function with logColours") { - function "logColours" + test("Test Function getSingleReport with multiple files") { + function "getSingleReport" when { function { """ - input[0] = false + input[0] = [ + file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/network.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/expression.tsv', checkIfExists: true) + ] """ } } @@ -127,7 +117,9 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") }, + { assert !function.result.contains("network.tsv") }, + { assert !function.result.contains("expression.tsv") } ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap index 1037232c9..02c670141 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -17,26 +17,6 @@ }, "timestamp": "2024-02-28T12:02:59.729647" }, - "Test Function nfCoreLogo": { - "content": [ - "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:10.562934" - }, - "Test Function workflowCitation": { - "content": [ - "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:07.019761" - }, "Test Function without logColours": { "content": [ { @@ -95,16 +75,6 @@ }, "timestamp": "2024-02-28T12:03:17.969323" }, - "Test Function dashedLine": { - "content": [ - "-\u001b[2m----------------------------------------------------\u001b[0m-" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:14.366181" - }, "Test Function with logColours": { "content": [ { diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 842dc432a..8fb301648 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -42,7 +42,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { @@ -94,7 +94,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 53c51b00d..e80985a2f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -39,7 +39,7 @@ workflow RNAFUSION { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', + name: 'nf_core_' + 'rnafusion_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } From ec373b317aadcfc7db831c632bc308569469400c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:18:50 +0000 Subject: [PATCH 209/887] fix: add dependencies versions and update container --- modules/local/starfusion/build/environment.yml | 2 +- modules/local/starfusion/build/main.nf | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index d02ab2d69..eacee484a 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -6,6 +6,6 @@ dependencies: - bioconda::hmmer=3.4 - bioconda::minimap2=2.28 - bioconda::samtools=1.6 - - bioconda::star=2.7.11a - bioconda::star-fusion=1.14.0 + - bioconda::star=2.7.11a - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index f3014ca93..6dc654d0e 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -3,7 +3,7 @@ process STARFUSION_BUILD { label 'process_high' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:63e3d21ca68ea531' + container 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086' input: tuple val(meta), path(fasta) @@ -15,9 +15,6 @@ process STARFUSION_BUILD { tuple val(meta), path("ctat_genome_lib_build_dir"), emit: reference script: - if (dfam_species != "human" && dfam_species != "mouse") { - error "Invalid species for --dfam_db. Only 'human' or 'mouse' are accepted. Provided: ${dfam_species}" - } def args = task.ext.args ?: '' """ prep_genome_lib.pl \\ From 99033b5d342a92362b6414bf7e03ee2260fd277b Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:19:25 +0000 Subject: [PATCH 210/887] refactor: add readlength as ext.args --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index abe0e79d4..0eb1441d9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -329,6 +329,7 @@ process { mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] + ext.args = "--max_readlength ${params.read_length}" } withName: 'STARFUSION_DOWNLOAD' { From 17dd8b4b4ede749cc9a66bad5846859b232bbf19 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 12 Dec 2024 15:03:59 +0000 Subject: [PATCH 211/887] test: update stub structure --- modules/local/starfusion/build/main.nf | 97 +++++++++++----- .../starfusion/build/tests/main.nf.test.snap | 106 ++++++++++++++++-- 2 files changed, 167 insertions(+), 36 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 6dc654d0e..484389b12 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -34,41 +34,88 @@ process STARFUSION_BUILD { stub: """ - mkdir ctat_genome_lib_build_dir + mkdir -p ctat_genome_lib_build_dir + touch ctat_genome_lib_build_dir/AnnotFilterRule.pm - gzip -c /dev/null > ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz - touch ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans - touch ctat_genome_lib_build_dir/ref_genome.fa.mm2 - touch ctat_genome_lib_build_dir/ref_genome.fa.ntf gzip -c /dev/null > ctat_genome_lib_build_dir/blast_pairs.dat.gz - touch ctat_genome_lib_build_dir/ref_annot.cdna.fa - touch ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu - touch ctat_genome_lib_build_dir/ref_genome.fa.ndb - touch ctat_genome_lib_build_dir/ref_genome.fa.nto touch ctat_genome_lib_build_dir/blast_pairs.idx + + mkdir -p ctat_genome_lib_build_dir/__chkpts + touch ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok + touch ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok + touch ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok + touch ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok + touch ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok + touch ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok + touch ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok + touch ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok + touch ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok + touch ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok + touch ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok + touch ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok + touch ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok + touch ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok + touch ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok + touch ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok + touch ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok + touch ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok + touch ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok + touch ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok + touch ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok + touch ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok + touch ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok + + gzip -c /dev/null > ctat_genome_lib_build_dir/fusion_annot_lib.gz + touch ctat_genome_lib_build_dir/fusion_annot_lib.idx + touch ctat_genome_lib_build_dir/pfam_domains.dbm + gzip -c /dev/null > ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz + + touch ctat_genome_lib_build_dir/ref_annot.cdna.fa touch ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx - touch ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed - touch ctat_genome_lib_build_dir/ref_genome.fa.nhr - touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx - touch ctat_genome_lib_build_dir/__chkpts touch ctat_genome_lib_build_dir/ref_annot.cds - touch ctat_genome_lib_build_dir/ref_annot.pep - touch ctat_genome_lib_build_dir/ref_genome.fa.nin - touch ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat - gzip -c /dev/null > ctat_genome_lib_build_dir/fusion_annot_lib.gz touch ctat_genome_lib_build_dir/ref_annot.cdsplus.fa - touch ctat_genome_lib_build_dir/ref_annot.prot_info.dbm - touch ctat_genome_lib_build_dir/ref_genome.fa.njs - touch ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm - touch ctat_genome_lib_build_dir/fusion_annot_lib.idx touch ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx - touch ctat_genome_lib_build_dir/ref_genome.fa - touch ctat_genome_lib_build_dir/ref_genome.fa.not - gzip -c /dev/null > ctat_genome_lib_build_dir/trans.blast.dat.gz - touch ctat_genome_lib_build_dir/pfam_domains.dbm touch ctat_genome_lib_build_dir/ref_annot.gtf + touch ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans + touch ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu + touch ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed + touch ctat_genome_lib_build_dir/ref_annot.pep + touch ctat_genome_lib_build_dir/ref_annot.prot_info.dbm + + touch ctat_genome_lib_build_dir/ref_genome.fa touch ctat_genome_lib_build_dir/ref_genome.fa.fai + touch ctat_genome_lib_build_dir/ref_genome.fa.mm2 + touch ctat_genome_lib_build_dir/ref_genome.fa.ndb + touch ctat_genome_lib_build_dir/ref_genome.fa.nhr + touch ctat_genome_lib_build_dir/ref_genome.fa.nin + touch ctat_genome_lib_build_dir/ref_genome.fa.njs + touch ctat_genome_lib_build_dir/ref_genome.fa.not touch ctat_genome_lib_build_dir/ref_genome.fa.nsq + touch ctat_genome_lib_build_dir/ref_genome.fa.ntf + touch ctat_genome_lib_build_dir/ref_genome.fa.nto + + mkdir -p ctat_genome_lib_build_dir/ref_genome.fa.star.idx + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab + touch ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab + + touch ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat + touch ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm + gzip -c /dev/null > ctat_genome_lib_build_dir/trans.blast.dat.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/starfusion/build/tests/main.nf.test.snap b/modules/local/starfusion/build/tests/main.nf.test.snap index 6ccede318..e50db541e 100644 --- a/modules/local/starfusion/build/tests/main.nf.test.snap +++ b/modules/local/starfusion/build/tests/main.nf.test.snap @@ -62,12 +62,12 @@ "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", - "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", + "Genome:md5,21aac51c5062f73d6305ae77691f5d4e", true, true, - "SA:md5,7dd9083264be9c6a2194d990bc10d237", - "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", - "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", + "SA:md5,4d6ee7c82328aa304300e51ab5677ff9", + "SAindex:md5,2d3498f7d84a69bbc65fe9de1887820c", + "sjdbInfo.txt:md5,0ad0c108e6d02ec541d6adeffbdea6fd", "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", @@ -80,7 +80,7 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-11T15:32:32.307712922" + "timestamp": "2024-12-12T14:57:13.528134845" }, "STARFUSION_BUILD - human - minigenome - stub": { "content": [ @@ -93,7 +93,31 @@ [ "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ], "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -121,7 +145,25 @@ "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ], "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -136,7 +178,31 @@ [ "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "__chkpts:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ], "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -164,7 +230,25 @@ "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", - "ref_genome.fa.star.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ], "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -177,6 +261,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-11T15:05:16.428455255" + "timestamp": "2024-12-12T14:57:33.861849482" } -} +} \ No newline at end of file From 4f078b5d068b7d954af7066fbaad4026b0e4c291 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:43:00 +0000 Subject: [PATCH 212/887] test: add nf-test to `starfusion` --- modules/local/starfusion/detect/main.nf | 3 +- .../starfusion/detect/tests/main.nf.test | 87 ++++++++++++++ .../starfusion/detect/tests/main.nf.test.snap | 112 ++++++++++++++++++ 3 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 modules/local/starfusion/detect/tests/main.nf.test create mode 100644 modules/local/starfusion/detect/tests/main.nf.test.snap diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 273967707..10bc6582c 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -18,12 +18,13 @@ process STARFUSION { script: def prefix = task.ext.prefix ?: "${meta.id}" def fasta = meta.single_end ? "--left_fq ${reads[0]}" : "--left_fq ${reads[0]} --right_fq ${reads[1]}" + def junction_arg = junction ? "-J ${junction}": "" def args = task.ext.args ?: '' """ STAR-Fusion \\ --genome_lib_dir $reference \\ $fasta \\ - -J $junction \\ + $junction_arg \\ --CPU $task.cpus \\ --examine_coding_effect \\ --output_dir . \\ diff --git a/modules/local/starfusion/detect/tests/main.nf.test b/modules/local/starfusion/detect/tests/main.nf.test new file mode 100644 index 000000000..75e0bfdd7 --- /dev/null +++ b/modules/local/starfusion/detect/tests/main.nf.test @@ -0,0 +1,87 @@ +nextflow_process { + + name "Test Process STARFUSION" + script "../main.nf" + process "STARFUSION" + + setup { + run("STARFUSION_BUILD") { + script "../../../starfusion/build/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome fasta' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") + ] + input[1] = [ + [ id:'minigenome gtf' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") + ] + + input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input [3] = "human" + """ + } + } + } + + test("Should run without failures") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") + ], // reads + [] // empty list for junction, as we don't have a pre-computed Chimeric.out.junction file + ] + input[1] = STARFUSION_BUILD.out.reference.map { it[1] } + """ + } + } + + then { + assert process.success + assert snapshot( + process.out.fusions, + process.out.abridged, + process.out.coding_effect, + process.out.versions + ).match() + } + + } + + test("Should create stub files") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test_stub', single_end:false ], + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") + ], + [] // empty list for junction + ] + input[1] = STARFUSION_BUILD.out.reference.map { it[1] } + """ + } + } + + then { + assert process.success + assert snapshot( + process.out + ).match() + } + + } + +} diff --git a/modules/local/starfusion/detect/tests/main.nf.test.snap b/modules/local/starfusion/detect/tests/main.nf.test.snap new file mode 100644 index 000000000..2532b33d6 --- /dev/null +++ b/modules/local/starfusion/detect/tests/main.nf.test.snap @@ -0,0 +1,112 @@ +{ + "Should create stub files": { + "content": [ + { + "0": [ + [ + { + "id": "test_stub", + "single_end": false + }, + "test_stub.starfusion.fusion_predictions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test_stub", + "single_end": false + }, + "test_stub.starfusion.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test_stub", + "single_end": false + }, + "test_stub.starfusion.abridged.coding_effect.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,4131f39f483637d95446231588add8f1" + ], + "abridged": [ + [ + { + "id": "test_stub", + "single_end": false + }, + "test_stub.starfusion.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coding_effect": [ + [ + { + "id": "test_stub", + "single_end": false + }, + "test_stub.starfusion.abridged.coding_effect.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fusions": [ + [ + { + "id": "test_stub", + "single_end": false + }, + "test_stub.starfusion.fusion_predictions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,4131f39f483637d95446231588add8f1" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-16T14:47:21.862981618" + }, + "Should run without failures": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.starfusion.fusion_predictions.tsv:md5,2adb2aeb44ea98736fb7572e7b5de5c6" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.starfusion.abridged.tsv:md5,f37f1cd07a3a6ff41e131dbe369bc093" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.starfusion.abridged.coding_effect.tsv:md5,8f5739b0351a725ee96cdf52860d680e" + ] + ], + [ + "versions.yml:md5,4131f39f483637d95446231588add8f1" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-16T14:47:06.459753683" + } +} \ No newline at end of file From 9f3a0d68ecc645c9d6171c52f52bf229d71f2518 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:43:16 +0000 Subject: [PATCH 213/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 690024b2c..f4d5e6fd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `QC_WORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) - Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/577) +- Add nf-test to local module: `STARFUSION`. [#585](https://github.com/nf-core/rnafusion/pull/585) ### Changed From dbb45c91eeb1d52d9e63d93a7b0d5e515bf5c8ec Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 17 Dec 2024 13:42:01 +0100 Subject: [PATCH 214/887] fix test config resources --- conf/test.config | 9 +++++++++ conf/test_build.config | 9 +++++++++ conf/test_cosmic.config | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/conf/test.config b/conf/test.config index 3cafa252b..d042d9239 100644 --- a/conf/test.config +++ b/conf/test.config @@ -17,3 +17,12 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' } + +// Limit and standardize resources for github actions and reproducibility +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} \ No newline at end of file diff --git a/conf/test_build.config b/conf/test_build.config index 616d734f0..1e3245711 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -22,3 +22,12 @@ params { skip_salmon_index = true } + +// Limit and standardize resources for github actions and reproducibility +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} \ No newline at end of file diff --git a/conf/test_cosmic.config b/conf/test_cosmic.config index cf199da4d..7101deb50 100644 --- a/conf/test_cosmic.config +++ b/conf/test_cosmic.config @@ -20,3 +20,12 @@ params { cosmic_username = secrets.COSMIC_USERNAME cosmic_passwd = secrets.COSMIC_PASSWD } + +// Limit and standardize resources for github actions and reproducibility +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} \ No newline at end of file From 4245c543cab4ed66ce60efc737a04455a995e75d Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 17 Dec 2024 13:42:59 +0100 Subject: [PATCH 215/887] add ctatsplicing module --- conf/modules.config | 12 ++ .../ctatsplicing/startocancerintrons/main.nf | 71 +++++++ .../startocancerintrons/tests/main.nf.test | 69 +++++++ .../tests/main.nf.test.snap | 191 ++++++++++++++++++ 4 files changed, 343 insertions(+) create mode 100644 modules/local/ctatsplicing/startocancerintrons/main.nf create mode 100644 modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test create mode 100644 modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index 264d1c87e..9a72b994e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -49,6 +49,18 @@ process { ] } + withName: 'CTATSPLICING_STARTOCANCERINTRONS' { + ext.args = {[ + bam ? "--vis" : "", + "--sample_name ${meta.id}", + ].join(" ")} + publishDir = [ + path: { "${params.outdir}/ctat_splicing" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'ENSEMBL_DOWNLOAD' { publishDir = [ path: { "${params.genomes_base}/ensembl" }, diff --git a/modules/local/ctatsplicing/startocancerintrons/main.nf b/modules/local/ctatsplicing/startocancerintrons/main.nf new file mode 100644 index 000000000..ba7a61102 --- /dev/null +++ b/modules/local/ctatsplicing/startocancerintrons/main.nf @@ -0,0 +1,71 @@ +process CTATSPLICING_STARTOCANCERINTRONS { + tag "$meta.id" + label 'process_single' + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://data.broadinstitute.org/Trinity/CTAT_SINGULARITY/CTAT-SPLICING/ctat_splicing.v0.0.2.simg' : + 'docker.io/trinityctat/ctat_splicing:0.0.2' }" + + input: + tuple val(meta), path(sj), path(junction), path(bam), path(bai) + tuple val(meta2), path(genome_lib) + + output: + tuple val(meta), path("*.cancer_intron_reads.sorted.bam") , emit: cancer_introns_sorted_bam + tuple val(meta), path("*.cancer_intron_reads.sorted.bam.bai") , emit: cancer_introns_sorted_bai + tuple val(meta), path("*.gene_reads.sorted.sifted.bam") , emit: gene_reads_sorted_bam + tuple val(meta), path("*.gene_reads.sorted.sifted.bam.bai") , emit: gene_reads_sorted_bai + tuple val(meta), path("*.cancer.introns") , emit: cancer_introns + tuple val(meta), path("*.cancer.introns.prelim") , emit: cancer_introns_prelim + tuple val(meta), path("*${prefix}.introns") , emit: introns + tuple val(meta), path("*.introns.for_IGV.bed") , emit: introns_igv_bed, optional: true + tuple val(meta), path("*.ctat-splicing.igv.html") , emit: igv_html, optional: true + tuple val(meta), path("*.igv.tracks") , emit: igv_tracks, optional: true + tuple val(meta), path("*.chckpts") , emit: chckpts + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def bam_arg = bam ? "--bam_file ${bam}" : "" + def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def create_index = bam && !bai ? "samtools index ${bam}" : "" + """ + ${create_index} + /usr/local/src/CTAT-SPLICING/STAR_to_cancer_introns.py \\ + --SJ_tab_file ${sj} \\ + --chimJ_file ${junction} \\ + ${bam_arg} \\ + --output_prefix ${prefix} \\ + --ctat_genome_lib ${genome_lib} \\ + ${args} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ctat-splicing: $VERSION + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def create_igv_files = args.contains("--vis") ? "touch ${prefix}.introns.for_IGV.bed && touch ${prefix}.ctat-splicing.igv.html && touch ${prefix}.igv.tracks" : "" + """ + ${create_igv_files} + touch ${prefix}.cancer_intron_reads.sorted.bam + touch ${prefix}.cancer_intron_reads.sorted.bam.bai + touch ${prefix}.gene_reads.sorted.sifted.bam + touch ${prefix}.gene_reads.sorted.sifted.bam.bai + touch ${prefix}.cancer.introns + touch ${prefix}.cancer.introns.prelim + touch ${prefix}.introns + touch ${prefix}.chckpts + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ctat-splicing: $VERSION + END_VERSIONS + """ +} diff --git a/modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test b/modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test new file mode 100644 index 000000000..dad961c47 --- /dev/null +++ b/modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test @@ -0,0 +1,69 @@ +nextflow_process { + + name "Test Process CTATSPLICING_STARTOCANCERINTRONS" + script "../main.nf" + process "CTATSPLICING_STARTOCANCERINTRONS" + options "-stub" + + test("test without BAM") { + + when { + params { + outdir = "tests/results" + } + process { + """ + input[0] = [ + [id:"test"], + file("test.SJ.out.tab"), + file("test.Chimeric.out.junctions"), + [], + [] + ] + input[1] = [ + [id:"reference"], + file("ctat_genome_lib") + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.findAll { key, value -> !key.isNumber() }).match() } + ) + } + } + + test("test with BAM") { + + when { + params { + outdir = "tests/results" + } + process { + """ + input[0] = [ + [id:"test"], + file("test.SJ.out.tab"), + file("test.Chimeric.out.junctions"), + file("test.Aligned.sortedByCoord.out.bam"), + [] + ] + input[1] = [ + [id:"reference"], + file("ctat_genome_lib") + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.findAll { key, value -> !key.isNumber() }).match() } + ) + } + } +} diff --git a/modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test.snap b/modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test.snap new file mode 100644 index 000000000..b0ee34166 --- /dev/null +++ b/modules/local/ctatsplicing/startocancerintrons/tests/main.nf.test.snap @@ -0,0 +1,191 @@ +{ + "test without BAM": { + "content": [ + { + "cancer_introns": [ + [ + { + "id": "test" + }, + "test.cancer.introns:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cancer_introns_prelim": [ + [ + { + "id": "test" + }, + "test.cancer.introns.prelim:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cancer_introns_sorted_bai": [ + [ + { + "id": "test" + }, + "test.cancer_intron_reads.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cancer_introns_sorted_bam": [ + [ + { + "id": "test" + }, + "test.cancer_intron_reads.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "chckpts": [ + [ + { + "id": "test" + }, + "test.chckpts:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gene_reads_sorted_bai": [ + [ + { + "id": "test" + }, + "test.gene_reads.sorted.sifted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gene_reads_sorted_bam": [ + [ + { + "id": "test" + }, + "test.gene_reads.sorted.sifted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "igv_html": [ + + ], + "igv_tracks": [ + + ], + "introns": [ + [ + { + "id": "test" + }, + "test.introns:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "introns_igv_bed": [ + + ], + "versions": [ + "versions.yml:md5,fcf861a15f9951342a874b6bc476a37e" + ] + } + ], + "meta": { + "nf-test": "0.9.1", + "nextflow": "24.10.1" + }, + "timestamp": "2024-12-17T13:35:13.723215847" + }, + "test with BAM": { + "content": [ + { + "cancer_introns": [ + [ + { + "id": "test" + }, + "test.cancer.introns:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cancer_introns_prelim": [ + [ + { + "id": "test" + }, + "test.cancer.introns.prelim:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cancer_introns_sorted_bai": [ + [ + { + "id": "test" + }, + "test.cancer_intron_reads.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cancer_introns_sorted_bam": [ + [ + { + "id": "test" + }, + "test.cancer_intron_reads.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "chckpts": [ + [ + { + "id": "test" + }, + "test.chckpts:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gene_reads_sorted_bai": [ + [ + { + "id": "test" + }, + "test.gene_reads.sorted.sifted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gene_reads_sorted_bam": [ + [ + { + "id": "test" + }, + "test.gene_reads.sorted.sifted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "igv_html": [ + [ + { + "id": "test" + }, + "test.ctat-splicing.igv.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "igv_tracks": [ + [ + { + "id": "test" + }, + "test.igv.tracks:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "introns": [ + [ + { + "id": "test" + }, + "test.introns:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "introns_igv_bed": [ + [ + { + "id": "test" + }, + "test.introns.for_IGV.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,fcf861a15f9951342a874b6bc476a37e" + ] + } + ], + "meta": { + "nf-test": "0.9.1", + "nextflow": "24.10.1" + }, + "timestamp": "2024-12-17T13:33:27.36677449" + } +} \ No newline at end of file From fa128b6805a6884a7ff29fbe30159e8fa229a5a3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Dec 2024 14:16:28 +0100 Subject: [PATCH 216/887] avoid using meta for remapping --- subworkflows/local/arriba_workflow.nf | 2 +- subworkflows/local/starfusion_workflow.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 5575f5c0d..10ddc16ab 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -33,7 +33,7 @@ workflow ARRIBA_WORKFLOW { ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions - ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ meta, file -> return file} + ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ it -> it[1]} } if (params.cram.contains('arriba') ){ diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index d6a0668a1..f70396f58 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -21,7 +21,7 @@ workflow STARFUSION_WORKFLOW { if ((params.starfusion || params.all || params.stringtie) && !params.fusioninspector_only) { if (params.starfusion_fusions){ ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) - .map { meta, reads, fusions -> [ meta, fusions ] } + .map { it -> [ it[0], it[2] ] } } else { STAR_FOR_STARFUSION( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) @@ -51,7 +51,7 @@ workflow STARFUSION_WORKFLOW { } else { ch_starfusion_fusions = reads.combine(Channel.value(file(ch_dummy_file, checkIfExists:true))) - .map { meta, reads, fusions -> [ meta, fusions ] } + .map { it -> [ it[0], it[2] ] } ch_star_stats = Channel.empty() ch_star_gene_count = Channel.empty() } From f0259453d818c16dd2a3b40660745d5bffb034c5 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 17 Dec 2024 14:18:55 +0100 Subject: [PATCH 217/887] implement ctatsplicing --- conf/modules.config | 2 +- .../ctatsplicing/startocancerintrons/main.nf | 4 +- nextflow.config | 1 + nextflow_schema.json | 5 ++ .../local/ctatsplicing_workflow/main.nf | 31 ++++++++++ subworkflows/local/starfusion_workflow.nf | 25 +++++--- workflows/rnafusion.nf | 57 +++++++++++-------- 7 files changed, 91 insertions(+), 34 deletions(-) create mode 100644 subworkflows/local/ctatsplicing_workflow/main.nf diff --git a/conf/modules.config b/conf/modules.config index 9a72b994e..ed6bc1eba 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -55,7 +55,7 @@ process { "--sample_name ${meta.id}", ].join(" ")} publishDir = [ - path: { "${params.outdir}/ctat_splicing" }, + path: { "${params.outdir}/ctatsplicing" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/modules/local/ctatsplicing/startocancerintrons/main.nf b/modules/local/ctatsplicing/startocancerintrons/main.nf index ba7a61102..30fd5c3f2 100644 --- a/modules/local/ctatsplicing/startocancerintrons/main.nf +++ b/modules/local/ctatsplicing/startocancerintrons/main.nf @@ -7,7 +7,7 @@ process CTATSPLICING_STARTOCANCERINTRONS { 'docker.io/trinityctat/ctat_splicing:0.0.2' }" input: - tuple val(meta), path(sj), path(junction), path(bam), path(bai) + tuple val(meta), path(split_junction), path(junction), path(bam), path(bai) tuple val(meta2), path(genome_lib) output: @@ -33,7 +33,7 @@ process CTATSPLICING_STARTOCANCERINTRONS { """ ${create_index} /usr/local/src/CTAT-SPLICING/STAR_to_cancer_introns.py \\ - --SJ_tab_file ${sj} \\ + --SJ_tab_file ${split_junction} \\ --chimJ_file ${junction} \\ ${bam_arg} \\ --output_prefix ${prefix} \\ diff --git a/nextflow.config b/nextflow.config index d436182c4..46c2b5175 100644 --- a/nextflow.config +++ b/nextflow.config @@ -61,6 +61,7 @@ params { // Enable or disable tools all = false arriba = false + ctatsplicing = false fusioncatcher = false starindex = false starfusion = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 017a19fb8..c8618561b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -143,6 +143,11 @@ "fa_icon": "far fa-file-code", "description": "Path to arriba output" }, + "ctatsplicing": { + "type": "boolean", + "fa_icon": "far fa-file-code", + "description": "Build or run arriba CTAT-SPLICING" + }, "ensembl_ref": { "type": "string", "fa_icon": "far fa-file-code", diff --git a/subworkflows/local/ctatsplicing_workflow/main.nf b/subworkflows/local/ctatsplicing_workflow/main.nf new file mode 100644 index 000000000..a1516397e --- /dev/null +++ b/subworkflows/local/ctatsplicing_workflow/main.nf @@ -0,0 +1,31 @@ +include { CTATSPLICING_STARTOCANCERINTRONS } from '../../../modules/local/ctatsplicing/startocancerintrons' + +workflow CTATSPLICING_WORKFLOW { + take: + split_junctions // [ val(meta), path(split_junctions.SJ.out.tab) ] + junctions // [ val(meta), path(junctions.Chimeric.out.junction) ] + aligned_bams // [ val(meta), path(aligned_bams.Aligned.sortedByCoord.out.bam) ] + ctat_genome_lib // [ val(meta2), path(path/to/ctat_genome_lib) ] + + main: + def ch_versions = Channel.empty() + + if (params.ctatsplicing || params.all) { + def ch_ctatsplicing_input = split_junctions + .join(junctions, failOnMismatch:true, failOnDuplicate:true) + .join(aligned_bams, failOnMismatch:true, failOnDuplicate:true) + .map { meta, split_junction, junction, bam -> + [ meta, split_junction, junction, bam, [] ] + } + + CTATSPLICING_STARTOCANCERINTRONS( + ch_ctatsplicing_input, + ctat_genome_lib + ) + + } + + emit: + versions = ch_versions +} + diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index de99d8e51..8a9340da0 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -10,15 +10,20 @@ workflow STARFUSION_WORKFLOW { ch_chrgtf ch_starindex_ref ch_fasta + ch_starfusion_ref main: - ch_versions = Channel.empty() - ch_align = Channel.empty() - bam_sorted_indexed = Channel.empty() + def ch_versions = Channel.empty() + def ch_align = Channel.empty() + def ch_starfusion_fusions = Channel.empty() + def bam_sorted_indexed = Channel.empty() + def ch_bam_align_sorted = Channel.empty() + def ch_split_junctions = Channel.empty() + def ch_junctions = Channel.empty() ch_dummy_file = file("$baseDir/assets/dummy_file_starfusion.txt", checkIfExists: true) - if ((params.starfusion || params.all || params.stringtie) && !params.fusioninspector_only) { + if ((params.starfusion || params.all || params.stringtie || params.ctatsplicing) && !params.fusioninspector_only) { if (params.starfusion_fusions){ ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) .map { meta, reads, fusions -> [ meta, fusions ] } @@ -32,6 +37,10 @@ workflow STARFUSION_WORKFLOW { bam_sorted_indexed = STAR_FOR_STARFUSION.out.bam_sorted.join(SAMTOOLS_INDEX_FOR_STARFUSION.out.bai) reads_junction = reads.join(STAR_FOR_STARFUSION.out.junction ) + ch_bam_align_sorted = STAR_FOR_STARFUSION.out.bam_sorted_aligned + ch_split_junctions = STAR_FOR_STARFUSION.out.spl_junc_tab + ch_junctions = STAR_FOR_STARFUSION.out.junction + if (params.cram.contains('starfusion')){ SAMTOOLS_VIEW_FOR_STARFUSION (bam_sorted_indexed, ch_fasta, [] ) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_STARFUSION.out.versions) @@ -39,8 +48,8 @@ workflow STARFUSION_WORKFLOW { SAMTOOLS_INDEX_FOR_STARFUSION_CRAM (SAMTOOLS_VIEW_FOR_STARFUSION.out.cram) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION_CRAM.out.versions) } - if (params.starfusion || params.all){ - STARFUSION( reads_junction, params.starfusion_ref) + if (params.starfusion || params.all || params.ctatsplicing){ + STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) ch_versions = ch_versions.mix(STARFUSION.out.versions) ch_starfusion_fusions = STARFUSION.out.fusions } @@ -61,7 +70,9 @@ workflow STARFUSION_WORKFLOW { star_gene_count = ch_star_gene_count ch_bam_sorted = ch_align.ifEmpty([[],[]]) ch_bam_sorted_indexed = bam_sorted_indexed.ifEmpty([[],[],[]]) + bam_align_sorted = ch_bam_align_sorted + split_junctions = ch_split_junctions + junctions = ch_junctions versions = ch_versions - } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 0c8a6e5fb..2f1bbfab2 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -6,6 +6,7 @@ include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' +include { CTATSPLICING_WORKFLOW } from '../subworkflows/local/ctatsplicing_workflow' include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow/main' include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' @@ -22,27 +23,6 @@ include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pi include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' -ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() -ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() -ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() -ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() -ch_adapter_fastp = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta, checkIfExists: true) : Channel.empty() -ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() -ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() -ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() -ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() -ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() -ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() -ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() -ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() - - - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -56,8 +36,29 @@ workflow RNAFUSION { main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + def ch_versions = Channel.empty() + def ch_multiqc_files = Channel.empty() + + def ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() + def ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() + def ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() + def ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() + def ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() + def ch_adapter_fastp = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta, checkIfExists: true) : Channel.empty() + def ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() + def ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() + def ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() + def ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() + def ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() + def ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { it -> [[id:it.Name], it] }.collect() + def ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { it -> [[id:it.Name], it] }.collect() + def ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() + def ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() + def ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.Name], it] }.collect() + def ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() + def ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() + def ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { it -> [[id:it.name], it]}.collect() + // // MODULE: Run FastQC // @@ -115,7 +116,8 @@ workflow RNAFUSION { ch_reads_all, ch_chrgtf, ch_starindex_ref, - ch_fasta + ch_fasta, + ch_starfusion_ref ) ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) @@ -145,6 +147,13 @@ workflow RNAFUSION { ) ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) + //Run CTAT-splicing + CTATSPLICING_WORKFLOW( + STARFUSION_WORKFLOW.out.split_junctions, + STARFUSION_WORKFLOW.out.junctions, + STARFUSION_WORKFLOW.out.bam_align_sorted, + ch_starfusion_ref + ) //Run fusionInpector FUSIONINSPECTOR_WORKFLOW ( From 3268a455bb633220f33462dbae8c42db0aba9657 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 17 Dec 2024 14:33:47 +0100 Subject: [PATCH 218/887] fix pre-commit --- conf/test.config | 2 +- conf/test_build.config | 2 +- conf/test_cosmic.config | 2 +- subworkflows/local/ctatsplicing_workflow/main.nf | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/test.config b/conf/test.config index d042d9239..b3d325854 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,4 +25,4 @@ process { memory: '15.GB', time: '1.h' ] -} \ No newline at end of file +} diff --git a/conf/test_build.config b/conf/test_build.config index 1e3245711..70c3a4cec 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -30,4 +30,4 @@ process { memory: '15.GB', time: '1.h' ] -} \ No newline at end of file +} diff --git a/conf/test_cosmic.config b/conf/test_cosmic.config index 7101deb50..9cc1bcda9 100644 --- a/conf/test_cosmic.config +++ b/conf/test_cosmic.config @@ -28,4 +28,4 @@ process { memory: '15.GB', time: '1.h' ] -} \ No newline at end of file +} diff --git a/subworkflows/local/ctatsplicing_workflow/main.nf b/subworkflows/local/ctatsplicing_workflow/main.nf index a1516397e..8b279033d 100644 --- a/subworkflows/local/ctatsplicing_workflow/main.nf +++ b/subworkflows/local/ctatsplicing_workflow/main.nf @@ -17,15 +17,15 @@ workflow CTATSPLICING_WORKFLOW { .map { meta, split_junction, junction, bam -> [ meta, split_junction, junction, bam, [] ] } - + CTATSPLICING_STARTOCANCERINTRONS( ch_ctatsplicing_input, ctat_genome_lib ) + ch_versions = ch_versions.mix(CTATSPLICING_STARTOCANCERINTRONS.out.versions.first()) } emit: versions = ch_versions } - From a84033b11302d29381ad6ec4ccf52e52883c0ad7 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Tue, 17 Dec 2024 14:42:25 +0100 Subject: [PATCH 219/887] Update nextflow.config Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 46c2b5175..06a1278f4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -61,7 +61,7 @@ params { // Enable or disable tools all = false arriba = false - ctatsplicing = false + ctatsplicing = false fusioncatcher = false starindex = false starfusion = false From 4247b12844c276dd3200f42e04c61f2583c86e2c Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 17 Dec 2024 14:48:30 +0100 Subject: [PATCH 220/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5c881c3f..2dfa7a79e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) - Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/577) - Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) +- Added a new module `CTATSPLICING_STARTOCANCERINTRONS` [#587](https://github.com/nf-core/rnafusion/pull/587) ### Changed From 5e58fbfb71ee6d39d7b9cfd8841116d40ac4af2b Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:16:29 +0100 Subject: [PATCH 221/887] use docker containers for fusioninspector, fusioncatcher and starfusion --- modules/local/fusioncatcher/detect/main.nf | 3 +-- modules/local/fusioncatcher/download/main.nf | 3 +-- modules/local/fusioninspector/environment.yml | 7 +------ modules/local/fusioninspector/main.nf | 2 +- modules/local/starfusion/build/environment.yml | 7 +------ modules/local/starfusion/build/main.nf | 2 +- modules/local/starfusion/detect/environment.yml | 7 +------ modules/local/starfusion/detect/main.nf | 2 +- modules/local/starfusion/download/environment.yml | 7 +------ modules/local/starfusion/download/main.nf | 2 +- workflows/build_references.nf | 10 +++++----- 11 files changed, 15 insertions(+), 37 deletions(-) diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 9a0928463..d2c6b929c 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -2,8 +2,7 @@ process FUSIONCATCHER { tag "$meta.id" label 'process_high' - conda "${moduleDir}/environment.yml" - container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" + container "docker.io/rannickscilifelab/fusioncatcher:1.34" input: tuple val(meta), path(fasta) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 65a736077..f11491b9a 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -2,8 +2,7 @@ process FUSIONCATCHER_DOWNLOAD { tag "fusioncatcher_download" label 'process_medium' - conda "${moduleDir}/environment.yml" - container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" + container "docker.io/rannickscilifelab/fusioncatcher:1.34" output: path "*" , emit: reference diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index 06a9828af..77187e8bf 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -2,9 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::dfam=3.7 - - bioconda::hmmer=3.4 - - bioconda::star-fusion=1.7.0 - - bioconda::trinity=2.15.2 - - bioconda::samtools=1.21 - - bioconda::star=2.7.11b + - bioconda::star-fusion=1.14.0 diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index ae05ceb42..b91d37c9c 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -3,7 +3,7 @@ process FUSIONINSPECTOR { label 'process_high' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' + container 'trinityctat/fusioninspector:2.10.0' input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index 06a9828af..77187e8bf 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -2,9 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::dfam=3.7 - - bioconda::hmmer=3.4 - - bioconda::star-fusion=1.7.0 - - bioconda::trinity=2.15.2 - - bioconda::samtools=1.21 - - bioconda::star=2.7.11b + - bioconda::star-fusion=1.14.0 diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 6ac3c6942..9212cdafa 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -2,7 +2,7 @@ process STARFUSION_BUILD { tag 'star-fusion' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' + container 'docker.io/trinityctat/starfusion:1.14.0' input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/environment.yml b/modules/local/starfusion/detect/environment.yml index 06a9828af..77187e8bf 100644 --- a/modules/local/starfusion/detect/environment.yml +++ b/modules/local/starfusion/detect/environment.yml @@ -2,9 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::dfam=3.7 - - bioconda::hmmer=3.4 - - bioconda::star-fusion=1.7.0 - - bioconda::trinity=2.15.2 - - bioconda::samtools=1.21 - - bioconda::star=2.7.11b + - bioconda::star-fusion=1.14.0 diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 273967707..94342e99c 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -3,7 +3,7 @@ process STARFUSION { label 'process_high' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' + container 'docker.io/trinityctat/starfusion:1.14.0' input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/environment.yml b/modules/local/starfusion/download/environment.yml index 06a9828af..77187e8bf 100644 --- a/modules/local/starfusion/download/environment.yml +++ b/modules/local/starfusion/download/environment.yml @@ -2,9 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::dfam=3.7 - - bioconda::hmmer=3.4 - - bioconda::star-fusion=1.7.0 - - bioconda::trinity=2.15.2 - - bioconda::samtools=1.21 - - bioconda::star=2.7.11b + - bioconda::star-fusion=1.14.0 diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index d06684869..735764c9a 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -2,7 +2,7 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/dfam_hmmer_samtools_star-fusion_pruned:5694d82381bf039e' + container 'docker.io/trinityctat/starfusion:1.14.0' output: path "ctat_genome_lib_build_dir/*" , emit: reference diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 4886a7bb7..baf2ee267 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -44,14 +44,14 @@ workflow BUILD_REFERENCES { GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.primary_assembly) - RRNATRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf.map{ meta, gtf -> [ gtf ] }) + RRNATRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf.map{ it -> [ it[1] ] }) BEDOPS_CONVERT2BED(RRNATRANSCRIPTS.out.rrna_gtf.map{ it -> [[id:it.Name], it] }) GATK4_BEDTOINTERVALLIST(BEDOPS_CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) - GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ENSEMBL_DOWNLOAD.out.primary_assembly.map { meta, fasta -> [ fasta ] }) + GFFREAD(ENSEMBL_DOWNLOAD.out.gtf, ENSEMBL_DOWNLOAD.out.primary_assembly.map { it -> [ it[1] ] }) if (!params.skip_salmon_index){ - SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + SALMON_INDEX(ENSEMBL_DOWNLOAD.out.primary_assembly.map{ it -> [ it[1] ] }, GFFREAD.out.gffread_fasta.map{ it -> [ it[1] ] }) } if (params.starindex || params.all || params.starfusion || params.arriba) { @@ -75,9 +75,9 @@ workflow BUILD_REFERENCES { } if (params.starfusion_build){ - UCSC_GTFTOGENEPRED(ENSEMBL_DOWNLOAD.out.chrgtf) + UCSC_GTFTOGENEPRED(ENSEMBL_DOWNLOAD.out.gtf) } else { - UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.chrgtf) + UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.gtf) } if (params.fusionreport || params.all) { FUSIONREPORT_DOWNLOAD() From 081249ad824b0a89aeecba37a16dcbc58b00c308 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:45:24 +0100 Subject: [PATCH 222/887] update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5c881c3f..7816df5ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `FUSIONREPORT_DOWNLOAD` [#560](https://github.com/nf-core/rnafusion/pull/560) - Add nf-test to local subworkflow: `QC_WORKFLOW` [#568](https://github.com/nf-core/rnafusion/pull/568) - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) -- Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#572](https://github.com/nf-core/rnafusion/pull/577) +- Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#577](https://github.com/nf-core/rnafusion/pull/577) - Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) ### Changed @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) - Remove double nested folder introduced in [#577](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) +- Use docker.io instead of wave as to keep supporting singularity in the transition period [#588](https://github.com/nf-core/rnafusion/pull/588) ### Fixed From 33f4b57edf548d98fb05b7279dd2f8aab7a57d10 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Dec 2024 16:04:26 +0100 Subject: [PATCH 223/887] revert change --- workflows/build_references.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/build_references.nf b/workflows/build_references.nf index baf2ee267..9f7ce6333 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -55,7 +55,7 @@ workflow BUILD_REFERENCES { } if (params.starindex || params.all || params.starfusion || params.arriba) { - STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) + STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.chrgtf ) } if (params.arriba || params.all) { @@ -68,7 +68,7 @@ workflow BUILD_REFERENCES { if (params.starfusion || params.all) { if (params.starfusion_build){ - STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) + STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.chrgtf ) } else { STARFUSION_DOWNLOAD() } From ff69a60b84d2e4ff2c635e571f78fc08aec77979 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Dec 2024 16:06:40 +0100 Subject: [PATCH 224/887] revert change --- workflows/build_references.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workflows/build_references.nf b/workflows/build_references.nf index 9f7ce6333..3b88a47f9 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -55,7 +55,7 @@ workflow BUILD_REFERENCES { } if (params.starindex || params.all || params.starfusion || params.arriba) { - STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.chrgtf ) + STAR_GENOMEGENERATE( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) } if (params.arriba || params.all) { @@ -68,16 +68,16 @@ workflow BUILD_REFERENCES { if (params.starfusion || params.all) { if (params.starfusion_build){ - STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.chrgtf ) + STARFUSION_BUILD( ENSEMBL_DOWNLOAD.out.primary_assembly, ENSEMBL_DOWNLOAD.out.gtf ) } else { STARFUSION_DOWNLOAD() } } if (params.starfusion_build){ - UCSC_GTFTOGENEPRED(ENSEMBL_DOWNLOAD.out.gtf) + UCSC_GTFTOGENEPRED(ENSEMBL_DOWNLOAD.out.chrgtf) } else { - UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.gtf) + UCSC_GTFTOGENEPRED(STARFUSION_DOWNLOAD.out.chrgtf) } if (params.fusionreport || params.all) { FUSIONREPORT_DOWNLOAD() From 0db19d9301c69e4435c5c6ab9d3409a7165f0628 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 17 Dec 2024 16:11:53 +0100 Subject: [PATCH 225/887] make ctatsplicing possible with arriba input --- conf/modules.config | 16 +++++++++-- nextflow_schema.json | 2 +- subworkflows/local/arriba_workflow/main.nf | 33 +++++++++++++++------- subworkflows/local/starfusion_workflow.nf | 22 ++++++++------- workflows/rnafusion.nf | 11 ++------ 5 files changed, 52 insertions(+), 32 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ed6bc1eba..253d0bf03 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -49,13 +49,25 @@ process { ] } - withName: 'CTATSPLICING_STARTOCANCERINTRONS' { + withName: '.*ARRIBA_WORKFLOW:.*:CTATSPLICING_STARTOCANCERINTRONS' { ext.args = {[ bam ? "--vis" : "", "--sample_name ${meta.id}", ].join(" ")} publishDir = [ - path: { "${params.outdir}/ctatsplicing" }, + path: { "${params.outdir}/ctatsplicing/arriba" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*STARFUSION_WORKFLOW:.*:CTATSPLICING_STARTOCANCERINTRONS' { + ext.args = {[ + bam ? "--vis" : "", + "--sample_name ${meta.id}", + ].join(" ")} + publishDir = [ + path: { "${params.outdir}/ctatsplicing/starfusion" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/nextflow_schema.json b/nextflow_schema.json index c8618561b..f7855d957 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -146,7 +146,7 @@ "ctatsplicing": { "type": "boolean", "fa_icon": "far fa-file-code", - "description": "Build or run arriba CTAT-SPLICING" + "description": "Run CTAT-splicing to detect abberant cancer splicing introns. Needs --arriba and/or --starfusion to run." }, "ensembl_ref": { "type": "string", diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 5f59916a2..5f99ef8e6 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -4,20 +4,24 @@ include { SAMTOOLS_SORT as SAMTOOLS_SORT_FOR_ARRIBA } from '../../../modules/n include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_ARRIBA } from '../../../modules/nf-core/samtools/view/main' include { STAR_ALIGN as STAR_FOR_ARRIBA } from '../../../modules/nf-core/star/align/main' +include { CTATSPLICING_WORKFLOW } from '../ctatsplicing_workflow' + workflow ARRIBA_WORKFLOW { take: - reads // channel [ meta, [ fastqs ] ] - ch_gtf // channel [ meta, path_gtf ] - ch_fasta // channel [ meta, path_fasta ] - ch_starindex_ref // channel [ meta, path_index ] - ch_arriba_ref_blacklist // channel [ meta, path_blacklist ] - ch_arriba_ref_known_fusions // channel [ meta, path_known_fusions ] - ch_arriba_ref_cytobands // channel [ meta, path_cytobands ] - ch_arriba_ref_protein_domains // channel [ meta, path_proteins ] + reads // channel [ meta, [ fastqs ] ] + ch_gtf // channel [ meta, path_gtf ] + ch_fasta // channel [ meta, path_fasta ] + ch_starindex_ref // channel [ meta, path_index ] + ch_arriba_ref_blacklist // channel [ meta, path_blacklist ] + ch_arriba_ref_known_fusions // channel [ meta, path_known_fusions ] + ch_arriba_ref_cytobands // channel [ meta, path_cytobands ] + ch_arriba_ref_protein_domains // channel [ meta, path_proteins ] + ch_starfusion_ref // channel [ meta, path_starfusion_ref ] arriba // boolean all // boolean fusioninspector_only // boolean star_ignore_sjdbgtf // boolean + ctatsplicing // boolean seq_center // string arriba_fusions // path cram // array @@ -25,7 +29,7 @@ workflow ARRIBA_WORKFLOW { main: ch_versions = Channel.empty() ch_cram_index = Channel.empty() - ch_dummy_file = file("$baseDir/assets/dummy_file_arriba.txt", checkIfExists: true) + ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) if (( arriba || all ) && !fusioninspector_only) { @@ -37,9 +41,18 @@ workflow ARRIBA_WORKFLOW { '', seq_center ) - ch_versions = ch_versions.mix(STAR_FOR_ARRIBA.out.versions) + if ( ctatsplicing || all ) { + CTATSPLICING_WORKFLOW( + STAR_FOR_ARRIBA.out.spl_junc_tab, + STAR_FOR_ARRIBA.out.junction, + STAR_FOR_ARRIBA.out.bam_sorted_aligned, + ch_starfusion_ref + ) + ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) + } + if ( arriba_fusions ) { ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index 8a9340da0..2a086ce1d 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -4,6 +4,8 @@ include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_STARFUSION } from '../../mod include { STAR_ALIGN as STAR_FOR_STARFUSION } from '../../modules/nf-core/star/align/main' include { STARFUSION } from '../../modules/local/starfusion/detect/main' +include { CTATSPLICING_WORKFLOW } from './ctatsplicing_workflow' + workflow STARFUSION_WORKFLOW { take: reads @@ -17,13 +19,10 @@ workflow STARFUSION_WORKFLOW { def ch_align = Channel.empty() def ch_starfusion_fusions = Channel.empty() def bam_sorted_indexed = Channel.empty() - def ch_bam_align_sorted = Channel.empty() - def ch_split_junctions = Channel.empty() - def ch_junctions = Channel.empty() ch_dummy_file = file("$baseDir/assets/dummy_file_starfusion.txt", checkIfExists: true) - if ((params.starfusion || params.all || params.stringtie || params.ctatsplicing) && !params.fusioninspector_only) { + if ((params.starfusion || params.all || params.stringtie) && !params.fusioninspector_only) { if (params.starfusion_fusions){ ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) .map { meta, reads, fusions -> [ meta, fusions ] } @@ -37,9 +36,15 @@ workflow STARFUSION_WORKFLOW { bam_sorted_indexed = STAR_FOR_STARFUSION.out.bam_sorted.join(SAMTOOLS_INDEX_FOR_STARFUSION.out.bai) reads_junction = reads.join(STAR_FOR_STARFUSION.out.junction ) - ch_bam_align_sorted = STAR_FOR_STARFUSION.out.bam_sorted_aligned - ch_split_junctions = STAR_FOR_STARFUSION.out.spl_junc_tab - ch_junctions = STAR_FOR_STARFUSION.out.junction + if (params.ctatsplicing || params.all) { + CTATSPLICING_WORKFLOW( + STAR_FOR_STARFUSION.out.spl_junc_tab, + STAR_FOR_STARFUSION.out.junction, + STAR_FOR_STARFUSION.out.bam_sorted_aligned, + ch_starfusion_ref + ) + ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) + } if (params.cram.contains('starfusion')){ SAMTOOLS_VIEW_FOR_STARFUSION (bam_sorted_indexed, ch_fasta, [] ) @@ -70,9 +75,6 @@ workflow STARFUSION_WORKFLOW { star_gene_count = ch_star_gene_count ch_bam_sorted = ch_align.ifEmpty([[],[]]) ch_bam_sorted_indexed = bam_sorted_indexed.ifEmpty([[],[],[]]) - bam_align_sorted = ch_bam_align_sorted - split_junctions = ch_split_junctions - junctions = ch_junctions versions = ch_versions } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 2f1bbfab2..74315e844 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -6,7 +6,6 @@ include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow' include { ARRIBA_WORKFLOW } from '../subworkflows/local/arriba_workflow' include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' -include { CTATSPLICING_WORKFLOW } from '../subworkflows/local/ctatsplicing_workflow' include { STARFUSION_WORKFLOW } from '../subworkflows/local/starfusion_workflow' include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow/main' include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' @@ -100,10 +99,12 @@ workflow RNAFUSION { ch_arriba_ref_known_fusions, ch_arriba_ref_cytobands, ch_arriba_ref_protein_domains, + ch_starfusion_ref, params.arriba, // boolean params.all, // boolean params.fusioninspector_only, // boolean params.star_ignore_sjdbgtf, // boolean + params.ctatsplicing, // boolean params.seq_center ?: '', // string params.arriba_fusions, // path params.cram // array @@ -147,14 +148,6 @@ workflow RNAFUSION { ) ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) - //Run CTAT-splicing - CTATSPLICING_WORKFLOW( - STARFUSION_WORKFLOW.out.split_junctions, - STARFUSION_WORKFLOW.out.junctions, - STARFUSION_WORKFLOW.out.bam_align_sorted, - ch_starfusion_ref - ) - //Run fusionInpector FUSIONINSPECTOR_WORKFLOW ( ch_reads_all, From b7383ebaf52c8a157e365c251e6e120f37746e71 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:08:06 +0100 Subject: [PATCH 226/887] test to see if dependencies are working with starfusion1.14 onluy --- modules/local/fusioninspector/main.nf | 4 +++- modules/local/starfusion/build/main.nf | 4 +++- modules/local/starfusion/detect/main.nf | 4 +++- modules/local/starfusion/download/main.nf | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index b91d37c9c..8745b0e3a 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -3,7 +3,9 @@ process FUSIONINSPECTOR { label 'process_high' conda "${moduleDir}/environment.yml" - container 'trinityctat/fusioninspector:2.10.0' + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': + 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 9212cdafa..15b5517a1 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -2,7 +2,9 @@ process STARFUSION_BUILD { tag 'star-fusion' conda "${moduleDir}/environment.yml" - container 'docker.io/trinityctat/starfusion:1.14.0' + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': + 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 94342e99c..38a881123 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -3,7 +3,9 @@ process STARFUSION { label 'process_high' conda "${moduleDir}/environment.yml" - container 'docker.io/trinityctat/starfusion:1.14.0' + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': + 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 735764c9a..6defb6cdd 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -2,7 +2,9 @@ process STARFUSION_DOWNLOAD { tag 'star-fusion' conda "${moduleDir}/environment.yml" - container 'docker.io/trinityctat/starfusion:1.14.0' + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': + 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" output: path "ctat_genome_lib_build_dir/*" , emit: reference From 17ef23354947b4965c84131f9eb927bc323d1cbc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:49:22 +0100 Subject: [PATCH 227/887] use custom container for fusioncatcher, fix typo --- modules/local/fusioncatcher/detect/main.nf | 3 +- modules/local/fusioncatcher/download/main.nf | 2 +- tests/test_stub.nf.test.snap | 198 ++----------------- workflows/rnafusion.nf | 4 +- 4 files changed, 19 insertions(+), 188 deletions(-) diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 9a0928463..e753ff850 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -3,7 +3,8 @@ process FUSIONCATCHER { label 'process_high' conda "${moduleDir}/environment.yml" - container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" + + container "docker.io/rannickscilifelab/fusioncatcher:1.34" input: tuple val(meta), path(fasta) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 03c0a1f3c..e04c24f6e 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -3,7 +3,7 @@ process FUSIONCATCHER_DOWNLOAD { label 'process_medium' conda "${moduleDir}/environment.yml" - container "community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f" + container "docker.io/rannickscilifelab/fusioncatcher:1.34" input: diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 83c76dd72..e3a8bb73e 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,11 +1,8 @@ { "stub test no fastp trim": { "content": [ - 31, + 20, { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, @@ -19,14 +16,11 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER": { - "fusioncatcher": 1.33 + "fusioncatcher": 1.35 }, "FUSIONCATCHER_BUILD": { "fusioncatcher": "fusioncatcher.py 1.35" }, - "FUSIONREPORT": { - "fusion_report": "2.1.5" - }, "FUSIONREPORT_DOWNLOAD": { "fusion_report": "2.1.5" }, @@ -36,10 +30,6 @@ "GATK4_CREATESEQUENCEDICTIONARY": { "gatk4": "4.6.1.0" }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" - }, "GENCODE_DOWNLOAD": { "wget": null }, @@ -55,59 +45,32 @@ "HGNC_DOWNLOAD": { "wget": null }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SALMON_INDEX": { - "salmon": "1.10.3" - }, - "SALMON_QUANT": { - "salmon": "1.10.3" - }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "SAMTOOLS_INDEX_FOR_STARFUSION": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.7.0" - }, "STARFUSION_BUILD": { "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": "2.7.11b", + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": "2.7.11b", + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": "2.7.11b", + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, - "STRINGTIE_MERGE": { - "stringtie": "2.2.1" - }, - "STRINGTIE_STRINGTIE": { - "stringtie": "2.2.3" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", "fastp", "fastp/test.fastp.html", "fastp/test.fastp.json", @@ -126,32 +89,11 @@ "fusioncatcher/test.fusioncatcher.fusion-genes.txt", "fusioncatcher/test.fusioncatcher.log", "fusioncatcher/test.fusioncatcher.summary.txt", - "fusionreport", - "fusionreport/test", - "fusionreport/test/AAA_BBB.html", - "fusionreport/test/test.fusionreport.tsv", - "fusionreport/test/test.fusionreport_filtered.tsv", - "fusionreport/test/test.fusions.csv", - "fusionreport/test/test.fusions.json", - "fusionreport/test/test_fusionreport_index.html", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "get", "get/rrna.bed", "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", "references", @@ -214,10 +156,6 @@ "references/starfusion", "references/starfusion/ctat_genome_lib_build_dir", "references/starfusion/ref_annot.cdna.fa", - "salmon", - "salmon/test", - "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json", "star_for_arriba", "star_for_arriba/test.Aligned.sortedByCoord.out.bam", "star_for_arriba/test.Aligned.unsort.out.bam", @@ -249,38 +187,23 @@ "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", "star_for_starfusion/test.out.sam", "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", "star_for_starfusion/test.tab", "star_for_starfusion/test.toTranscriptome.out.bam", "star_for_starfusion/test.unmapped_1.fastq.gz", "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv", - "stringtie", - "stringtie/[:]", - "stringtie/[:]/stringtie.merged.gtf", - "stringtie/test.ballgown", - "stringtie/test.coverage.gtf", - "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" + "star_for_starfusion/testXd.out.bam" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-11T12:43:59.534889" + "timestamp": "2024-12-17T16:44:02.121512" }, "stub test with fastp trim": { "content": [ - 31, + 19, { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, @@ -294,14 +217,11 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER": { - "fusioncatcher": 1.33 + "fusioncatcher": 1.35 }, "FUSIONCATCHER_BUILD": { "fusioncatcher": "fusioncatcher.py 1.35" }, - "FUSIONREPORT": { - "fusion_report": "2.1.5" - }, "FUSIONREPORT_DOWNLOAD": { "fusion_report": "2.1.5" }, @@ -311,10 +231,6 @@ "GATK4_CREATESEQUENCEDICTIONARY": { "gatk4": "4.6.1.0" }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" - }, "GENCODE_DOWNLOAD": { "wget": null }, @@ -330,59 +246,27 @@ "HGNC_DOWNLOAD": { "wget": null }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SALMON_INDEX": { - "salmon": "1.10.3" - }, - "SALMON_QUANT": { - "salmon": "1.10.3" - }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "SAMTOOLS_INDEX_FOR_STARFUSION": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.7.0" - }, "STARFUSION_BUILD": { "STAR-Fusion": "1.7.0" }, "STAR_FOR_ARRIBA": { - "star": "2.7.11b", - "samtools": 1.2, - "gawk": "5.1.0" - }, - "STAR_FOR_STARFUSION": { - "star": "2.7.11b", + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": "2.7.11b", + "star": null, "samtools": 1.2, "gawk": "5.1.0" }, - "STRINGTIE_MERGE": { - "stringtie": "2.2.1" - }, - "STRINGTIE_STRINGTIE": { - "stringtie": "2.2.3" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", "fastp", "fastp/test.fastp.html", "fastp/test.fastp.json", @@ -401,32 +285,11 @@ "fusioncatcher/test.fusioncatcher.fusion-genes.txt", "fusioncatcher/test.fusioncatcher.log", "fusioncatcher/test.fusioncatcher.summary.txt", - "fusionreport", - "fusionreport/test", - "fusionreport/test/AAA_BBB.html", - "fusionreport/test/test.fusionreport.tsv", - "fusionreport/test/test.fusionreport_filtered.tsv", - "fusionreport/test/test.fusions.csv", - "fusionreport/test/test.fusions.json", - "fusionreport/test/test_fusionreport_index.html", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "get", "get/rrna.bed", "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", "references", @@ -452,23 +315,6 @@ "references/hgnc", "references/hgnc/HGNC-DB-timestamp.txt", "references/hgnc/hgnc_complete_set.txt", - "references/salmon", - "references/salmon/salmon", - "references/salmon/salmon/complete_ref_lens.bin", - "references/salmon/salmon/ctable.bin", - "references/salmon/salmon/ctg_offsets.bin", - "references/salmon/salmon/duplicate_clusters.tsv", - "references/salmon/salmon/info.json", - "references/salmon/salmon/mphf.bin", - "references/salmon/salmon/pos.bin", - "references/salmon/salmon/pre_indexing.log", - "references/salmon/salmon/rank.bin", - "references/salmon/salmon/refAccumLengths.bin", - "references/salmon/salmon/ref_indexing.log", - "references/salmon/salmon/reflengths.bin", - "references/salmon/salmon/refseq.bin", - "references/salmon/salmon/seq.bin", - "references/salmon/salmon/versionInfo.json", "references/star", "references/star/Genome", "references/star/Log.out", @@ -489,10 +335,6 @@ "references/starfusion", "references/starfusion/ctat_genome_lib_build_dir", "references/starfusion/ref_annot.cdna.fa", - "salmon", - "salmon/test", - "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json", "star_for_arriba", "star_for_arriba/test.Aligned.sortedByCoord.out.bam", "star_for_arriba/test.Aligned.unsort.out.bam", @@ -524,29 +366,17 @@ "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", "star_for_starfusion/test.out.sam", "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", "star_for_starfusion/test.tab", "star_for_starfusion/test.toTranscriptome.out.bam", "star_for_starfusion/test.unmapped_1.fastq.gz", "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv", - "stringtie", - "stringtie/[:]", - "stringtie/[:]/stringtie.merged.gtf", - "stringtie/test.ballgown", - "stringtie/test.coverage.gtf", - "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" + "star_for_starfusion/testXd.out.bam" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-11T12:40:22.066494" + "timestamp": "2024-12-17T16:42:11.182735" } -} +} \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index d992bf58d..91742e1bc 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -90,7 +90,7 @@ workflow RNAFUSION { BUILD_REFERENCES.out.ch_arriba_ref_blacklist, BUILD_REFERENCES.out.ch_arriba_ref_cytobands, BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, - BUILD_REFERENCES.out.ch_arriba_ref_protein_domains + BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, params.arriba, // boolean params.all, // boolean params.fusioninspector_only, // boolean @@ -139,7 +139,7 @@ workflow RNAFUSION { - //Run fusionInpector + //Run fusionInspector FUSIONINSPECTOR_WORKFLOW ( ch_reads, FUSIONREPORT_WORKFLOW.out.fusion_list, From a67cc0f6f14d6905f9d18a861ef82fef4e08975d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Dec 2024 09:51:42 +0100 Subject: [PATCH 228/887] add dependencies explicitly --- modules/local/starfusion/build/environment.yml | 6 ++++++ modules/local/starfusion/build/main.nf | 4 ++-- modules/local/starfusion/detect/environment.yml | 6 ++++++ modules/local/starfusion/detect/main.nf | 4 ++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index 77187e8bf..eacee484a 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -2,4 +2,10 @@ channels: - conda-forge - bioconda dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::minimap2=2.28 + - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 + - bioconda::star=2.7.11a + - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 15b5517a1..05ca30895 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -3,8 +3,8 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': - 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f8/f804c086cee338c315fbc51faf0c37de360b047b47c33388716962eb3467b087/data': + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/environment.yml b/modules/local/starfusion/detect/environment.yml index 77187e8bf..eacee484a 100644 --- a/modules/local/starfusion/detect/environment.yml +++ b/modules/local/starfusion/detect/environment.yml @@ -2,4 +2,10 @@ channels: - conda-forge - bioconda dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::minimap2=2.28 + - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 + - bioconda::star=2.7.11a + - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 38a881123..84a57d21f 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -4,8 +4,8 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': - 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f8/f804c086cee338c315fbc51faf0c37de360b047b47c33388716962eb3467b087/data': + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" input: tuple val(meta), path(reads), path(junction) From bf05cb766954979dd741a315c2018585df9fb5d0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Dec 2024 14:52:16 +0100 Subject: [PATCH 229/887] update bin path --- modules/local/starfusion/build/main.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 05ca30895..47b881c00 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -14,7 +14,6 @@ process STARFUSION_BUILD { path "*" , emit: reference script: - def binPath = (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) ? "prep_genome_lib.pl" : "/usr/local/src/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl" """ export TMPDIR=/tmp wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam34.0/Pfam-A.hmm.gz --no-check-certificate @@ -26,7 +25,7 @@ process STARFUSION_BUILD { wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m --no-check-certificate wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3p --no-check-certificate gunzip Pfam-A.hmm.gz && hmmpress Pfam-A.hmm - $binPath \\ + prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ --annot_filter_rule AnnotFilterRule.pm \\ From 235a7529b6e93db0d2553a86805a7a14c3ba9761 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:47:49 +0100 Subject: [PATCH 230/887] bin path to prep_genome_lib not working with singularity wave container, reverting to galaxy and specifying path --- modules/local/starfusion/build/main.nf | 5 +++-- modules/local/starfusion/detect/main.nf | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 47b881c00..38d278326 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -3,7 +3,7 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f8/f804c086cee338c315fbc51faf0c37de360b047b47c33388716962eb3467b087/data': + 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" input: @@ -14,6 +14,7 @@ process STARFUSION_BUILD { path "*" , emit: reference script: + def binPath = (workflow.profile.tokenize(',').intersect(['singularity']).size() >= 1) ? "/usr/local/src/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl" : "prep_genome_lib.pl" """ export TMPDIR=/tmp wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam34.0/Pfam-A.hmm.gz --no-check-certificate @@ -25,7 +26,7 @@ process STARFUSION_BUILD { wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m --no-check-certificate wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3p --no-check-certificate gunzip Pfam-A.hmm.gz && hmmpress Pfam-A.hmm - prep_genome_lib.pl \\ + $binPath \\ --genome_fa $fasta \\ --gtf $gtf \\ --annot_filter_rule AnnotFilterRule.pm \\ diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 84a57d21f..c95e39265 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -4,7 +4,7 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f8/f804c086cee338c315fbc51faf0c37de360b047b47c33388716962eb3467b087/data': + 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" input: From a0698b1f08e0643283e6a4bb80633098aca7e408 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:17:21 +0100 Subject: [PATCH 231/887] propagate container of starfusion to fusioninspector --- modules/local/fusioninspector/environment.yml | 6 ++++++ modules/local/fusioninspector/main.nf | 4 ++-- modules/local/starfusion/build/environment.yml | 2 +- modules/local/starfusion/detect/environment.yml | 2 +- modules/local/starfusion/download/environment.yml | 6 ++++++ modules/local/starfusion/download/main.nf | 4 ++-- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index 77187e8bf..757544ca1 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -2,4 +2,10 @@ channels: - conda-forge - bioconda dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::minimap2=2.28 + - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 + - bioconda::star=2.7.9 + - bioconda::trinity=2.8.5 diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 8745b0e3a..53a0bb45e 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': - 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" + 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index eacee484a..757544ca1 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -7,5 +7,5 @@ dependencies: - bioconda::minimap2=2.28 - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.11a + - bioconda::star=2.7.9 - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/detect/environment.yml b/modules/local/starfusion/detect/environment.yml index eacee484a..757544ca1 100644 --- a/modules/local/starfusion/detect/environment.yml +++ b/modules/local/starfusion/detect/environment.yml @@ -7,5 +7,5 @@ dependencies: - bioconda::minimap2=2.28 - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.11a + - bioconda::star=2.7.9 - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/download/environment.yml b/modules/local/starfusion/download/environment.yml index 77187e8bf..757544ca1 100644 --- a/modules/local/starfusion/download/environment.yml +++ b/modules/local/starfusion/download/environment.yml @@ -2,4 +2,10 @@ channels: - conda-forge - bioconda dependencies: + - bioconda::dfam=3.7 + - bioconda::hmmer=3.4 + - bioconda::minimap2=2.28 + - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 + - bioconda::star=2.7.9 + - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 6defb6cdd..19cad44bc 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -3,8 +3,8 @@ process STARFUSION_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f0/f0bf770bcc7a7af4c9b7a83a88a191bb9e9875759e1985030268df9ffa27dde6/data': - 'community.wave.seqera.io/library/star-fusion:4d0a3a362520dfa6'}" + 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" output: path "ctat_genome_lib_build_dir/*" , emit: reference From b2a075bc0e0f43ac296685b605e2f56e0322265f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:19:47 +0100 Subject: [PATCH 232/887] update star --- modules/local/fusioninspector/environment.yml | 2 +- modules/local/starfusion/build/environment.yml | 2 +- modules/local/starfusion/detect/environment.yml | 2 +- modules/local/starfusion/download/environment.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index 757544ca1..f5d21d5a8 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -7,5 +7,5 @@ dependencies: - bioconda::minimap2=2.28 - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.9 + - bioconda::star=2.7.11b - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index 757544ca1..f5d21d5a8 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -7,5 +7,5 @@ dependencies: - bioconda::minimap2=2.28 - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.9 + - bioconda::star=2.7.11b - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/detect/environment.yml b/modules/local/starfusion/detect/environment.yml index 757544ca1..f5d21d5a8 100644 --- a/modules/local/starfusion/detect/environment.yml +++ b/modules/local/starfusion/detect/environment.yml @@ -7,5 +7,5 @@ dependencies: - bioconda::minimap2=2.28 - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.9 + - bioconda::star=2.7.11b - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/download/environment.yml b/modules/local/starfusion/download/environment.yml index 757544ca1..f5d21d5a8 100644 --- a/modules/local/starfusion/download/environment.yml +++ b/modules/local/starfusion/download/environment.yml @@ -7,5 +7,5 @@ dependencies: - bioconda::minimap2=2.28 - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.9 + - bioconda::star=2.7.11b - bioconda::trinity=2.8.5 From 853e48d9e9ca66aac81fe1ba6d78f65f599802bc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:22:22 +0100 Subject: [PATCH 233/887] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7816df5ac..b281d82f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove local module `RRNA_TRANSCRIPTS` (replaced by nf-core module) [#541](https://github.com/nf-core/rnafusion/pull/541) - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) - Remove double nested folder introduced in [#577](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) -- Use docker.io instead of wave as to keep supporting singularity in the transition period [#588](https://github.com/nf-core/rnafusion/pull/588) +- Use docker.io and galaxy containers for fusioncatcher and starfusion (incl. fusioninspector) instead of wave as they are not functional on wave [#588](https://github.com/nf-core/rnafusion/pull/588) ### Fixed From 9cad032e4a706c2a79dca951a6361a348bff2f1d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:23:45 +0100 Subject: [PATCH 234/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b281d82f0..1d400fa2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Allow fastq files without a dot before .fn(.gz)/.fastq(.gz) files [#548](https://github.com/nf-core/rnafusion/pull/548) - Remove double nested folder introduced in [#577](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) - Use docker.io and galaxy containers for fusioncatcher and starfusion (incl. fusioninspector) instead of wave as they are not functional on wave [#588](https://github.com/nf-core/rnafusion/pull/588) +- Update STAR-Fusion to 1.14 [#588](https://github.com/nf-core/rnafusion/pull/588) ### Fixed From f2b5ed59d611a9340225a1e436c4bf6ad35d393f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:14:20 +0000 Subject: [PATCH 235/887] fix: update starfusion container declaration to latest nf-core standards --- modules/local/starfusion/build/main.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 484389b12..becd98d7c 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -3,7 +3,9 @@ process STARFUSION_BUILD { label 'process_high' conda "${moduleDir}/environment.yml" - container 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086' + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/09/0941210949303990f23c63831c7f23ceec099d52ffbe5f1ac2152964d328747e/data': + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086' }" input: tuple val(meta), path(fasta) From 8556d5cb0d74ba74c13930caf6e00c1732d4f977 Mon Sep 17 00:00:00 2001 From: Alan M Date: Wed, 18 Dec 2024 21:46:58 +0100 Subject: [PATCH 236/887] updated test --- modules/local/fusioncatcher/detect/main.nf | 3 +- .../local/fusioncatcher_workflow/main.nf | 17 ++-- .../fusioncatcher_workflow/tests/main.nf.test | 3 +- .../tests/main.nf.test.snap | 6 +- tests/nextflow.config | 2 +- tests/test_build.nf.test.snap | 47 +++------- tests/test_cosmic.nf.test.snap | 94 +++++++++++++++++++ workflows/rnafusion.nf | 8 +- 8 files changed, 132 insertions(+), 48 deletions(-) create mode 100644 tests/test_cosmic.nf.test.snap diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index c7ba7bfb4..0fef68aa9 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -1,4 +1,4 @@ -process FUSIONCATCHER { +process FUSIONCATCHER_DETECT { tag "$meta.id" label 'process_high' @@ -21,7 +21,6 @@ process FUSIONCATCHER { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def reads = fastqs.toString().replace(" ", ",") def single_end = meta.single_end ? "--single-end" : "" """ fusioncatcher.py \\ diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf index 3bf7c9e9a..fd9ce34b9 100644 --- a/subworkflows/local/fusioncatcher_workflow/main.nf +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -1,4 +1,9 @@ -include { FUSIONCATCHER } from '../../../modules/local/fusioncatcher/detect/main' +include { FUSIONCATCHER_DETECT } from '../../../modules/local/fusioncatcher/detect/main' + +// TODO: Remove fusioncatcher_fusions as parameter. +// TODO: remove dummy file. Work with Channel.empty() +// TODO: if the files were already produced and the user want to skip the module because of this, they should be taken them from the sample sheet +// TODO: harmonize `run_fusioncatcher` and `fusioncatcher_only` parameters at main workflow level to activate/skip this one. workflow FUSIONCATCHER_WORKFLOW { take: @@ -20,12 +25,12 @@ workflow FUSIONCATCHER_WORKFLOW { .map { meta, reads, fusions -> [ meta, fusions ] } } else { - FUSIONCATCHER ( + FUSIONCATCHER_DETECT ( reads, fusioncatcher_ref ) - ch_fusioncatcher_fusions = FUSIONCATCHER.out.fusions - ch_versions = ch_versions.mix(FUSIONCATCHER.out.versions) + ch_fusioncatcher_fusions = FUSIONCATCHER_DETECT.out.fusions + ch_versions = ch_versions.mix(FUSIONCATCHER_DETECT.out.versions) } } else { @@ -34,7 +39,7 @@ workflow FUSIONCATCHER_WORKFLOW { } emit: - fusions = ch_fusioncatcher_fusions - versions = ch_versions + fusions = ch_fusioncatcher_fusions // channel [ meta, fusions ] + versions = ch_versions // channel [ versions ] } diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test index 89d2f78ad..d864b252c 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -21,6 +21,7 @@ nextflow_workflow { """ } } + } when { workflow { @@ -36,7 +37,7 @@ nextflow_workflow { ] ) // ch_references - input[1] = Channel.fromPath("/scratch/moebbs/NEXTFLOW_CODE/reference_rnafusion/human_v102").map{ [ [id: "human_v102"], it] } //FUSIONCATCHER_DOWNLOAD.out.reference + input[1] = FUSIONCATCHER_DOWNLOAD.out.reference // fusioncatcher (boolean) input[2] = true diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap index 522bc131b..ae57fe642 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,38af82f57bcacbd86c21109a3d425e62" + "versions.yml:md5,6462518e02774293fa221cead8373305" ], "fusions": [ [ @@ -24,7 +24,7 @@ ] ], "versions": [ - "versions.yml:md5,38af82f57bcacbd86c21109a3d425e62" + "versions.yml:md5,6462518e02774293fa221cead8373305" ] } ], @@ -32,6 +32,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.0" }, - "timestamp": "2024-12-11T19:59:17.754866" + "timestamp": "2024-12-18T21:26:47.477736" } } \ No newline at end of file diff --git a/tests/nextflow.config b/tests/nextflow.config index c3f050dcb..abb1ba9c1 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -3,6 +3,6 @@ process { resourceLimits = [ cpus: 4, memory: '15.GB', - time: '1.h' + time: '4.h' ] } diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 16b6c0079..ec588ad23 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -2,46 +2,25 @@ "test_build": { "content": [ [ - "bedops", - "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", - "gffread", - "gffread/Homo_sapiens.GRCh38.102.fasta", + "fastqc", + "fastqc/test_1_fastqc.html", + "fastqc/test_1_fastqc.zip", + "fastqc/test_2_fastqc.html", + "fastqc/test_2_fastqc.zip", "pipeline_info", - "references", - "references/ensembl", - "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", - "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", - "references/ensembl/Homo_sapiens.GRCh38.102.genepred", - "references/ensembl/Homo_sapiens.GRCh38.102.gtf", - "references/ensembl/Homo_sapiens.GRCh38.102.refflat", - "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "rrnatranscripts", - "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" ], [ - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,5bc3ccc76735ae46699a75269f0ea65b", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,092f1bf29fce906ff7b5ece02b4b21c8", - "Homo_sapiens.GRCh38.102.fasta:md5,d1f17b045dc60c49f2cc29e30006afc0", - "Homo_sapiens.GRCh38.102.chr.gtf:md5,0069687307852c63596b4d2ebdbbaf0c", - "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d527f3eb6b664020cf4d882b5820056f", - "Homo_sapiens.GRCh38.102.genepred:md5,59c577ca4ab033c0ce1feac1e387bcab", - "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", - "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,0abf61877f65247b15c438d605d85599", - "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", - "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,744bf505deb50837b15441e808cad345" + "test_1_fastqc.html:md5,fce82f01594d12b109776ced37ec0739", + "test_1_fastqc.zip:md5,fd0eae421abf76c38f60656bc0fcf5cf", + "test_2_fastqc.html:md5,40f5f42c62a0e36def4fc3d3c48089cd", + "test_2_fastqc.zip:md5,1aaf903d6ea3957abe6f03ad832f82fa" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nf-test": "0.9.2", + "nextflow": "24.10.0" }, - "timestamp": "2024-12-09T13:33:28.517098377" + "timestamp": "2024-12-18T21:05:30.032816" } } \ No newline at end of file diff --git a/tests/test_cosmic.nf.test.snap b/tests/test_cosmic.nf.test.snap new file mode 100644 index 000000000..fa74fd3b5 --- /dev/null +++ b/tests/test_cosmic.nf.test.snap @@ -0,0 +1,94 @@ +{ + "test cosmic no fastp trim": { + "content": [ + 1, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test_1_fastqc.html", + "fastqc/test_1_fastqc.zip", + "fastqc/test_2_fastqc.html", + "fastqc/test_2_fastqc.zip", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + ], + [ + "test_1_fastqc.html:md5,fce82f01594d12b109776ced37ec0739", + "test_1_fastqc.zip:md5,166d13bbf5ebfcb24eb30c78b129a172", + "test_2_fastqc.html:md5,40f5f42c62a0e36def4fc3d3c48089cd", + "test_2_fastqc.zip:md5,4747768318b29ce4effe6c572ccbc36c" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.0" + }, + "timestamp": "2024-12-18T21:06:31.911972" + }, + "test cosmic with fastp trim": { + "content": [ + 3, + { + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test_1_fastqc.html", + "fastqc/test_1_fastqc.zip", + "fastqc/test_2_fastqc.html", + "fastqc/test_2_fastqc.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed_1_fastqc.html", + "fastqc_for_fastp/test_trimmed_1_fastqc.zip", + "fastqc_for_fastp/test_trimmed_2_fastqc.html", + "fastqc_for_fastp/test_trimmed_2_fastqc.zip", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + ], + [ + "test.fastp.html:md5,d26a7f988fd5ed667832d391ab06e202", + "test.fastp.json:md5,ebf549d5793aa40efcd9e1ca41504f26", + "test.fastp.log:md5,1c04b14e212aac5ace51f9bd25859f23", + "test_1.fastp.fastq.gz:md5,2a5519a03fb226ae2379b1150b02ff0b", + "test_2.fastp.fastq.gz:md5,4b8d3865b857e6bfae0035a45b2cdc27", + "test_1_fastqc.html:md5,fce82f01594d12b109776ced37ec0739", + "test_1_fastqc.zip:md5,f9e7e4dbf71703d98214cfd5cb79ee07", + "test_2_fastqc.html:md5,40f5f42c62a0e36def4fc3d3c48089cd", + "test_2_fastqc.zip:md5,7428e5d3c26f0934c75b15de29d6af5c", + "test_trimmed_1_fastqc.html:md5,2c2256226962e9be8c20e5720b8a51ab", + "test_trimmed_1_fastqc.zip:md5,3b8731204e07bfe7a6ecce66ba8617db", + "test_trimmed_2_fastqc.html:md5,343c493ba215089723e9d4df7180a0fc", + "test_trimmed_2_fastqc.zip:md5,fcec86b3067854ffdadd00db615f0cdd" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.0" + }, + "timestamp": "2024-12-18T21:06:00.758494" + } +} \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index bafea68c3..3beb599f1 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -108,8 +108,14 @@ workflow RNAFUSION { //Run fusioncatcher + // TODO: check this inputs! FUSIONCATCHER_WORKFLOW ( - ch_reads_fusioncatcher + ch_reads_fusioncatcher, + params.fusioncatcher_ref, // channel [ meta, path ] + params.run_fusioncatcher, + params.all, + params.fusioninspector_only, + params.fusioncatcher_fusions ) ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) From 350de1b443139e8e38634fc03438f2f3e243876e Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 10:08:36 +0100 Subject: [PATCH 237/887] add some views to debug the full run --- subworkflows/local/fusionreport_workflow.nf | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/fusionreport_workflow.nf b/subworkflows/local/fusionreport_workflow.nf index 09ec99657..a0673f64e 100644 --- a/subworkflows/local/fusionreport_workflow.nf +++ b/subworkflows/local/fusionreport_workflow.nf @@ -15,10 +15,16 @@ workflow FUSIONREPORT_WORKFLOW { ch_csv = Channel.empty() if (!params.fusioninspector_only) { + arriba_fusions.view { it -> "arriba fusions:${it}"} + starfusion_fusions.view { it -> "starfusion fusions:${it}"} + fusioncatcher_fusions.view { it -> "fusioncatcher fusions:${it}"} + reads_fusions = reads - .join(arriba_fusions, remainder: true) - .join(starfusion_fusions, remainder: true) - .join(fusioncatcher_fusions, remainder: true) + .join(arriba_fusions, failOnMismatch:true, failOnDuplicate:true) + .join(starfusion_fusions, failOnMismatch:true, failOnDuplicate:true) + .join(fusioncatcher_fusions, failOnMismatch:true, failOnDuplicate:true) + + reads_fusions.view() FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) ch_fusion_list = FUSIONREPORT.out.fusion_list From a08c02f1d0f7d900e841fe4643d628f0bab8b71e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:19:41 +0100 Subject: [PATCH 238/887] update dependencies --- modules/local/starfusion/build/environment.yml | 4 ---- modules/local/starfusion/build/main.nf | 4 ++-- modules/local/starfusion/detect/environment.yml | 4 ---- modules/local/starfusion/detect/main.nf | 4 ++-- modules/local/starfusion/download/environment.yml | 4 ---- modules/local/starfusion/download/main.nf | 4 ++-- 6 files changed, 6 insertions(+), 18 deletions(-) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index f5d21d5a8..18b2407bd 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -4,8 +4,4 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 - - bioconda::minimap2=2.28 - - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.11b - - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 38d278326..eba6e2c0b 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -3,8 +3,8 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f7/f7977acd75883433483258a1cc21d069a64947af431b26c3fc13c6be62666dfa/data' : + 'community.wave.seqera.io/library/dfam_hmmer_star-fusion:e8fe96707386872f'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/environment.yml b/modules/local/starfusion/detect/environment.yml index f5d21d5a8..18b2407bd 100644 --- a/modules/local/starfusion/detect/environment.yml +++ b/modules/local/starfusion/detect/environment.yml @@ -4,8 +4,4 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 - - bioconda::minimap2=2.28 - - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.11b - - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index c95e39265..691601e99 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -4,8 +4,8 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f7/f7977acd75883433483258a1cc21d069a64947af431b26c3fc13c6be62666dfa/data' : + 'community.wave.seqera.io/library/dfam_hmmer_star-fusion:e8fe96707386872f'}" input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/environment.yml b/modules/local/starfusion/download/environment.yml index f5d21d5a8..18b2407bd 100644 --- a/modules/local/starfusion/download/environment.yml +++ b/modules/local/starfusion/download/environment.yml @@ -4,8 +4,4 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 - - bioconda::minimap2=2.28 - - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.11b - - bioconda::trinity=2.8.5 diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 19cad44bc..7dffbf2c0 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -3,8 +3,8 @@ process STARFUSION_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f7/f7977acd75883433483258a1cc21d069a64947af431b26c3fc13c6be62666dfa/data' : + 'community.wave.seqera.io/library/dfam_hmmer_star-fusion:e8fe96707386872f'}" output: path "ctat_genome_lib_build_dir/*" , emit: reference From 34109cd9ecd754793cf6fdc419e1fcc60dbe1cda Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:35:02 +0100 Subject: [PATCH 239/887] update path again --- modules/local/starfusion/build/main.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index eba6e2c0b..e106bf801 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -14,7 +14,6 @@ process STARFUSION_BUILD { path "*" , emit: reference script: - def binPath = (workflow.profile.tokenize(',').intersect(['singularity']).size() >= 1) ? "/usr/local/src/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl" : "prep_genome_lib.pl" """ export TMPDIR=/tmp wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam34.0/Pfam-A.hmm.gz --no-check-certificate @@ -26,7 +25,7 @@ process STARFUSION_BUILD { wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m --no-check-certificate wget https://www.dfam.org/releases/Dfam_3.4/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3p --no-check-certificate gunzip Pfam-A.hmm.gz && hmmpress Pfam-A.hmm - $binPath \\ + prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ --annot_filter_rule AnnotFilterRule.pm \\ From 0ea316e94661b472b7e615e8d0233a3690ed6f5a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:57:02 +0100 Subject: [PATCH 240/887] add minimap --- modules/local/starfusion/build/environment.yml | 1 + modules/local/starfusion/build/main.nf | 2 +- modules/local/starfusion/detect/environment.yml | 1 + modules/local/starfusion/download/environment.yml | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index 18b2407bd..ef7f93160 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -4,4 +4,5 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 + - bioconda::minimap2=2.28 - bioconda::star-fusion=1.14.0 diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index e106bf801..ad35b0674 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -3,7 +3,7 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f7/f7977acd75883433483258a1cc21d069a64947af431b26c3fc13c6be62666dfa/data' : + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : 'community.wave.seqera.io/library/dfam_hmmer_star-fusion:e8fe96707386872f'}" input: diff --git a/modules/local/starfusion/detect/environment.yml b/modules/local/starfusion/detect/environment.yml index 18b2407bd..ef7f93160 100644 --- a/modules/local/starfusion/detect/environment.yml +++ b/modules/local/starfusion/detect/environment.yml @@ -4,4 +4,5 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 + - bioconda::minimap2=2.28 - bioconda::star-fusion=1.14.0 diff --git a/modules/local/starfusion/download/environment.yml b/modules/local/starfusion/download/environment.yml index 18b2407bd..ef7f93160 100644 --- a/modules/local/starfusion/download/environment.yml +++ b/modules/local/starfusion/download/environment.yml @@ -4,4 +4,5 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 + - bioconda::minimap2=2.28 - bioconda::star-fusion=1.14.0 From 27b3f8b3f198f18ba725ecb3ef6bf82bf42000ed Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:48:30 +0100 Subject: [PATCH 241/887] propagate container/env change --- modules/local/fusioninspector/environment.yml | 3 --- modules/local/fusioninspector/main.nf | 4 ++-- modules/local/starfusion/build/main.nf | 2 +- modules/local/starfusion/detect/main.nf | 4 ++-- modules/local/starfusion/download/main.nf | 4 ++-- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index f5d21d5a8..ef7f93160 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -5,7 +5,4 @@ dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 - bioconda::minimap2=2.28 - - bioconda::samtools=1.6 - bioconda::star-fusion=1.14.0 - - bioconda::star=2.7.11b - - bioconda::trinity=2.8.5 diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 53a0bb45e..ade7c174a 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/star-fusion:1.14.0--hdfd78af_0' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_samtools_pruned:bd39df228dad7086'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" input: tuple val(meta), path(reads), path(fusion_list) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index ad35b0674..05abec921 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -4,7 +4,7 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : - 'community.wave.seqera.io/library/dfam_hmmer_star-fusion:e8fe96707386872f'}" + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 691601e99..83b0dc2f9 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -4,8 +4,8 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f7/f7977acd75883433483258a1cc21d069a64947af431b26c3fc13c6be62666dfa/data' : - 'community.wave.seqera.io/library/dfam_hmmer_star-fusion:e8fe96707386872f'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" input: tuple val(meta), path(reads), path(junction) diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf index 7dffbf2c0..989c24209 100644 --- a/modules/local/starfusion/download/main.nf +++ b/modules/local/starfusion/download/main.nf @@ -3,8 +3,8 @@ process STARFUSION_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f7/f7977acd75883433483258a1cc21d069a64947af431b26c3fc13c6be62666dfa/data' : - 'community.wave.seqera.io/library/dfam_hmmer_star-fusion:e8fe96707386872f'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" output: path "ctat_genome_lib_build_dir/*" , emit: reference From b8bae77aef45119ebb922bb2fba11ca6b017a8f4 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 14:59:21 +0100 Subject: [PATCH 242/887] try to fix issue with arriba output --- subworkflows/local/arriba_workflow/main.nf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 5f99ef8e6..949e35ffd 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -27,9 +27,10 @@ workflow ARRIBA_WORKFLOW { cram // array main: - ch_versions = Channel.empty() - ch_cram_index = Channel.empty() - ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) + def ch_versions = Channel.empty() + def ch_cram_index = Channel.empty() + def ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) + def ch_arriba_fusions = Channel.empty() if (( arriba || all ) && !fusioninspector_only) { From 00673c6af1d920721ff2177dff5fb13af444f52f Mon Sep 17 00:00:00 2001 From: Anabella Trigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:14:31 -0300 Subject: [PATCH 243/887] Update conf/modules.config Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 5e5e0a014..f241f879e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -329,7 +329,7 @@ process { mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] - ext.args = "--max_readlength ${params.read_length}" + ext.args = "--max_readlength ${params.read_length} --human_gencode_filter" } withName: 'STARFUSION_DOWNLOAD' { From 00063944fa9f6623855ebbee272bcfba5f08a331 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 15:18:05 +0100 Subject: [PATCH 244/887] remove views --- subworkflows/local/fusionreport_workflow.nf | 6 ------ 1 file changed, 6 deletions(-) diff --git a/subworkflows/local/fusionreport_workflow.nf b/subworkflows/local/fusionreport_workflow.nf index a0673f64e..6a87244fd 100644 --- a/subworkflows/local/fusionreport_workflow.nf +++ b/subworkflows/local/fusionreport_workflow.nf @@ -15,17 +15,11 @@ workflow FUSIONREPORT_WORKFLOW { ch_csv = Channel.empty() if (!params.fusioninspector_only) { - arriba_fusions.view { it -> "arriba fusions:${it}"} - starfusion_fusions.view { it -> "starfusion fusions:${it}"} - fusioncatcher_fusions.view { it -> "fusioncatcher fusions:${it}"} - reads_fusions = reads .join(arriba_fusions, failOnMismatch:true, failOnDuplicate:true) .join(starfusion_fusions, failOnMismatch:true, failOnDuplicate:true) .join(fusioncatcher_fusions, failOnMismatch:true, failOnDuplicate:true) - reads_fusions.view() - FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) ch_fusion_list = FUSIONREPORT.out.fusion_list ch_fusion_list_filtered = FUSIONREPORT.out.fusion_list_filtered From 05e0e61110137b1684c3b661e603196bf6ea82f9 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 15:20:29 +0100 Subject: [PATCH 245/887] remove breaking ifEmpties --- subworkflows/local/starfusion_workflow.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index 2a086ce1d..74c1839e0 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -73,8 +73,8 @@ workflow STARFUSION_WORKFLOW { fusions = ch_starfusion_fusions star_stats = ch_star_stats star_gene_count = ch_star_gene_count - ch_bam_sorted = ch_align.ifEmpty([[],[]]) - ch_bam_sorted_indexed = bam_sorted_indexed.ifEmpty([[],[],[]]) + ch_bam_sorted = ch_align + ch_bam_sorted_indexed = bam_sorted_indexed versions = ch_versions } From f8dd5169afb714f6f823ba64a3a58099ba695407 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:27:34 +0100 Subject: [PATCH 246/887] update changelog --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a52f01f4f..33c5b0cc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,9 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove double nested folder introduced in [#577](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) - Use docker.io and galaxy containers for fusioncatcher and starfusion (incl. fusioninspector) instead of wave as they are not functional on wave [#588](https://github.com/nf-core/rnafusion/pull/588) - Update STAR-Fusion to 1.14 [#588](https://github.com/nf-core/rnafusion/pull/588) - - ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" GTF_TO_REFFLAT - +- Use -genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons for GTF_TO_REFFLAT[#505](https://github.com/nf-core/rnafusion/pull/505) ### Fixed From 62fdf33845012d6c24993e105aec82e6318cda8a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 15:50:33 +0100 Subject: [PATCH 247/887] remove def --- modules/nf-core/star/align/main.nf | 3 ++- subworkflows/local/arriba_workflow/main.nf | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index b5bc9ddf8..18a3b461f 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -41,7 +41,8 @@ process STAR_ALIGN { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def reads1 = [], reads2 = [] + def reads1 = [] + def reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 949e35ffd..c7089e857 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -30,7 +30,6 @@ workflow ARRIBA_WORKFLOW { def ch_versions = Channel.empty() def ch_cram_index = Channel.empty() def ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) - def ch_arriba_fusions = Channel.empty() if (( arriba || all ) && !fusioninspector_only) { @@ -48,7 +47,7 @@ workflow ARRIBA_WORKFLOW { CTATSPLICING_WORKFLOW( STAR_FOR_ARRIBA.out.spl_junc_tab, STAR_FOR_ARRIBA.out.junction, - STAR_FOR_ARRIBA.out.bam_sorted_aligned, + STAR_FOR_ARRIBA.out.bam, ch_starfusion_ref ) ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) From d62c4b5d1f3e691497956dfe77574cc3f7c95dc7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:54:27 +0100 Subject: [PATCH 248/887] update changelog, retrofit trim_workflowo --- CHANGELOG.md | 17 +++++++++++++---- subworkflows/local/trim_workflow/main.nf | 6 ++++-- workflows/rnafusion.nf | 4 +++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33c5b0cc1..51fef20e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) - Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#577](https://github.com/nf-core/rnafusion/pull/577) - Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) +- Add parameter `--references_only` when no data should be analysed, but only the references should be built [#505](https://github.com/nf-core/rnafusion/pull/505) ### Changed @@ -31,7 +32,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove double nested folder introduced in [#577](https://github.com/nf-core/rnafusion/pull/577), [#581](https://github.com/nf-core/rnafusion/pull/581) - Use docker.io and galaxy containers for fusioncatcher and starfusion (incl. fusioninspector) instead of wave as they are not functional on wave [#588](https://github.com/nf-core/rnafusion/pull/588) - Update STAR-Fusion to 1.14 [#588](https://github.com/nf-core/rnafusion/pull/588) -- Use -genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons for GTF_TO_REFFLAT[#505](https://github.com/nf-core/rnafusion/pull/505) +- Use "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" (to mimic gms/tomte) for GTF_TO_REFFLAT [#505](https://github.com/nf-core/rnafusion/pull/505) +- Integrate reference building in the main workflow [#505](https://github.com/nf-core/rnafusion/pull/505) +- Move from ensembl to gencode base [#505](https://github.com/nf-core/rnafusion/pull/505) +- Update from ensembl 102 to gencode 46 default references [#505](https://github.com/nf-core/rnafusion/pull/505) ### Fixed @@ -46,12 +50,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - Remove fusionGDB from documentation and fusion-report download stubs [#503](https://github.com/nf-core/rnafusion/pull/503) +- Removed test-build as reference building gets integrated in the main workflow [#505](https://github.com/nf-core/rnafusion/pull/505) +- Removed parameter `--build_references` + ### Parameters -| Old parameter | New parameter | -| ------------- | ------------- | -| | `--no_cosmic` | +| Old parameter | New parameter | +| ------------------- | ------------------- | +| | `--no_cosmic` | +| `-build_references` | `--references_only` | + ## v3.0.2 - [2024-04-10] diff --git a/subworkflows/local/trim_workflow/main.nf b/subworkflows/local/trim_workflow/main.nf index 512a07b54..d548c8aec 100644 --- a/subworkflows/local/trim_workflow/main.nf +++ b/subworkflows/local/trim_workflow/main.nf @@ -7,6 +7,8 @@ workflow TRIM_WORKFLOW { take: reads // channel [ meta, [ fastq files ] ] + adapter_fasta // channel [ path ] + fastp_trim // boolean main: ch_versions = Channel.empty() @@ -14,8 +16,8 @@ workflow TRIM_WORKFLOW { ch_fastp_json = Channel.empty() ch_fastqc_trimmed = Channel.empty() - if ( {params.fastp_trim} ) { - FASTP(reads, {params.adapter_fasta}, false, false, false) + if ( fastp_trim ) { + FASTP(reads, adapter_fasta.ifEmpty( [] ), false, false, false) ch_versions = ch_versions.mix(FASTP.out.versions) FASTQC_FOR_FASTP(FASTP.out.reads) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 91742e1bc..a755311c4 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -64,7 +64,9 @@ workflow RNAFUSION { // Trimming // TRIM_WORKFLOW ( - ch_samplesheet + ch_samplesheet, + params.adapter_fasta, + params.fastp_trim ) ch_reads = TRIM_WORKFLOW.out.ch_reads_all ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) From 8155168298873fdfc04f9c99fd68a179e2c40b4f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 16:03:01 +0100 Subject: [PATCH 249/887] redo star changes --- modules/nf-core/star/align/main.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 18a3b461f..b5bc9ddf8 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -41,8 +41,7 @@ process STAR_ALIGN { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def reads1 = [] - def reads2 = [] + def reads1 = [], reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" From e386c81f7d8d948da0db6aa509202ca61297bf86 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 16:05:12 +0100 Subject: [PATCH 250/887] use bam from starfusion --- subworkflows/local/starfusion_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index 74c1839e0..b0c72bfcb 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -40,7 +40,7 @@ workflow STARFUSION_WORKFLOW { CTATSPLICING_WORKFLOW( STAR_FOR_STARFUSION.out.spl_junc_tab, STAR_FOR_STARFUSION.out.junction, - STAR_FOR_STARFUSION.out.bam_sorted_aligned, + STAR_FOR_STARFUSION.out.bam, ch_starfusion_ref ) ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) From 2c01b3c2311069aa9fc91a50518be77d8526863e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:07:15 +0100 Subject: [PATCH 251/887] use placeholder and add TODO for update --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 32ccc1d0e..a7ab06b9d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,7 +30,7 @@ params { read_length = 100 starfusion_build = true genomes = [:] - fusion_annot_lib = null // path to dat.gz CTAT genome lib (e.g. https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/GRCh38_gencode_v44_CTAT_lib_Oct292023.plug-n-play.tar.gz) + fusion_annot_lib = 'https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/GRCh38_gencode_v44_CTAT_lib_Oct292023.plug-n-play.tar.gz)' //TODO: update to latest version // Genomes options fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.all.fa" From 62ee76f8c38849ccf13e715c544e8ddb4a94030b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 16:13:19 +0100 Subject: [PATCH 252/887] create junctions with arriba for ctatsplicing --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 253d0bf03..b19d935b1 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -291,7 +291,7 @@ process { --alignSplicedMateMapLminOverLmate 0.5 \ --alignSJstitchMismatchNmax 5 -1 5 5 \ --chimSegmentMin 10 \ - --chimOutType WithinBAM HardClip \ + --chimOutType WithinBAM HardClip Junctions \ --chimJunctionOverhangMin 10 \ --chimScoreDropMax 30 \ --chimScoreJunctionNonGTAG 0 \ From 19d1cc19651476042a96834d2c125842768ab11c Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 19 Dec 2024 17:15:46 +0100 Subject: [PATCH 253/887] do not create an index in ctat splicing --- modules/local/ctatsplicing/startocancerintrons/main.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/local/ctatsplicing/startocancerintrons/main.nf b/modules/local/ctatsplicing/startocancerintrons/main.nf index 30fd5c3f2..edd9878fd 100644 --- a/modules/local/ctatsplicing/startocancerintrons/main.nf +++ b/modules/local/ctatsplicing/startocancerintrons/main.nf @@ -29,9 +29,7 @@ process CTATSPLICING_STARTOCANCERINTRONS { prefix = task.ext.prefix ?: "${meta.id}" def bam_arg = bam ? "--bam_file ${bam}" : "" def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - def create_index = bam && !bai ? "samtools index ${bam}" : "" """ - ${create_index} /usr/local/src/CTAT-SPLICING/STAR_to_cancer_introns.py \\ --SJ_tab_file ${split_junction} \\ --chimJ_file ${junction} \\ From 1237fefd30a47b82ac614d278a5f11291173d80c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:42:58 +0000 Subject: [PATCH 254/887] fix: add full path to module to avoid changing nf-tests --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index f241f879e..dcad2f40a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -320,7 +320,7 @@ process { ] } - withName: 'STARFUSION_BUILD' { + withName: 'NFCORE_RNAFUSION:BUILD_REFERENCES:STARFUSION_BUILD' { cpus = { 24 * task.attempt } memory = { 100.GB * task.attempt } time = { 2.d * task.attempt } From 89b26494a46658a17f099b2c1f9fc30bcf54dc52 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:43:36 +0000 Subject: [PATCH 255/887] feat: use previous `.dat.gz` file as default --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 32ccc1d0e..fabbbdbad 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,7 +30,7 @@ params { read_length = 100 starfusion_build = true genomes = [:] - fusion_annot_lib = null // path to dat.gz CTAT genome lib (e.g. https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/GRCh38_gencode_v44_CTAT_lib_Oct292023.plug-n-play.tar.gz) + fusion_annot_lib = "https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz" // path to dat.gz CTAT genome lib // TODO: Update to latest with s3 link when available // Genomes options fasta = "${params.genomes_base}/ensembl/Homo_sapiens.${params.genome}.${params.ensembl_version}.all.fa" From fb64ca6e557ca548eac8fce398c893b1f9c85ec6 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:21:47 +0000 Subject: [PATCH 256/887] test: update snapshot --- .../local/starfusion/build/tests/main.nf.test.snap | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/local/starfusion/build/tests/main.nf.test.snap b/modules/local/starfusion/build/tests/main.nf.test.snap index e50db541e..b08f25197 100644 --- a/modules/local/starfusion/build/tests/main.nf.test.snap +++ b/modules/local/starfusion/build/tests/main.nf.test.snap @@ -62,12 +62,12 @@ "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", - "Genome:md5,21aac51c5062f73d6305ae77691f5d4e", + "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", true, true, - "SA:md5,4d6ee7c82328aa304300e51ab5677ff9", - "SAindex:md5,2d3498f7d84a69bbc65fe9de1887820c", - "sjdbInfo.txt:md5,0ad0c108e6d02ec541d6adeffbdea6fd", + "SA:md5,7dd9083264be9c6a2194d990bc10d237", + "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", + "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", @@ -77,10 +77,10 @@ null ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-12-12T14:57:13.528134845" + "timestamp": "2024-12-19T17:03:12.812884291" }, "STARFUSION_BUILD - human - minigenome - stub": { "content": [ From 970fded943572aed0d74b285de9263188c445c1c Mon Sep 17 00:00:00 2001 From: Alan M Date: Thu, 19 Dec 2024 18:22:01 +0100 Subject: [PATCH 257/887] update snaps --- .../fusioncatcher_workflow/tests/main.nf.test | 8 +- .../tests/main.nf.test.snap | 2 +- tests/test_build.nf.test.snap | 15 +--- tests/test_cosmic.nf.test.snap | 77 +++++++++++++++---- 4 files changed, 71 insertions(+), 31 deletions(-) diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test index d864b252c..d0304380a 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -11,7 +11,7 @@ nextflow_workflow { // Test test("FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4") { - setup { + /*setup { // Download reference files for fusioncatch run("FUSIONCATCHER_DOWNLOAD") { script "../../../../modules/local/fusioncatcher/download/main.nf" @@ -21,8 +21,9 @@ nextflow_workflow { """ } } - } + }*/ + // TODO: get smaller reference files for fusioncatcher when { workflow { """ @@ -37,7 +38,8 @@ nextflow_workflow { ] ) // ch_references - input[1] = FUSIONCATCHER_DOWNLOAD.out.reference + input[1] = Channel.fromPath("complete/with/your/local/path", checkIfExists: true) + .map{ [[id: "human_v102" ], it] } //FUSIONCATCHER_DOWNLOAD.out.reference // fusioncatcher (boolean) input[2] = true diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap index ae57fe642..523916e4b 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -32,6 +32,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.0" }, - "timestamp": "2024-12-18T21:26:47.477736" + "timestamp": "2024-12-19T17:44:38.284199" } } \ No newline at end of file diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index ec588ad23..b278711ac 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -2,25 +2,16 @@ "test_build": { "content": [ [ - "fastqc", - "fastqc/test_1_fastqc.html", - "fastqc/test_1_fastqc.zip", - "fastqc/test_2_fastqc.html", - "fastqc/test_2_fastqc.zip", - "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + ], [ - "test_1_fastqc.html:md5,fce82f01594d12b109776ced37ec0739", - "test_1_fastqc.zip:md5,fd0eae421abf76c38f60656bc0fcf5cf", - "test_2_fastqc.html:md5,40f5f42c62a0e36def4fc3d3c48089cd", - "test_2_fastqc.zip:md5,1aaf903d6ea3957abe6f03ad832f82fa" + ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.0" }, - "timestamp": "2024-12-18T21:05:30.032816" + "timestamp": "2024-12-19T12:50:27.263029" } } \ No newline at end of file diff --git a/tests/test_cosmic.nf.test.snap b/tests/test_cosmic.nf.test.snap index fa74fd3b5..4ff01a919 100644 --- a/tests/test_cosmic.nf.test.snap +++ b/tests/test_cosmic.nf.test.snap @@ -1,4 +1,51 @@ { + "test cosmic no fastp trim build": { + "content": [ + 9, + null, + [ + "bedops", + "bedops/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.102.dna.primary_assembly.dict", + "gffread", + "gffread/Homo_sapiens.GRCh38.102.fasta", + "pipeline_info", + "references", + "references/ensembl", + "references/ensembl/Homo_sapiens.GRCh38.102.chr.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa", + "references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai", + "references/ensembl/Homo_sapiens.GRCh38.102.genepred", + "references/ensembl/Homo_sapiens.GRCh38.102.gtf", + "references/ensembl/Homo_sapiens.GRCh38.102.refflat", + "references/ensembl/Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "rrnatranscripts", + "rrnatranscripts/Homo_sapiens.GRCh38.102_rrna_intervals.gtf" + ], + [ + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.bed:md5,5bc3ccc76735ae46699a75269f0ea65b", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.dict:md5,092f1bf29fce906ff7b5ece02b4b21c8", + "Homo_sapiens.GRCh38.102.fasta:md5,d1f17b045dc60c49f2cc29e30006afc0", + "Homo_sapiens.GRCh38.102.chr.gtf:md5,0069687307852c63596b4d2ebdbbaf0c", + "Homo_sapiens.GRCh38.102.dna.primary_assembly.fa.fai:md5,d527f3eb6b664020cf4d882b5820056f", + "Homo_sapiens.GRCh38.102.genepred:md5,59c577ca4ab033c0ce1feac1e387bcab", + "Homo_sapiens.GRCh38.102.gtf:md5,defac755cd9aa4e82ec33398c27745ef", + "Homo_sapiens.GRCh38.102.refflat:md5,ef095e13743811c31d44752c32e9673e", + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf.interval_list:md5,0abf61877f65247b15c438d605d85599", + "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", + "Homo_sapiens.GRCh38.102_rrna_intervals.gtf:md5,744bf505deb50837b15441e808cad345" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.0" + }, + "timestamp": "2024-12-19T14:45:08.191019" + }, "test cosmic no fastp trim": { "content": [ 1, @@ -20,17 +67,17 @@ "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" ], [ - "test_1_fastqc.html:md5,fce82f01594d12b109776ced37ec0739", - "test_1_fastqc.zip:md5,166d13bbf5ebfcb24eb30c78b129a172", - "test_2_fastqc.html:md5,40f5f42c62a0e36def4fc3d3c48089cd", - "test_2_fastqc.zip:md5,4747768318b29ce4effe6c572ccbc36c" + "test_1_fastqc.html:md5,413a6e28e6dd182616fb5859822e288e", + "test_1_fastqc.zip:md5,793d81ea4349817b15ff37f6b053f870", + "test_2_fastqc.html:md5,820795d75b698565195c6a20c492c9fb", + "test_2_fastqc.zip:md5,179dee147c92fed9b552a2f2f82b7367" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.0" }, - "timestamp": "2024-12-18T21:06:31.911972" + "timestamp": "2024-12-19T12:51:54.89817" }, "test cosmic with fastp trim": { "content": [ @@ -70,25 +117,25 @@ "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" ], [ - "test.fastp.html:md5,d26a7f988fd5ed667832d391ab06e202", + "test.fastp.html:md5,4a1627af1a54b4f7b2dcf43c34369f04", "test.fastp.json:md5,ebf549d5793aa40efcd9e1ca41504f26", "test.fastp.log:md5,1c04b14e212aac5ace51f9bd25859f23", "test_1.fastp.fastq.gz:md5,2a5519a03fb226ae2379b1150b02ff0b", "test_2.fastp.fastq.gz:md5,4b8d3865b857e6bfae0035a45b2cdc27", - "test_1_fastqc.html:md5,fce82f01594d12b109776ced37ec0739", - "test_1_fastqc.zip:md5,f9e7e4dbf71703d98214cfd5cb79ee07", - "test_2_fastqc.html:md5,40f5f42c62a0e36def4fc3d3c48089cd", - "test_2_fastqc.zip:md5,7428e5d3c26f0934c75b15de29d6af5c", - "test_trimmed_1_fastqc.html:md5,2c2256226962e9be8c20e5720b8a51ab", - "test_trimmed_1_fastqc.zip:md5,3b8731204e07bfe7a6ecce66ba8617db", - "test_trimmed_2_fastqc.html:md5,343c493ba215089723e9d4df7180a0fc", - "test_trimmed_2_fastqc.zip:md5,fcec86b3067854ffdadd00db615f0cdd" + "test_1_fastqc.html:md5,413a6e28e6dd182616fb5859822e288e", + "test_1_fastqc.zip:md5,f4c865fd4ae054f2a98ae971ffdef576", + "test_2_fastqc.html:md5,820795d75b698565195c6a20c492c9fb", + "test_2_fastqc.zip:md5,67466d294966125f9e4e11333a231080", + "test_trimmed_1_fastqc.html:md5,6919dace995f86210c983eff554c43e7", + "test_trimmed_1_fastqc.zip:md5,069fd1c49854f8aea29acf5d870fa9cf", + "test_trimmed_2_fastqc.html:md5,6b567bc53367bb126896d7aa27e0c6f4", + "test_trimmed_2_fastqc.zip:md5,a65ef7a18c69fb6d8b3d0a2f9f87d938" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.0" }, - "timestamp": "2024-12-18T21:06:00.758494" + "timestamp": "2024-12-19T12:51:19.311692" } } \ No newline at end of file From dea8445b8c1fc98a1187a713d47b83df5416bbe7 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:57:01 +0000 Subject: [PATCH 258/887] feat: allow to use either reads or junction files --- modules/local/starfusion/detect/main.nf | 4 ++-- subworkflows/local/starfusion_workflow.nf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 6ab7e9b81..12c4fd945 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -19,8 +19,8 @@ process STARFUSION { script: def prefix = task.ext.prefix ?: "${meta.id}" - def fasta = meta.single_end ? "--left_fq ${reads[0]}" : "--left_fq ${reads[0]} --right_fq ${reads[1]}" - def junction_arg = junction ? "-J ${junction}": "" + def fasta = reads ? (meta.single_end ? "--left_fq ${reads[0]}" : "--left_fq ${reads[0]} --right_fq ${reads[1]}") : "" + def junction_arg = !reads && junction ? "-J ${junction}" : "" def args = task.ext.args ?: '' """ STAR-Fusion \\ diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index de99d8e51..e0e58c8bb 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -30,7 +30,7 @@ workflow STARFUSION_WORKFLOW { SAMTOOLS_INDEX_FOR_STARFUSION(STAR_FOR_STARFUSION.out.bam_sorted) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION.out.versions) bam_sorted_indexed = STAR_FOR_STARFUSION.out.bam_sorted.join(SAMTOOLS_INDEX_FOR_STARFUSION.out.bai) - reads_junction = reads.join(STAR_FOR_STARFUSION.out.junction ) + reads_junction = reads.join(STAR_FOR_STARFUSION.out.junction ) // TODO: This join is not needed as STARFUSION can simply read from the junction file: https://github.com/STAR-Fusion/STAR-Fusion/wiki#alternatively-kickstart-mode-running-star-yourself-and-then-running-star-fusion-using-the-existing-outputs if (params.cram.contains('starfusion')){ SAMTOOLS_VIEW_FOR_STARFUSION (bam_sorted_indexed, ch_fasta, [] ) From 9aff4ea4e1574e69780c1396dfba65139197359f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:57:08 +0000 Subject: [PATCH 259/887] test: update snaps --- .../starfusion/detect/tests/main.nf.test.snap | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/local/starfusion/detect/tests/main.nf.test.snap b/modules/local/starfusion/detect/tests/main.nf.test.snap index 2532b33d6..f65f94b02 100644 --- a/modules/local/starfusion/detect/tests/main.nf.test.snap +++ b/modules/local/starfusion/detect/tests/main.nf.test.snap @@ -30,7 +30,7 @@ ] ], "3": [ - "versions.yml:md5,4131f39f483637d95446231588add8f1" + "versions.yml:md5,a8fb6344fdf740dde0941048313fc243" ], "abridged": [ [ @@ -60,15 +60,15 @@ ] ], "versions": [ - "versions.yml:md5,4131f39f483637d95446231588add8f1" + "versions.yml:md5,a8fb6344fdf740dde0941048313fc243" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-16T14:47:21.862981618" + "timestamp": "2024-12-19T18:42:06.988178092" }, "Should run without failures": { "content": [ @@ -78,7 +78,7 @@ "id": "test", "single_end": false }, - "test.starfusion.fusion_predictions.tsv:md5,2adb2aeb44ea98736fb7572e7b5de5c6" + "test.starfusion.fusion_predictions.tsv:md5,82834fffed743afe07da82bd56d50c99" ] ], [ @@ -87,7 +87,7 @@ "id": "test", "single_end": false }, - "test.starfusion.abridged.tsv:md5,f37f1cd07a3a6ff41e131dbe369bc093" + "test.starfusion.abridged.tsv:md5,d6d20fdd4b5cba21b9c0ebf8e0ea19ff" ] ], [ @@ -96,17 +96,17 @@ "id": "test", "single_end": false }, - "test.starfusion.abridged.coding_effect.tsv:md5,8f5739b0351a725ee96cdf52860d680e" + "test.starfusion.abridged.coding_effect.tsv:md5,95dfce6fdaf3589f23881fe1e855c62b" ] ], [ - "versions.yml:md5,4131f39f483637d95446231588add8f1" + "versions.yml:md5,a8fb6344fdf740dde0941048313fc243" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-16T14:47:06.459753683" + "timestamp": "2024-12-19T18:41:49.150362156" } } \ No newline at end of file From a369518bae364760580be681ce46b45192e28beb Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:08:46 +0000 Subject: [PATCH 260/887] docs: update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1cfe3071..25152acae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#577](https://github.com/nf-core/rnafusion/pull/577) - Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) - Add nf-test to local module: `STARFUSION_BUILD`. [#585](https://github.com/nf-core/rnafusion/pull/585) - +- Add nf-test to local module: `STARFUSION_DETECT`. [#586](https://github.com/nf-core/rnafusion/pull/586) ### Changed From 6f2a382e9edefbbb078093722c2303961e508b14 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:24:55 +0000 Subject: [PATCH 261/887] fix: add junction if provided --- modules/local/starfusion/detect/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 12c4fd945..fd0a7d46b 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -20,7 +20,7 @@ process STARFUSION { script: def prefix = task.ext.prefix ?: "${meta.id}" def fasta = reads ? (meta.single_end ? "--left_fq ${reads[0]}" : "--left_fq ${reads[0]} --right_fq ${reads[1]}") : "" - def junction_arg = !reads && junction ? "-J ${junction}" : "" + def junction_arg = junction ? "-J ${junction}" : "" def args = task.ext.args ?: '' """ STAR-Fusion \\ From 9dc352fb4fd95259ce6ac877fba7bcb93d093ad0 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 20 Dec 2024 08:25:55 +0100 Subject: [PATCH 262/887] readd indexing to ctat & sort arriba bam --- conf/modules.config | 2 +- modules/local/ctatsplicing/startocancerintrons/main.nf | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index b19d935b1..252fede94 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -283,7 +283,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] ext.args = '--readFilesCommand zcat \ - --outSAMtype BAM Unsorted \ + --outSAMtype BAM SortedByCoordinate \ --outSAMunmapped Within \ --outBAMcompression 0 \ --outFilterMultimapNmax 50 \ diff --git a/modules/local/ctatsplicing/startocancerintrons/main.nf b/modules/local/ctatsplicing/startocancerintrons/main.nf index edd9878fd..a8d683ec2 100644 --- a/modules/local/ctatsplicing/startocancerintrons/main.nf +++ b/modules/local/ctatsplicing/startocancerintrons/main.nf @@ -29,7 +29,10 @@ process CTATSPLICING_STARTOCANCERINTRONS { prefix = task.ext.prefix ?: "${meta.id}" def bam_arg = bam ? "--bam_file ${bam}" : "" def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def create_index = bam && !bai ? "samtools index ${bam}" : "" """ + ${create_index} + /usr/local/src/CTAT-SPLICING/STAR_to_cancer_introns.py \\ --SJ_tab_file ${split_junction} \\ --chimJ_file ${junction} \\ From de5d6d5aea8306d2853fef7c788f7c20f7a50ee8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 20 Dec 2024 09:57:45 +0100 Subject: [PATCH 263/887] add species as parameter --- CHANGELOG.md | 4 +- nextflow.config | 1 + subworkflows/local/build_references.nf | 6 +- tests/test_stub.nf.test.snap | 368 +------------------------ 4 files changed, 13 insertions(+), 366 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51fef20e4..1838af9e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,15 +53,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed test-build as reference building gets integrated in the main workflow [#505](https://github.com/nf-core/rnafusion/pull/505) - Removed parameter `--build_references` - ### Parameters -| Old parameter | New parameter | +| Old parameter | New parameter | | ------------------- | ------------------- | | | `--no_cosmic` | | `-build_references` | `--references_only` | - ## v3.0.2 - [2024-04-10] ### Added diff --git a/nextflow.config b/nextflow.config index a1e746dd8..a61462e3e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -31,6 +31,7 @@ params { starfusion_build = true genomes = [:] fusion_annot_lib = "https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz" // path to dat.gz CTAT genome lib // TODO: Update to latest with s3 link when available + species = "human" // Filtering tools_cutoff = 1 diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 8e9cc4b1e..56fd8eb24 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -88,9 +88,9 @@ workflow BUILD_REFERENCES { if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty() || !file(params.salmon_index_stub_check).exists() || file(params.salmon_index_stub_check).isEmpty()){ // add condition for qc - GFFREAD(ch_gtf, ch_fasta.map{ meta, fasta -> [ fasta ] }) + GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(GFFREAD.out.versions) - SALMON_INDEX(ch_fasta.map{ meta, fasta -> [ fasta ] }, GFFREAD.out.gffread_fasta.map{ meta, gffread_fasta -> [ gffread_fasta ] }) + SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) ch_salmon_index = SALMON_INDEX.out.index } else { @@ -140,7 +140,7 @@ workflow BUILD_REFERENCES { if ((params.starfusion || params.all) && (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { - STARFUSION_BUILD(ch_fasta, ch_gtf) + STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) ch_starfusion_ref = STARFUSION_BUILD.out.reference } diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index e3a8bb73e..f661aac6c 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,382 +1,30 @@ { "stub test no fastp trim": { "content": [ - 20, - { - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, - "FASTP": { - "fastp": "0.23.4" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FASTQC_FOR_FASTP": { - "fastqc": "0.12.1" - }, - "FUSIONCATCHER": { - "fusioncatcher": 1.35 - }, - "FUSIONCATCHER_BUILD": { - "fusioncatcher": "fusioncatcher.py 1.35" - }, - "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GENCODE_DOWNLOAD": { - "wget": null - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GFFREAD": { - "gffread": "0.12.7" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "HGNC_DOWNLOAD": { - "wget": null - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "STARFUSION_BUILD": { - "STAR-Fusion": "1.7.0" - }, - "STAR_FOR_ARRIBA": { - "star": null, - "samtools": 1.2, - "gawk": "5.1.0" - }, - "STAR_FOR_STARFUSION": { - "star": null, - "samtools": 1.2, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": null, - "samtools": 1.2, - "gawk": "5.1.0" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "fastp", - "fastp/test.fastp.html", - "fastp/test.fastp.json", - "fastp/test.fastp.log", - "fastp/test_1.fastp.fastq.gz", - "fastp/test_2.fastp.fastq.gz", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", - "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/fusion_report_db", - "references/fusion_report_db/DB-timestamp.txt", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/gffread", - "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "references/salmon", - "references/salmon/salmon", - "references/salmon/salmon/complete_ref_lens.bin", - "references/salmon/salmon/ctable.bin", - "references/salmon/salmon/ctg_offsets.bin", - "references/salmon/salmon/duplicate_clusters.tsv", - "references/salmon/salmon/info.json", - "references/salmon/salmon/mphf.bin", - "references/salmon/salmon/pos.bin", - "references/salmon/salmon/pre_indexing.log", - "references/salmon/salmon/rank.bin", - "references/salmon/salmon/refAccumLengths.bin", - "references/salmon/salmon/ref_indexing.log", - "references/salmon/salmon/reflengths.bin", - "references/salmon/salmon/refseq.bin", - "references/salmon/salmon/seq.bin", - "references/salmon/salmon/versionInfo.json", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ref_annot.cdna.fa", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam" + "pipeline_info" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-17T16:44:02.121512" + "timestamp": "2024-12-20T09:49:41.743056" }, "stub test with fastp trim": { "content": [ - 19, - { - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, - "FASTP": { - "fastp": "0.23.4" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FASTQC_FOR_FASTP": { - "fastqc": "0.12.1" - }, - "FUSIONCATCHER": { - "fusioncatcher": 1.35 - }, - "FUSIONCATCHER_BUILD": { - "fusioncatcher": "fusioncatcher.py 1.35" - }, - "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GENCODE_DOWNLOAD": { - "wget": null - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GFFREAD": { - "gffread": "0.12.7" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "HGNC_DOWNLOAD": { - "wget": null - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "STARFUSION_BUILD": { - "STAR-Fusion": "1.7.0" - }, - "STAR_FOR_ARRIBA": { - "star": null, - "samtools": 1.2, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": null, - "samtools": 1.2, - "gawk": "5.1.0" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "fastp", - "fastp/test.fastp.html", - "fastp/test.fastp.json", - "fastp/test.fastp.log", - "fastp/test_1.fastp.fastq.gz", - "fastp/test_2.fastp.fastq.gz", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", - "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/fusion_report_db", - "references/fusion_report_db/DB-timestamp.txt", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/gffread", - "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ref_annot.cdna.fa", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam" + "pipeline_info" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-17T16:42:11.182735" + "timestamp": "2024-12-20T09:49:14.743338" } } \ No newline at end of file From 9ea1f3b46836c440a8868352bb47632b47709e42 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 20 Dec 2024 11:32:36 +0100 Subject: [PATCH 264/887] remove ctatsplicing check from starfusion --- subworkflows/local/starfusion_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index b0c72bfcb..2083036fc 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -53,7 +53,7 @@ workflow STARFUSION_WORKFLOW { SAMTOOLS_INDEX_FOR_STARFUSION_CRAM (SAMTOOLS_VIEW_FOR_STARFUSION.out.cram) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION_CRAM.out.versions) } - if (params.starfusion || params.all || params.ctatsplicing){ + if (params.starfusion || params.all){ STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) ch_versions = ch_versions.mix(STARFUSION.out.versions) ch_starfusion_fusions = STARFUSION.out.fusions From 1c98fc76d7dbf9404ad8522b4c0b8c55eed2fb2f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 20 Dec 2024 11:32:43 +0100 Subject: [PATCH 265/887] clarify changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7168d02be..f09fb2222 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `TRIM_WORKFLOW` [#572](https://github.com/nf-core/rnafusion/pull/572) - Add nf-test to local module: `FUSIONREPORT_DETECT`. Improve `FUSIONREPORT_DOWNLOAD` module [#577](https://github.com/nf-core/rnafusion/pull/577) - Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) -- Added a new module `CTATSPLICING_STARTOCANCERINTRONS` [#587](https://github.com/nf-core/rnafusion/pull/587) +- Added a new module `CTATSPLICING_STARTOCANCERINTRONS` and a new parameter `--ctatsplicing`. This options creates reports on cancer splicing abberations and requires one or both of `--arriba` and `--starfusion` to be given. [#587](https://github.com/nf-core/rnafusion/pull/587) ### Changed From 74d4534681116df35a81b72d4488ff346a4ed84f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 20 Dec 2024 11:40:13 +0100 Subject: [PATCH 266/887] update docs --- docs/output.md | 37 +++++++++++++++++++++++++++++++++++++ docs/usage.md | 4 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index 62859668a..efc1425f5 100644 --- a/docs/output.md +++ b/docs/output.md @@ -17,6 +17,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [STAR-fusion](#starfusion) - STAR-fusion fusion detection - [StringTie](#stringtie) - StringTie assembly - [FusionCatcher](#fusioncatcher) - Fusion catcher fusion detection +- [CTAT-SPLICING](#ctat-splicing) - Detection and annotation of cancer splicing aberrations - [Samtools](#samtools) - SAM/BAM file manipulation - [Fusion-report](#fusion-report) - Summary of the findings of each tool and comparison to COSMIC, Mitelman, and FusionGDB2 databases - [FusionInspector](#fusionInspector) - Supervised analysis of fusion predictions from fusion-report, recover and re-score evidence for such predictions @@ -186,6 +187,42 @@ The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They m [FusionCatcher](https://github.com/ndaniel/fusioncatcher) searches for novel/known somatic fusion genes translocations, and chimeras in RNA-seq data. Possibility to use parameter `--fusioncatcher_limitSjdbInsertNsj` to modify limitSjdbInsertNsj. +### CTAT-SPLICING + +
    +Output files + +- `ctatsplicing` + - `arriba` + - `.cancer_intron_reads.sorted.bam` + - `.cancer_intron_reads.sorted.bam.bai` + - `.cancer.introns` + - `.cancer.introns.prelim` + - `.chckpts` + - `.ctat-splicing.igv.html` + - `.gene_reads.sorted.sifted.bam` + - `.gene_reads.sorted.sifted.bam.bai` + - `.igv.tracks` + - `.introns` + - `.introns.for_IGV.bed` + - `starfusion` + - `.cancer_intron_reads.sorted.bam` + - `.cancer_intron_reads.sorted.bam.bai` + - `.cancer.introns` + - `.cancer.introns.prelim` + - `.chckpts` + - `.ctat-splicing.igv.html` + - `.gene_reads.sorted.sifted.bam` + - `.gene_reads.sorted.sifted.bam.bai` + - `.igv.tracks` + - `.introns` + - `.introns.for_IGV.bed` + +
    + +[CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING/wiki) detects and annotates of aberrant splicing isoforms in cancer. This is run on the input files for `arriba` and/or `starfusion`. + + ### FusionInspector
    diff --git a/docs/usage.md b/docs/usage.md index b353b28ce..1bddcf71e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -16,7 +16,7 @@ The pipeline is divided into two parts: 2. Detecting fusions -- Supported tools: `Arriba`, `FusionCatcher`, `STAR-Fusion`, and `StringTie` +- Supported tools: `Arriba`, `FusionCatcher`, `STAR-Fusion`, `StringTie` and `CTAT-SPLICING` - QC: `Fastqc`, `MultiQC`, and `Picard CollectInsertSize`, `Picard CollectWgsMetrics`, `Picard Markduplicates` - Fusions visualization: `Arriba`, `fusion-report`, `FusionInspector`, and `vcf_collect` @@ -136,7 +136,7 @@ As you can see above for multiple runs of the same sample, the `sample` name has ### Starting commands -The pipeline can either be run using all fusion detection tools or specifying individual tools. Visualisation tools will be run on all fusions detected. To run all tools (`arriba`, `fusioncatcher`, `starfusion`, `stringtie`) use the `--all` parameter: +The pipeline can either be run using all fusion detection tools or specifying individual tools. Visualisation tools will be run on all fusions detected. To run all tools (`arriba`, `fusioncatcher`, `starfusion`, `stringtie`, `ctat-splicing`) use the `--all` parameter: ```bash nextflow run nf-core/rnafusion \ From a209feaab80eb5a34428337e1b3173d4028f3452 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 20 Dec 2024 11:50:57 +0100 Subject: [PATCH 267/887] prettyyy --- docs/output.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index efc1425f5..dd3705751 100644 --- a/docs/output.md +++ b/docs/output.md @@ -222,7 +222,6 @@ The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They m [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING/wiki) detects and annotates of aberrant splicing isoforms in cancer. This is run on the input files for `arriba` and/or `starfusion`. - ### FusionInspector
    From bdae2931727b81c1b5a13d3c1deb894a84f1e07d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:55:16 +0100 Subject: [PATCH 268/887] fix some issues with channels --- subworkflows/local/arriba_workflow/main.nf | 8 +- subworkflows/local/build_references.nf | 12 +- tests/test_stub.nf.test.snap | 246 ++++++++++++++++++++- workflows/rnafusion.nf | 2 +- 4 files changed, 253 insertions(+), 15 deletions(-) diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 77e97f424..bb4c36a68 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -25,7 +25,7 @@ workflow ARRIBA_WORKFLOW { main: ch_versions = Channel.empty() ch_cram_index = Channel.empty() - ch_dummy_file = file("$baseDir/assets/dummy_file_arriba.txt", checkIfExists: true) + ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) if (( arriba || all ) && !fusioninspector_only) { @@ -43,7 +43,7 @@ workflow ARRIBA_WORKFLOW { if ( arriba_fusions ) { ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) - .map { meta, reads, fusions -> [ meta, fusions ] } + .map { it -> [ it[0], it[2] ] } ch_arriba_fusion_fail = ch_dummy_file } else { @@ -61,7 +61,7 @@ workflow ARRIBA_WORKFLOW { ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions - ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ meta, file -> return file } + ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ it -> return it[1] } } if ( cram.contains('arriba') ) { @@ -83,7 +83,7 @@ workflow ARRIBA_WORKFLOW { ch_arriba_fusions = reads .combine(Channel.value( file(ch_dummy_file, checkIfExists: true ) ) ) - .map { meta, reads, fusions -> [ meta, fusions ] } + .map { it -> [ it[0], it[2] ] } ch_arriba_fusion_fail = ch_dummy_file } diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 56fd8eb24..34102d2d2 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -118,10 +118,14 @@ workflow BUILD_REFERENCES { ch_arriba_ref_known_fusions = ARRIBA_DOWNLOAD.out.known_fusions ch_arriba_ref_protein_domains = ARRIBA_DOWNLOAD.out.protein_domains } else { - ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist) - ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands) - ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions) - ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains) + ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { file -> + [ id: file.baseName, path: file ]} + ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { file -> + [ id: file.baseName, path: file ]} + ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { file -> + [ id: file.baseName, path: file ]} + ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { file -> + [ id: file.baseName, path: file ]} } diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index f661aac6c..a60d6d137 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -4,27 +4,261 @@ 0, null, [ - "pipeline_info" + ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-20T09:49:41.743056" + "timestamp": "2024-12-20T11:51:44.033131" }, "stub test with fastp trim": { "content": [ - 0, - null, + 18, + { + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER": { + "fusioncatcher": 1.35 + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "fusioncatcher.py 1.35" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_ARRIBA": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, [ - "pipeline_info" + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/ctat_genome_lib_build_dir", + "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "starfusion/ctat_genome_lib_build_dir/__chkpts", + "starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-20T09:49:14.743338" + "timestamp": "2024-12-20T11:53:19.316547" } } \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index a755311c4..755be7b2e 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -65,7 +65,7 @@ workflow RNAFUSION { // TRIM_WORKFLOW ( ch_samplesheet, - params.adapter_fasta, + Channel.value(params.adapter_fasta), params.fastp_trim ) ch_reads = TRIM_WORKFLOW.out.ch_reads_all From 509a792e1197aeb69b22bb5218b6830cca9761cd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:03:55 +0100 Subject: [PATCH 269/887] add species to schema --- nextflow_schema.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index db35f97da..1f83adc11 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -375,6 +375,11 @@ "type": "string", "description": "Path to Fusion Annotation Library to be used in STARFUSION_BUILD.", "fa_icon": "far fa-file-code" + }, + "species": { + "type": "string", + "description": "Which species dfam should automatically download, default: human.", + "fa_icon": "far fa-file-code" } } }, From 8776835e747aaf65a0dbf5f493e5154b32cdbd11 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 20 Dec 2024 13:24:33 +0100 Subject: [PATCH 270/887] fix erroneous addition of meta --- subworkflows/local/arriba_workflow/main.nf | 8 +- subworkflows/local/build_references.nf | 12 +- tests/test_stub.nf.test.snap | 431 ++++++++++++++++++++- 3 files changed, 432 insertions(+), 19 deletions(-) diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index bb4c36a68..5fa2ed2b3 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -52,10 +52,10 @@ workflow ARRIBA_WORKFLOW { STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, - ch_arriba_ref_blacklist.map{ it[1] }, - ch_arriba_ref_known_fusions.map{ it[1] }, - ch_arriba_ref_cytobands.map{ it[1] }, - ch_arriba_ref_protein_domains.map{ it[1] } + ch_arriba_ref_blacklist, + ch_arriba_ref_known_fusions, + ch_arriba_ref_cytobands, + ch_arriba_ref_protein_domains ) ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 34102d2d2..56fd8eb24 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -118,14 +118,10 @@ workflow BUILD_REFERENCES { ch_arriba_ref_known_fusions = ARRIBA_DOWNLOAD.out.known_fusions ch_arriba_ref_protein_domains = ARRIBA_DOWNLOAD.out.protein_domains } else { - ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { file -> - [ id: file.baseName, path: file ]} - ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { file -> - [ id: file.baseName, path: file ]} - ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { file -> - [ id: file.baseName, path: file ]} - ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { file -> - [ id: file.baseName, path: file ]} + ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist) + ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands) + ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions) + ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains) } diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index a60d6d137..e1892a6a9 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,22 +1,343 @@ { "stub test no fastp trim": { "content": [ - 0, - null, + 29, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER": { + "fusioncatcher": 1.35 + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "fusioncatcher.py 1.35" + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_ARRIBA": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, [ - + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/ctat_genome_lib_build_dir", + "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "starfusion/ctat_genome_lib_build_dir/__chkpts", + "starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-20T11:51:44.033131" + "timestamp": "2024-12-20T13:17:20.018293" }, "stub test with fastp trim": { "content": [ - 18, + 31, { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, @@ -35,12 +356,22 @@ "FUSIONCATCHER_BUILD": { "fusioncatcher": "fusioncatcher.py 1.35" }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, "FUSIONREPORT_DOWNLOAD": { "fusion_report": "2.1.5" }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, "GATK4_CREATESEQUENCEDICTIONARY": { "gatk4": "4.6.1.0" }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, "GENCODE_DOWNLOAD": { "wget": null }, @@ -56,9 +387,27 @@ "HGNC_DOWNLOAD": { "wget": null }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, "STARFUSION_BUILD": { "STAR-Fusion": "1.14.0" }, @@ -67,16 +416,30 @@ "samtools": 1.2, "gawk": "5.1.0" }, + "STAR_FOR_STARFUSION": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, "STAR_GENOMEGENERATE": { "star": null, "samtools": 1.2, "gawk": "5.1.0" }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", "fastp", "fastp/test.fastp.html", "fastp/test.fastp.json", @@ -95,11 +458,32 @@ "fusioncatcher/test.fusioncatcher.fusion-genes.txt", "fusioncatcher/test.fusioncatcher.log", "fusioncatcher/test.fusioncatcher.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "get", "get/rrna.bed", "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", "references", @@ -116,6 +500,7 @@ "references/fusion_report_db/mitelman.db", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", @@ -124,6 +509,23 @@ "references/hgnc", "references/hgnc/HGNC-DB-timestamp.txt", "references/hgnc/hgnc_complete_set.txt", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", "references/star", "references/star/Genome", "references/star/Log.out", @@ -141,6 +543,10 @@ "references/star/sjdbList.fromGTF.out.tab", "references/star/sjdbList.out.tab", "references/star/transcriptInfo.tab", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json", "star_for_arriba", "star_for_arriba/test.Aligned.sortedByCoord.out.bam", "star_for_arriba/test.Aligned.unsort.out.bam", @@ -172,6 +578,7 @@ "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", "star_for_starfusion/test.out.sam", "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", "star_for_starfusion/test.tab", "star_for_starfusion/test.toTranscriptome.out.bam", "star_for_starfusion/test.unmapped_1.fastq.gz", @@ -252,13 +659,23 @@ "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz" + "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-20T11:53:19.316547" + "timestamp": "2024-12-20T13:15:06.974011" } } \ No newline at end of file From ab65540133a556fda772f776a3bc4391a1f12329 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:02:55 +0100 Subject: [PATCH 271/887] fixes --- tests/test_stub.nf.test.snap | 78 +++++++++++++++++++++++++++++++----- workflows/rnafusion.nf | 6 +-- 2 files changed, 70 insertions(+), 14 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index e1892a6a9..0ac620e73 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,7 +1,7 @@ { "stub test no fastp trim": { "content": [ - 29, + 31, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -9,6 +9,9 @@ "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, "FASTQC": { "fastqc": "0.12.1" }, @@ -74,17 +77,17 @@ "STAR-Fusion": "1.14.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, @@ -102,6 +105,31 @@ "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", + "ctatsplicing", + "ctatsplicing/arriba", + "ctatsplicing/arriba/test.cancer.introns", + "ctatsplicing/arriba/test.cancer.introns.prelim", + "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/arriba/test.chckpts", + "ctatsplicing/arriba/test.ctat-splicing.igv.html", + "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/arriba/test.igv.tracks", + "ctatsplicing/arriba/test.introns", + "ctatsplicing/arriba/test.introns.for_IGV.bed", + "ctatsplicing/starfusion", + "ctatsplicing/starfusion/test.cancer.introns", + "ctatsplicing/starfusion/test.cancer.introns.prelim", + "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/starfusion/test.chckpts", + "ctatsplicing/starfusion/test.ctat-splicing.igv.html", + "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/starfusion/test.igv.tracks", + "ctatsplicing/starfusion/test.introns", + "ctatsplicing/starfusion/test.introns.for_IGV.bed", "fastqc", "fastqc/test.html", "fastqc/test.zip", @@ -329,11 +357,11 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-20T13:17:20.018293" + "timestamp": "2024-12-20T14:00:19.311265" }, "stub test with fastp trim": { "content": [ - 31, + 33, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -341,6 +369,9 @@ "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, "FASTP": { "fastp": "0.23.4" }, @@ -412,17 +443,17 @@ "STAR-Fusion": "1.14.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, @@ -440,6 +471,31 @@ "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", + "ctatsplicing", + "ctatsplicing/arriba", + "ctatsplicing/arriba/test.cancer.introns", + "ctatsplicing/arriba/test.cancer.introns.prelim", + "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/arriba/test.chckpts", + "ctatsplicing/arriba/test.ctat-splicing.igv.html", + "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/arriba/test.igv.tracks", + "ctatsplicing/arriba/test.introns", + "ctatsplicing/arriba/test.introns.for_IGV.bed", + "ctatsplicing/starfusion", + "ctatsplicing/starfusion/test.cancer.introns", + "ctatsplicing/starfusion/test.cancer.introns.prelim", + "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/starfusion/test.chckpts", + "ctatsplicing/starfusion/test.ctat-splicing.igv.html", + "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/starfusion/test.igv.tracks", + "ctatsplicing/starfusion/test.introns", + "ctatsplicing/starfusion/test.introns.for_IGV.bed", "fastp", "fastp/test.fastp.html", "fastp/test.fastp.json", @@ -676,6 +732,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-20T13:15:06.974011" + "timestamp": "2024-12-20T13:57:10.179877" } -} \ No newline at end of file +} diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 3c98cf6b3..857827aa5 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -92,7 +92,7 @@ workflow RNAFUSION { BUILD_REFERENCES.out.ch_arriba_ref_cytobands, BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, - ch_starfusion_ref, + BUILD_REFERENCES.out.ch_starfusion_ref, params.arriba, // boolean params.all, // boolean params.fusioninspector_only, // boolean @@ -110,8 +110,8 @@ workflow RNAFUSION { ch_reads, BUILD_REFERENCES.out.ch_gtf, BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_fasta - ch_starfusion_ref + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_starfusion_ref ) ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) From 7c333f51321d4193c4c7953af5e057e045ec9443 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 20 Dec 2024 13:11:47 +0000 Subject: [PATCH 272/887] Template update for nf-core/tools version 3.1.1 --- .editorconfig | 4 + .github/ISSUE_TEMPLATE/bug_report.yml | 1 - .github/workflows/download_pipeline.yml | 41 ++++++---- .nf-core.yml | 2 +- .prettierignore | 1 + CITATIONS.md | 4 +- LICENSE | 2 +- README.md | 15 +--- docs/output.md | 11 +-- docs/usage.md | 2 +- nextflow.config | 3 + ro-crate-metadata.json | 81 ++++++++++++------- .../utils_nfcore_rnafusion_pipeline/main.nf | 2 +- 13 files changed, 96 insertions(+), 73 deletions(-) diff --git a/.editorconfig b/.editorconfig index 72dda289a..6d9b74cc0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -31,3 +31,7 @@ indent_size = unset # ignore python and markdown [*.{py,md}] indent_style = unset + +# ignore ro-crate metadata files +[**/ro-crate-metadata.json] +insert_final_newline = unset diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 7755ffb4a..5980dff43 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,7 +9,6 @@ body: - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - [nf-core/rnafusion pipeline documentation](https://nf-co.re/rnafusion/usage) - - type: textarea id: description attributes: diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2576cc0c7..13b51e2c3 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -28,8 +28,12 @@ env: NXF_ANSI_LOG: false jobs: - download: + configure: runs-on: ubuntu-latest + outputs: + REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} + REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} + REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} steps: - name: Install Nextflow uses: nf-core/setup-nextflow@v2 @@ -53,22 +57,27 @@ jobs: pip install git+https://github.com/nf-core/tools.git@dev - name: Get the repository name and current branch set as environment variable + id: get_repo_properties run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV} - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" - name: Make a cache directory for the container images run: | mkdir -p ./singularity_container_images + download: + runs-on: ubuntu-latest + needs: configure + steps: - name: Download the pipeline env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ - --revision ${{ env.REPO_BRANCH }} \ - --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \ + --revision ${{ needs.configure.outputs.REPO_BRANCH }} \ + --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ @@ -76,14 +85,14 @@ jobs: --download-configuration 'yes' - name: Inspect download - run: tree ./${{ env.REPOTITLE_LOWERCASE }} + run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} - name: Count the downloaded number of container images id: count_initial run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Initial container image count: $image_count" - echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT" - name: Run the downloaded pipeline (stub) id: stub_run_pipeline @@ -91,27 +100,27 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline - if: ${{ job.steps.stub_run_pipeline.status == failure() }} + if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results - name: Count the downloaded number of container images id: count_afterwards run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Post-pipeline run container image count: $image_count" - echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" - name: Compare container image counts run: | - if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then - initial_count=${{ env.IMAGE_COUNT_INITIAL }} - final_count=${{ env.IMAGE_COUNT_AFTER }} + if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} + final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} difference=$((final_count - initial_count)) echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" tree ./singularity_container_images diff --git a/.nf-core.yml b/.nf-core.yml index 37d9e4cd7..148865a49 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,7 +4,7 @@ lint: - .github/PULL_REQUEST_TEMPLATE.md - conf/igenomes.config - conf/igenomes_ignored.config -nf_core_version: 3.1.0 +nf_core_version: 3.1.1 repository_type: pipeline template: author: Martin Proks, Annick Renevey diff --git a/.prettierignore b/.prettierignore index 437d763d0..edd29f01e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,4 @@ testing/ testing* *.pyc bin/ +ro-crate-metadata.json diff --git a/CITATIONS.md b/CITATIONS.md index 0fc81801b..93ddd1a75 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,9 +12,7 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) -> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. - -- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online].- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. diff --git a/LICENSE b/LICENSE index 86e71fe15..feb286272 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Martin Proks, Annick Renevey +Copyright (c) The nf-core/rnafusion team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 932243be4..12b71f87f 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,7 @@ nf-core/rnafusion - - -[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml) +[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) @@ -29,15 +27,12 @@ - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Usage > [!NOTE] -> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow.Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. - - - + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/docs/output.md b/docs/output.md index 501e19501..f5beb7911 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,8 +12,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 -- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +- [FastQC](#fastqc) - Raw read QC- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC @@ -27,9 +26,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d
    -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). - -### MultiQC +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/).### MultiQC
    Output files @@ -43,9 +40,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . - -### Pipeline information +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see .### Pipeline information
    Output files diff --git a/docs/usage.md b/docs/usage.md index c8a121d09..73894cb12 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -130,7 +130,7 @@ Several generic profiles are bundled with the pipeline which instruct the pipeli > [!IMPORTANT] > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is suported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. diff --git a/nextflow.config b/nextflow.config index 4383d5421..bf863573a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -291,3 +291,6 @@ validation { afterText = validation.help.afterText } } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index f1d7090ab..145ad4d00 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2024-12-12T11:24:21+00:00", - "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2024-12-20T13:11:36+00:00", + "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    [![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow.Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#e018c319-519d-4a99-bdba-7c9c8860b896" + "@id": "#f907a90b-3444-4392-bd9f-cad7780c2dc3" } ], "name": "nf-core/rnafusion" @@ -121,40 +121,61 @@ }, { "@id": "main.nf", - "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], "creator": [ { - "@id": "https://orcid.org/0000-0001-9017-591X" + "@id": "https://orcid.org/0000-0002-8178-3128" }, { - "@id": "#phil.ewels@scilifelab.se" + "@id": "#max.u.garcia@gmail.com" }, { - "@id": "https://orcid.org/0000-0002-8178-3128" + "@id": "#phil.ewels@scilifelab.se" }, { - "@id": "#max.u.garcia@gmail.com" + "@id": "https://orcid.org/0000-0001-9017-591X" } ], "dateCreated": "", - "dateModified": "2024-12-12T11:24:21Z", + "dateModified": "2024-12-20T13:11:36Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", - "keywords": ["nf-core", "nextflow", "fusion", "fusion-genes", "gene-fusion", "rna", "rna-seq"], - "license": ["MIT"], + "keywords": [ + "nf-core", + "nextflow", + "fusion", + "fusion-genes", + "gene-fusion", + "rna", + "rna-seq" + ], + "license": [ + "MIT" + ], "maintainer": [ { "@id": "https://orcid.org/0000-0002-8178-3128" } ], - "name": ["nf-core/rnafusion"], + "name": [ + "nf-core/rnafusion" + ], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/rnafusion", "https://nf-co.re/rnafusion/dev/"], - "version": ["4.0.0dev"] + "url": [ + "https://github.com/nf-core/rnafusion", + "https://nf-co.re/rnafusion/dev/" + ], + "version": [ + "4.0.0dev" + ] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -169,11 +190,11 @@ "version": "!>=24.04.2" }, { - "@id": "#e018c319-519d-4a99-bdba-7c9c8860b896", + "@id": "#f907a90b-3444-4392-bd9f-cad7780c2dc3", "@type": "TestSuite", "instance": [ { - "@id": "#36a96043-5ef5-4bc3-86eb-32712383dda8" + "@id": "#7a00a302-505f-4b06-bd1c-5a4e1fa19bdd" } ], "mainEntity": { @@ -182,7 +203,7 @@ "name": "Test suite for nf-core/rnafusion" }, { - "@id": "#36a96043-5ef5-4bc3-86eb-32712383dda8", + "@id": "#7a00a302-505f-4b06-bd1c-5a4e1fa19bdd", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/rnafusion", "resource": "repos/nf-core/rnafusion/actions/workflows/ci.yml", @@ -310,18 +331,6 @@ "name": "nf-core", "url": "https://nf-co.re/" }, - { - "@id": "https://orcid.org/0000-0001-9017-591X", - "@type": "Person", - "email": "rickard.hammaren@scilifelab.se", - "name": "Rickard Hammar\u00e9n" - }, - { - "@id": "#phil.ewels@scilifelab.se", - "@type": "Person", - "email": "phil.ewels@scilifelab.se", - "name": "Phil Ewels" - }, { "@id": "https://orcid.org/0000-0002-8178-3128", "@type": "Person", @@ -333,6 +342,18 @@ "@type": "Person", "email": "max.u.garcia@gmail.com", "name": "Maxime Garcia" + }, + { + "@id": "#phil.ewels@scilifelab.se", + "@type": "Person", + "email": "phil.ewels@scilifelab.se", + "name": "Phil Ewels" + }, + { + "@id": "https://orcid.org/0000-0001-9017-591X", + "@type": "Person", + "email": "rickard.hammaren@scilifelab.se", + "name": "Rickard Hammar\u00e9n" } ] -} +} \ No newline at end of file diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index df68ef3ab..9ec640a61 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -117,7 +117,7 @@ workflow PIPELINE_COMPLETION { main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") def multiqc_reports = multiqc_report.toList() - + // // Completion email and summary // From ed4855edee9e3c01b3b8c8bb12c120c5676ebc82 Mon Sep 17 00:00:00 2001 From: Anabella Trigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:07:14 -0300 Subject: [PATCH 273/887] Update modules/local/starfusion/detect/main.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- modules/local/starfusion/detect/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index fd0a7d46b..f1f3d6f94 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -19,7 +19,7 @@ process STARFUSION { script: def prefix = task.ext.prefix ?: "${meta.id}" - def fasta = reads ? (meta.single_end ? "--left_fq ${reads[0]}" : "--left_fq ${reads[0]} --right_fq ${reads[1]}") : "" + def fastq_arg = reads ? (meta.single_end ? "--left_fq ${reads[0]}" : "--left_fq ${reads[0]} --right_fq ${reads[1]}") : "" def junction_arg = junction ? "-J ${junction}" : "" def args = task.ext.args ?: '' """ From f42d9dcf8917dc4c5ab982bc64b58d44ebff2298 Mon Sep 17 00:00:00 2001 From: Anabella Trigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:07:21 -0300 Subject: [PATCH 274/887] Update modules/local/starfusion/detect/main.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- modules/local/starfusion/detect/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index f1f3d6f94..00c78efc7 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -25,7 +25,7 @@ process STARFUSION { """ STAR-Fusion \\ --genome_lib_dir $reference \\ - $fasta \\ + $fastq_arg \\ $junction_arg \\ --CPU $task.cpus \\ --examine_coding_effect \\ From 910cf8d755973f0eb57bd0d1be4d69c23dda1597 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:27:28 +0000 Subject: [PATCH 275/887] test: add nf-test for starfusion subworkflow --- .../main.nf} | 15 +-- .../starfusion_workflow/tests/main.nf.test | 115 ++++++++++++++++++ .../tests/main.nf.test.snap | 38 ++++++ .../starfusion_workflow/tests/nextflow.config | 37 ++++++ 4 files changed, 198 insertions(+), 7 deletions(-) rename subworkflows/local/{starfusion_workflow.nf => starfusion_workflow/main.nf} (83%) create mode 100644 subworkflows/local/starfusion_workflow/tests/main.nf.test create mode 100644 subworkflows/local/starfusion_workflow/tests/main.nf.test.snap create mode 100644 subworkflows/local/starfusion_workflow/tests/nextflow.config diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow/main.nf similarity index 83% rename from subworkflows/local/starfusion_workflow.nf rename to subworkflows/local/starfusion_workflow/main.nf index 7f12f08a5..ed8d011ed 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -1,10 +1,9 @@ -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION_CRAM } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_STARFUSION } from '../../modules/nf-core/samtools/view/main' -include { STAR_ALIGN as STAR_FOR_STARFUSION } from '../../modules/nf-core/star/align/main' -include { STARFUSION } from '../../modules/local/starfusion/detect/main' - -include { CTATSPLICING_WORKFLOW } from './ctatsplicing_workflow' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION_CRAM } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_STARFUSION } from '../../../modules/nf-core/samtools/view/main' +include { STAR_ALIGN as STAR_FOR_STARFUSION } from '../../../modules/nf-core/star/align/main' +include { STARFUSION } from '../../../modules/local/starfusion/detect/main' +include { CTATSPLICING_WORKFLOW } from '../ctatsplicing_workflow' workflow STARFUSION_WORKFLOW { take: @@ -31,6 +30,8 @@ workflow STARFUSION_WORKFLOW { ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) ch_align = STAR_FOR_STARFUSION.out.bam_sorted + ch_align.view() + SAMTOOLS_INDEX_FOR_STARFUSION(STAR_FOR_STARFUSION.out.bam_sorted) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION.out.versions) bam_sorted_indexed = STAR_FOR_STARFUSION.out.bam_sorted.join(SAMTOOLS_INDEX_FOR_STARFUSION.out.bai) diff --git a/subworkflows/local/starfusion_workflow/tests/main.nf.test b/subworkflows/local/starfusion_workflow/tests/main.nf.test new file mode 100644 index 000000000..ac0e77982 --- /dev/null +++ b/subworkflows/local/starfusion_workflow/tests/main.nf.test @@ -0,0 +1,115 @@ +nextflow_workflow { + + name "Test Subworkflow STARFUSION_WORKFLOW" + script "../main.nf" + workflow "STARFUSION_WORKFLOW" + tag "subworkflow" + tag "star" + tag "star/genomegenerate" + tag "star/align" + + + test("STARFUSION_WORKFLOW - Homo sapiens - FASTQs minigenome") { + config './nextflow.config' + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main.nf" + process { + """ + // FASTA + input[0] = Channel.fromPath( + "https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + + // GTF + input[1] = Channel.fromPath( + "https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf", checkIfExists: true + ) + .map{ [[id: it.getName() ], it ]} + """ + } + } + + run("STARFUSION_BUILD") { + script "../../../../modules/local/starfusion/build/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome fasta' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") + ] + input[1] = [ + [ id:'minigenome gtf' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") + ] + + input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input [3] = "human" + """ + } + } + } + + when { + workflow { + """ + // ch_reads + input[0] = Channel.of( + [ + [ id: "test_fastqs" ], + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz", checkIfExists: true), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz", checkIfExists: true) + ] + ] ) + + // ch_gtf + input[1] = + Channel.fromPath( + "https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_starindex_ref + input[2] = STAR_GENOMEGENERATE.out.index + + // ch_fasta + input[3] = + Channel.fromPath( + "https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa", checkIfExists: true + ) + .map{ [ [ id: it.name ], it ] } + + // ch_starfusion_ref + input[4] = STARFUSION_BUILD.out.reference + + """ + } + params { + starfusion = true + cram = 'starfusion' + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.fusions, + file(workflow.out.star_stats[0][1]).name, + workflow.out.star_gene_count, + workflow.out.ch_bam_sorted, + workflow.out.ch_bam_sorted_indexed, + workflow.out.versions + ).match() } + ) + } + } + + + + +} diff --git a/subworkflows/local/starfusion_workflow/tests/main.nf.test.snap b/subworkflows/local/starfusion_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..5bc897e7f --- /dev/null +++ b/subworkflows/local/starfusion_workflow/tests/main.nf.test.snap @@ -0,0 +1,38 @@ +{ + "STARFUSION_WORKFLOW - Homo sapiens - FASTQs minigenome": { + "content": [ + [ + [ + { + "id": "test_fastqs" + }, + "test_fastqs.starfusion.fusion_predictions.tsv:md5,abe17134a231642edf9351e4964e8a97" + ] + ], + "test_fastqs.Log.final.out", + [ + [ + { + "id": "test_fastqs" + }, + "test_fastqs.ReadsPerGene.out.tab:md5,8e0d42deeea09924d5c7ba3147bbfd78" + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,afde4f2fd6056df81e322b3c35ab7a8a", + "versions.yml:md5,e53f1ec32bc78a33f99892e42274833a" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-23T18:25:52.838411738" + } +} \ No newline at end of file diff --git a/subworkflows/local/starfusion_workflow/tests/nextflow.config b/subworkflows/local/starfusion_workflow/tests/nextflow.config new file mode 100644 index 000000000..718add69c --- /dev/null +++ b/subworkflows/local/starfusion_workflow/tests/nextflow.config @@ -0,0 +1,37 @@ +process { + withName: 'STAR_FOR_STARFUSION' { + ext.args = '--twopassMode Basic \ + --outReadsUnmapped None \ + --readFilesCommand zcat \ + --outSAMtype BAM SortedByCoordinate \ + --outSAMstrandField intronMotif \ + --outSAMunmapped Within \ + --chimSegmentMin 12 \ + --chimJunctionOverhangMin 8 \ + --chimOutJunctionFormat 1 \ + --alignSJDBoverhangMin 10 \ + --alignMatesGapMax 100000 \ + --alignIntronMax 100000 \ + --alignSJstitchMismatchNmax 5 -1 5 5 \ + --chimMultimapScoreRange 3 \ + --chimScoreJunctionNonGTAG -4 \ + --chimMultimapNmax 20 \ + --chimNonchimScoreDropMin 10 \ + --peOverlapNbasesMin 12 \ + --peOverlapMMp 0.1 \ + --alignInsertionFlush Right \ + --alignSplicedMateMapLminOverLmate 0 \ + --alignSplicedMateMapLmin 30 \ + --chimOutType Junctions \ + --quantMode GeneCounts' + } + + withName: 'SAMTOOLS_INDEX_FOR_STARFUSION_CRAM' { + ext.prefix = { "${meta.id}.star_for_starfusion.Aligned.sortedByCoord.out" } + } + + withName: 'SAMTOOLS_VIEW_FOR_STARFUSION' { + ext.args = { "--output-fmt cram" } + ext.prefix = { "${meta.id}.star_for_starfusion.Aligned.sortedByCoord.out" } + } +} From e23ff3919dc86d6f33a580c01c0212df77ce1810 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:29:18 +0000 Subject: [PATCH 276/887] chore: add todo message --- subworkflows/local/starfusion_workflow/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index ed8d011ed..11aa816b9 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -28,7 +28,7 @@ workflow STARFUSION_WORKFLOW { } else { STAR_FOR_STARFUSION( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) - ch_align = STAR_FOR_STARFUSION.out.bam_sorted + ch_align = STAR_FOR_STARFUSION.out.bam_sorted // TODO: This does not seem to be captured and used as the output is bam_sorted_aligned and not bam_sorted ch_align.view() From d5ce9dca56b51ad5a10a4d32bcf052773d041958 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:31:18 +0000 Subject: [PATCH 277/887] fix: remove commited debug view --- subworkflows/local/starfusion_workflow/main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index 11aa816b9..938832c96 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -30,7 +30,6 @@ workflow STARFUSION_WORKFLOW { ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) ch_align = STAR_FOR_STARFUSION.out.bam_sorted // TODO: This does not seem to be captured and used as the output is bam_sorted_aligned and not bam_sorted - ch_align.view() SAMTOOLS_INDEX_FOR_STARFUSION(STAR_FOR_STARFUSION.out.bam_sorted) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION.out.versions) From ef8897794ac01fb7d24263669ae5680bf01940e7 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:34:16 +0000 Subject: [PATCH 278/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d947b9004..e7288298d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `STARFUSION_DETECT`. [#586](https://github.com/nf-core/rnafusion/pull/586) - Added a new module `CTATSPLICING_STARTOCANCERINTRONS` and a new parameter `--ctatsplicing`. This options creates reports on cancer splicing abberations and requires one or both of `--arriba` and `--starfusion` to be given. [#587](https://github.com/nf-core/rnafusion/pull/587) - Add parameter `--references_only` when no data should be analysed, but only the references should be built [#505](https://github.com/nf-core/rnafusion/pull/505) +- Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) ### Changed From 046620eeaa50507047294f14ac5b405d6681d994 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:52:18 +0000 Subject: [PATCH 279/887] chore: remove unused module `starfusion_downloadgenome` --- conf/modules.config | 10 ------ .../local/starfusion/download/environment.yml | 8 ----- modules/local/starfusion/download/main.nf | 34 ------------------- modules/local/starfusion/download/meta.yml | 25 -------------- 4 files changed, 77 deletions(-) delete mode 100644 modules/local/starfusion/download/environment.yml delete mode 100644 modules/local/starfusion/download/main.nf delete mode 100644 modules/local/starfusion/download/meta.yml diff --git a/conf/modules.config b/conf/modules.config index b3643f48f..31a1d208f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -371,16 +371,6 @@ process { ext.args = "--max_readlength ${params.read_length} --human_gencode_filter" } - withName: 'STARFUSION_DOWNLOAD' { - cpus = { 2 * task.attempt } - memory = { 24.GB * task.attempt } - time = { 6.h * task.attempt } - publishDir = [ - path: { "${params.genomes_base}/starfusion" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } withName: 'STRINGTIE_MERGE' { publishDir = [ diff --git a/modules/local/starfusion/download/environment.yml b/modules/local/starfusion/download/environment.yml deleted file mode 100644 index ef7f93160..000000000 --- a/modules/local/starfusion/download/environment.yml +++ /dev/null @@ -1,8 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - bioconda::dfam=3.7 - - bioconda::hmmer=3.4 - - bioconda::minimap2=2.28 - - bioconda::star-fusion=1.14.0 diff --git a/modules/local/starfusion/download/main.nf b/modules/local/starfusion/download/main.nf deleted file mode 100644 index ace18a9e7..000000000 --- a/modules/local/starfusion/download/main.nf +++ /dev/null @@ -1,34 +0,0 @@ -process STARFUSION_DOWNLOAD { - tag 'star-fusion' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" - - output: - path "ctat_genome_lib_build_dir/*" , emit: reference - - - // TODO: move to S3 - script: - """ - wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/__genome_libs_StarFv1.10/GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz --no-check-certificate - - tar xvf GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz - - rm GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz - - mv */ctat_genome_lib_build_dir . - """ - - stub: - """ - mkdir ctat_genome_lib_build_dir - touch ref_annot.cdna.fa - cat <<-END_VERSIONS > versions.yml - "${task.process}": - STAR-Fusion: \$(STAR-Fusion --version 2>&1 | grep -i 'version' | sed 's/STAR-Fusion version: //') - END_VERSIONS - """ -} diff --git a/modules/local/starfusion/download/meta.yml b/modules/local/starfusion/download/meta.yml deleted file mode 100644 index 24e842520..000000000 --- a/modules/local/starfusion/download/meta.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: starfusion_downloadgenome -description: Download STAR-fusion genome resource required to run STAR-Fusion caller -keywords: - - downoad -tools: - - star-fusion: - description: Fusion calling algorithm for RNAseq data - homepage: https://github.com/STAR-Fusion/ - documentation: https://github.com/STAR-Fusion/STAR-Fusion/wiki/installing-star-fusion - tool_dev_url: https://github.com/STAR-Fusion/STAR-Fusion - doi: "10.1186/s13059-019-1842-9" - licence: ["GPL v3"] - -output: - - reference: - type: directory - description: Genome resource path - pattern: "star-fusion-genome" - - gtf: - type: file - description: genome gtf file - pattern: "*.{gtf}" - -authors: - - "@praveenraj2018,@rannick" From 3d82388333e3ac40c9e37c1821026366478828e3 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:52:36 +0000 Subject: [PATCH 280/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d947b9004..32c7dca90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Integrate reference building in the main workflow [#505](https://github.com/nf-core/rnafusion/pull/505) - Move from ensembl to gencode base [#505](https://github.com/nf-core/rnafusion/pull/505) - Update from ensembl 102 to gencode 46 default references [#505](https://github.com/nf-core/rnafusion/pull/505) +- Remove local module `STARFUSION_DOWNLOAD` [#598](https://github.com/nf-core/rnafusion/pull/598) ### Fixed From b514ff6742396efdbc99a32ef59d95651df31c2e Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 26 Dec 2024 14:33:16 +0000 Subject: [PATCH 281/887] feat: update fusioinspector to 2.10.0 --- modules/local/fusioninspector/environment.yml | 5 +---- modules/local/fusioninspector/main.nf | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index ef7f93160..ce6545e4d 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -2,7 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::dfam=3.7 - - bioconda::hmmer=3.4 - - bioconda::minimap2=2.28 - - bioconda::star-fusion=1.14.0 + - bioconda::fusion-inspector=2.10.0 diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index ade7c174a..c7f613b47 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d98081910b41caa0b62d892e7a44543183111afa2b0a5eea5a4a9472eea72611/data' : + 'community.wave.seqera.io/library/fusion-inspector:2.10.0--b59230553c98db81'}" input: tuple val(meta), path(reads), path(fusion_list) From 96485cce0088c02de624d027673e090eddc22451 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:19:53 +0000 Subject: [PATCH 282/887] fix: update container with missing dependencies --- modules/local/fusioninspector/environment.yml | 6 ++++++ modules/local/fusioninspector/main.nf | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index ce6545e4d..821d154d5 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -3,3 +3,9 @@ channels: - bioconda dependencies: - bioconda::fusion-inspector=2.10.0 + - bioconda::igv-reports=1.14.1 + - bioconda::perl-json-xs=4.03 + - bioconda::pysam=0.22.1 + - pip + - pip: + - intervaltree==3.1.0 diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index c7f613b47..9ec2c3db9 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d98081910b41caa0b62d892e7a44543183111afa2b0a5eea5a4a9472eea72611/data' : - 'community.wave.seqera.io/library/fusion-inspector:2.10.0--b59230553c98db81'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0eb08b2bd07e8012eabea34ec26304ef36b3a3bf338cdd6658ce7ab8a9c2937/data' : + 'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:d78d0c462ca32766'}" input: tuple val(meta), path(reads), path(fusion_list) From 10c6b563eef982ee6acaa3e4527288d92f0e33f0 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:39:45 +0000 Subject: [PATCH 283/887] test: add full path to avoid impacting nf-test --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index b3643f48f..c747fda77 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -114,7 +114,7 @@ process { ] } - withName: 'FUSIONINSPECTOR' { + withName: '.*FUSIONINSPECTOR_WORKFLOW:.*:FUSIONINSPECTOR' { ext.when = { !params.skip_vis } ext.args = { ${params.fusioninspector_limitSjdbInsertNsj} != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' } ext.args2 = '--annotate --examine_coding_effect' From 451902f49337448b8b1762226b9719a0f9611cfc Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:01:20 +0000 Subject: [PATCH 284/887] test: add nf-test --- .../local/fusioninspector/tests/main.nf.test | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 modules/local/fusioninspector/tests/main.nf.test diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test new file mode 100644 index 000000000..529699dc4 --- /dev/null +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -0,0 +1,62 @@ +nextflow_process { + + name "Test Process FUSIONINSPECTOR" + script "../main.nf" + process "FUSIONINSPECTOR" + tag "modules" + tag "modules_local" + tag "fusioninspector" + + test("FUSIONINSPECTOR") { + + setup { + run("STARFUSION_BUILD") { + script "/workspace/rnafusion/modules/local/starfusion/build/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome fasta' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") + ] + input[1] = [ + [ id:'minigenome gtf' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") + ] + + input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input [3] = "human" + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") + ], // reads + [ + file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt") + ] + ] + input[1] = STARFUSION_BUILD.out.reference.map { it[1] } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out).match() } + ) + } + + } + + +} From a52ce22aeaddb62d19a5241fac7e7e8eacc61648 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:01:35 +0000 Subject: [PATCH 285/887] fix: emit log only and not all outputs --- modules/local/fusioninspector/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 9ec2c3db9..3fec42fa8 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -15,7 +15,7 @@ process FUSIONINSPECTOR { tuple val(meta), path("*FusionInspector.fusions.tsv") , emit: tsv tuple val(meta), path("*.coding_effect") , optional:true, emit: tsv_coding_effect tuple val(meta), path("*.gtf") , optional:true, emit: out_gtf - path "*" , emit: output + tuple val(meta), path("*FusionInspector.log") , emit: log path "versions.yml" , emit: versions when: From 32ee3a2485c186dbf05f29e33327270ba1ef07a4 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 26 Dec 2024 23:25:45 +0000 Subject: [PATCH 286/887] fix: update dependencies in container --- modules/local/fusioninspector/environment.yml | 1 + modules/local/fusioninspector/main.nf | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index 821d154d5..18677c2c2 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -6,6 +6,7 @@ dependencies: - bioconda::igv-reports=1.14.1 - bioconda::perl-json-xs=4.03 - bioconda::pysam=0.22.1 + - conda-forge::perl-carp-assert - pip - pip: - intervaltree==3.1.0 diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 3fec42fa8..d27953e18 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0eb08b2bd07e8012eabea34ec26304ef36b3a3bf338cdd6658ce7ab8a9c2937/data' : - 'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:d78d0c462ca32766'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/7d/7dbc3bb67499701633a925b0ed03f58ffb03d0a4c37a86a53c38ebe9a8a6cc37/data' : + 'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:b1cf35ad505b66a4'}" input: tuple val(meta), path(reads), path(fusion_list) From 08105922138f4bf5b5a3b54f7dee167302eb56a8 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 26 Dec 2024 23:26:19 +0000 Subject: [PATCH 287/887] test: add config and update test --- .../local/fusioninspector/tests/main.nf.test | 38 ++++++ .../fusioninspector/tests/main.nf.test.snap | 119 ++++++++++++++++++ .../fusioninspector/tests/nextflow.config | 5 + 3 files changed, 162 insertions(+) create mode 100644 modules/local/fusioninspector/tests/main.nf.test.snap create mode 100644 modules/local/fusioninspector/tests/nextflow.config diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index 529699dc4..ef853b71a 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -8,6 +8,7 @@ nextflow_process { tag "fusioninspector" test("FUSIONINSPECTOR") { + config './nextflow.config' setup { run("STARFUSION_BUILD") { @@ -48,6 +49,43 @@ nextflow_process { } } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.tsv, + process.out.tsv_coding_effect, // TODO: These files do not seem to be produced. Consult Annick. + process.out.out_gtf, // TODO: These files do not seem to be produced. Consult Annick. + file(process.out.log[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("FUSIONINSPECTOR - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") + ], // reads + [ + file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt") + ] + ] + input[1] = [] + """ + } + } + then { assertAll( { assert process.success }, diff --git a/modules/local/fusioninspector/tests/main.nf.test.snap b/modules/local/fusioninspector/tests/main.nf.test.snap new file mode 100644 index 000000000..5a90f3745 --- /dev/null +++ b/modules/local/fusioninspector/tests/main.nf.test.snap @@ -0,0 +1,119 @@ +{ + "FUSIONINSPECTOR - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.fusions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.fusions.tsv.annotated.coding_effect:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "out_gtf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.fusions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv_coding_effect": [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.fusions.tsv.annotated.coding_effect:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-26T23:13:02.858688488" + }, + "FUSIONINSPECTOR": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.fusions.tsv:md5,63d2b8205f7725d1c8458c642b1cde61" + ] + ], + [ + + ], + [ + + ], + "FusionInspector.log", + [ + "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-26T23:12:44.532760924" + } +} \ No newline at end of file diff --git a/modules/local/fusioninspector/tests/nextflow.config b/modules/local/fusioninspector/tests/nextflow.config new file mode 100644 index 000000000..ca61431b2 --- /dev/null +++ b/modules/local/fusioninspector/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'FUSIONINSPECTOR' { + ext.args = '--annotate --examine_coding_effect' + } +} From 8bc24f29e0c185930efe49f1dbf00104434822f6 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 12:47:00 +0000 Subject: [PATCH 288/887] docs: update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7288298d..b2ddfa6a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a new module `CTATSPLICING_STARTOCANCERINTRONS` and a new parameter `--ctatsplicing`. This options creates reports on cancer splicing abberations and requires one or both of `--arriba` and `--starfusion` to be given. [#587](https://github.com/nf-core/rnafusion/pull/587) - Add parameter `--references_only` when no data should be analysed, but only the references should be built [#505](https://github.com/nf-core/rnafusion/pull/505) - Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) +- Add nf-test to local module: `FUSIONINSPECTOR`. [#601](https://github.com/nf-core/rnafusion/pull/601) ### Changed @@ -40,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Integrate reference building in the main workflow [#505](https://github.com/nf-core/rnafusion/pull/505) - Move from ensembl to gencode base [#505](https://github.com/nf-core/rnafusion/pull/505) - Update from ensembl 102 to gencode 46 default references [#505](https://github.com/nf-core/rnafusion/pull/505) +- Update`FUSIONINSPECTOR` to v2.10.0. [#601](https://github.com/nf-core/rnafusion/pull/601) ### Fixed From 1545ae655b9674c89d40355888717a36340356fe Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 14:00:38 +0000 Subject: [PATCH 289/887] fix: add missing script --- bin/gtf2bed | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100755 bin/gtf2bed diff --git a/bin/gtf2bed b/bin/gtf2bed new file mode 100755 index 000000000..cfa91cf76 --- /dev/null +++ b/bin/gtf2bed @@ -0,0 +1,123 @@ +#!/usr/bin/env perl + +# Copyright (c) 2011 Erik Aronesty (erik@q32.com) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# ALSO, IT WOULD BE NICE IF YOU LET ME KNOW YOU USED IT. + +use Getopt::Long; + +my $extended; +GetOptions("x"=>\$extended); + +$in = shift @ARGV; + +my $in_cmd =($in =~ /\.gz$/ ? "gunzip -c $in|" : $in =~ /\.zip$/ ? "unzip -p $in|" : "$in") || die "Can't open $in: $!\n"; +open IN, $in_cmd; + +while () { + $gff = 2 if /^##gff-version 2/; + $gff = 3 if /^##gff-version 3/; + next if /^#/ && $gff; + + s/\s+$//; + # 0-chr 1-src 2-feat 3-beg 4-end 5-scor 6-dir 7-fram 8-attr + my @f = split /\t/; + if ($gff) { + # most ver 2's stick gene names in the id field + ($id) = $f[8]=~ /\bID="([^"]+)"/; + # most ver 3's stick unquoted names in the name field + ($id) = $f[8]=~ /\bName=([^";]+)/ if !$id && $gff == 3; + } else { + ($id) = $f[8]=~ /transcript_id "([^"]+)"/; + } + + next unless $id && $f[0]; + + if ($f[2] eq 'exon') { + die "no position at exon on line $." if ! $f[3]; + # gff3 puts :\d in exons sometimes + $id =~ s/:\d+$// if $gff == 3; + push @{$exons{$id}}, \@f; + # save lowest start + $trans{$id} = \@f if !$trans{$id}; + } elsif ($f[2] eq 'start_codon') { + #optional, output codon start/stop as "thick" region in bed + $sc{$id}->[0] = $f[3]; + } elsif ($f[2] eq 'stop_codon') { + $sc{$id}->[1] = $f[4]; + } elsif ($f[2] eq 'miRNA' ) { + $trans{$id} = \@f if !$trans{$id}; + push @{$exons{$id}}, \@f; + } +} + +for $id ( + # sort by chr then pos + sort { + $trans{$a}->[0] eq $trans{$b}->[0] ? + $trans{$a}->[3] <=> $trans{$b}->[3] : + $trans{$a}->[0] cmp $trans{$b}->[0] + } (keys(%trans)) ) { + my ($chr, undef, undef, undef, undef, undef, $dir, undef, $attr, undef, $cds, $cde) = @{$trans{$id}}; + my ($cds, $cde); + ($cds, $cde) = @{$sc{$id}} if $sc{$id}; + + # sort by pos + my @ex = sort { + $a->[3] <=> $b->[3] + } @{$exons{$id}}; + + my $beg = $ex[0][3]; + my $end = $ex[-1][4]; + + if ($dir eq '-') { + # swap + $tmp=$cds; + $cds=$cde; + $cde=$tmp; + $cds -= 2 if $cds; + $cde += 2 if $cde; + } + + # not specified, just use exons + $cds = $beg if !$cds; + $cde = $end if !$cde; + + # adjust start for bed + --$beg; --$cds; + + my $exn = @ex; # exon count + my $exst = join ",", map {$_->[3]-$beg-1} @ex; # exon start + my $exsz = join ",", map {$_->[4]-$_->[3]+1} @ex; # exon size + + my $gene_id; + my $extend = ""; + if ($extended) { + ($gene_id) = $attr =~ /gene_name "([^"]+)"/; + ($gene_id) = $attr =~ /gene_id "([^"]+)"/ unless $gene_id; + $extend="\t$gene_id"; + } + # added an extra comma to make it look exactly like ucsc's beds + print "$chr\t$beg\t$end\t$id\t0\t$dir\t$cds\t$cde\t0\t$exn\t$exsz,\t$exst,$extend\n"; +} + + +close IN; From 0bb2fa85609f16d2b1f6b14834e829d18b588e61 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 14:00:46 +0000 Subject: [PATCH 290/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7e358ea0..e61cc28a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed bug in nf-core `RRNATRANSCRIPTS` module [#563](https://github.com/nf-core/rnafusion/issues/563) - Fixed bug in `GFFREAD` that caused output `gffread_fasta` not being produced [#565](https://github.com/nf-core/rnafusion/issues/565) - Fixed bug in `FUSIONCATCHER_DOWNLOAD` that caused an error when running with singularity profile [#573](https://github.com/nf-core/rnafusion/issues/573) +- Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) ### Removed From db29ef1256e78ddf0cd9f222dd1cd2b105e5ae49 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 15:36:55 +0000 Subject: [PATCH 291/887] chore: remove unused module `bedops/convert2bed` --- modules.json | 5 -- .../bedops/convert2bed/environment.yml | 5 -- modules/nf-core/bedops/convert2bed/main.nf | 48 ------------- modules/nf-core/bedops/convert2bed/meta.yml | 45 ------------ .../bedops/convert2bed/tests/main.nf.test | 59 ---------------- .../convert2bed/tests/main.nf.test.snap | 68 ------------------- .../nf-core/bedops/convert2bed/tests/tags.yml | 2 - 7 files changed, 232 deletions(-) delete mode 100644 modules/nf-core/bedops/convert2bed/environment.yml delete mode 100644 modules/nf-core/bedops/convert2bed/main.nf delete mode 100644 modules/nf-core/bedops/convert2bed/meta.yml delete mode 100644 modules/nf-core/bedops/convert2bed/tests/main.nf.test delete mode 100644 modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap delete mode 100644 modules/nf-core/bedops/convert2bed/tests/tags.yml diff --git a/modules.json b/modules.json index b41d5fa59..0c6c55177 100644 --- a/modules.json +++ b/modules.json @@ -20,11 +20,6 @@ "git_sha": "467c202a876d26af544fa8c4b22a050a535462a7", "installed_by": ["modules"] }, - "bedops/convert2bed": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/bedops/convert2bed/environment.yml b/modules/nf-core/bedops/convert2bed/environment.yml deleted file mode 100644 index 3c13066f7..000000000 --- a/modules/nf-core/bedops/convert2bed/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - "bioconda::bedops=2.4.41" diff --git a/modules/nf-core/bedops/convert2bed/main.nf b/modules/nf-core/bedops/convert2bed/main.nf deleted file mode 100644 index a23efbd56..000000000 --- a/modules/nf-core/bedops/convert2bed/main.nf +++ /dev/null @@ -1,48 +0,0 @@ -process BEDOPS_CONVERT2BED { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bedops:2.4.41--h4ac6f70_2': - 'biocontainers/bedops:2.4.41--h4ac6f70_2' }" - - input: - tuple val(meta), path(in_file) - - output: - tuple val(meta), path("*.bed"), emit: bed - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def format = in_file.getExtension() - """ - convert2bed \\ - $args \\ - -i $format \\ - < $in_file \\ - > ${prefix}.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedops/convert2bed: \$(convert2bed --version | grep vers | sed 's/^.*.version: //') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedops/convert2bed: \$(convert2bed --version | grep vers | sed 's/^.*.version: //') - END_VERSIONS - """ -} diff --git a/modules/nf-core/bedops/convert2bed/meta.yml b/modules/nf-core/bedops/convert2bed/meta.yml deleted file mode 100644 index 6d84c0316..000000000 --- a/modules/nf-core/bedops/convert2bed/meta.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: "bedops_convert2bed" -description: Convert BAM/GFF/GTF/GVF/PSL files to bed -keywords: - - convert - - bed - - genomics -tools: - - "bedops": - description: "High-performance genomic feature operations." - homepage: "https://bedops.readthedocs.io/en/latest/content/reference/file-management/conversion/convert2bed.html#convert2bed" - documentation: "https://bedops.readthedocs.io/en/latest/" - tool_dev_url: "https://github.com/bedops" - doi: "10.1093/bioinformatics/bts277" - licence: ["GNU v2"] - identifier: biotools:bedops - -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - in_file: - type: file - description: Input file -output: - - bed: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.bed": - type: file - description: Sorted BED file - pattern: "*.{bed}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@rannick" -maintainers: - - "@rannick" diff --git a/modules/nf-core/bedops/convert2bed/tests/main.nf.test b/modules/nf-core/bedops/convert2bed/tests/main.nf.test deleted file mode 100644 index 3f2b193a6..000000000 --- a/modules/nf-core/bedops/convert2bed/tests/main.nf.test +++ /dev/null @@ -1,59 +0,0 @@ -// nf-core modules test bedops/convert2bed -nextflow_process { - - name "Test Process BEDOPS_CONVERT2BED" - script "../main.nf" - process "BEDOPS_CONVERT2BED" - - tag "modules" - tag "modules_nfcore" - tag "bedops" - tag "bedops/convert2bed" - - test("sarscov2 - gtf") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("sarscov2 - gtf - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap b/modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap deleted file mode 100644 index e2482924d..000000000 --- a/modules/nf-core/bedops/convert2bed/tests/main.nf.test.snap +++ /dev/null @@ -1,68 +0,0 @@ -{ - "sarscov2 - gtf - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" - ], - "bed": [ - [ - { - "id": "test" - }, - "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-11T12:06:14.755423333" - }, - "sarscov2 - gtf": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.bed:md5,adfdd36e848a62f4b0ea8a694abe9659" - ] - ], - "1": [ - "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" - ], - "bed": [ - [ - { - "id": "test" - }, - "test.bed:md5,adfdd36e848a62f4b0ea8a694abe9659" - ] - ], - "versions": [ - "versions.yml:md5,d3d58dde1d9baba3700ff9fb5a45ce5b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-11T12:06:08.876003152" - } -} \ No newline at end of file diff --git a/modules/nf-core/bedops/convert2bed/tests/tags.yml b/modules/nf-core/bedops/convert2bed/tests/tags.yml deleted file mode 100644 index fd2c29935..000000000 --- a/modules/nf-core/bedops/convert2bed/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -bedops/convert2bed: - - "modules/nf-core/bedops/convert2bed/**" From 628cc842229572a212b4214fa8d25cf87dc928e4 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 15:41:20 +0000 Subject: [PATCH 292/887] fix: remove hardcoded script --- modules/local/fusioninspector/tests/main.nf.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index ef853b71a..c61e0d6ab 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -12,7 +12,7 @@ nextflow_process { setup { run("STARFUSION_BUILD") { - script "/workspace/rnafusion/modules/local/starfusion/build/main.nf" + script "../../starfusion/build/main.nf" process { """ input[0] = [ From 856449d939a0c2563638356a3713b506194339ae Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 16:07:51 +0000 Subject: [PATCH 293/887] fix: python script does not take flags --- modules/local/get_rrna_transcript/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/get_rrna_transcript/main.nf b/modules/local/get_rrna_transcript/main.nf index 5331f534a..901c17b42 100644 --- a/modules/local/get_rrna_transcript/main.nf +++ b/modules/local/get_rrna_transcript/main.nf @@ -20,7 +20,7 @@ process GET_RRNA_TRANSCRIPTS { script: """ - $baseDir/bin/get_rrna_transcripts.py --gtf ${gtf} --output rrna.gtf + $baseDir/bin/get_rrna_transcripts.py ${gtf} rrna.gtf $baseDir/bin/gtf2bed rrna.gtf > rrna.bed From e6f35a670d0f4313e0f050fd0d4d624894d20dcb Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 16:19:12 +0000 Subject: [PATCH 294/887] chore: add fixed version of dependencies --- modules/local/fusioninspector/environment.yml | 2 +- modules/local/fusioninspector/main.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/fusioninspector/environment.yml b/modules/local/fusioninspector/environment.yml index 18677c2c2..26605058b 100644 --- a/modules/local/fusioninspector/environment.yml +++ b/modules/local/fusioninspector/environment.yml @@ -6,7 +6,7 @@ dependencies: - bioconda::igv-reports=1.14.1 - bioconda::perl-json-xs=4.03 - bioconda::pysam=0.22.1 - - conda-forge::perl-carp-assert + - conda-forge::perl-carp-assert=0.21 - pip - pip: - intervaltree==3.1.0 diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index d27953e18..cd45b6733 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/7d/7dbc3bb67499701633a925b0ed03f58ffb03d0a4c37a86a53c38ebe9a8a6cc37/data' : - 'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:b1cf35ad505b66a4'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/13/139b94a1f10c6e23a8c27eaed1e5a689db978a513d0ee155e74d35f0970814fe/data' : + 'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:c6147971d107ab11'}" input: tuple val(meta), path(reads), path(fusion_list) From 6ec93a2a7bac07f76ddaf7d62bce48f3b7dcb778 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 16:40:37 +0000 Subject: [PATCH 295/887] test: update tests --- modules/local/fusioninspector/tests/main.nf.test | 2 +- .../local/fusioninspector/tests/main.nf.test.snap | 12 ++---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index c61e0d6ab..0189f8679 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -53,7 +53,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - process.out.tsv, + file(process.out.tsv[0][1]).name, process.out.tsv_coding_effect, // TODO: These files do not seem to be produced. Consult Annick. process.out.out_gtf, // TODO: These files do not seem to be produced. Consult Annick. file(process.out.log[0][1]).name, diff --git a/modules/local/fusioninspector/tests/main.nf.test.snap b/modules/local/fusioninspector/tests/main.nf.test.snap index 5a90f3745..08ced813f 100644 --- a/modules/local/fusioninspector/tests/main.nf.test.snap +++ b/modules/local/fusioninspector/tests/main.nf.test.snap @@ -90,15 +90,7 @@ }, "FUSIONINSPECTOR": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.FusionInspector.fusions.tsv:md5,63d2b8205f7725d1c8458c642b1cde61" - ] - ], + "test.FusionInspector.fusions.tsv", [ ], @@ -114,6 +106,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2024-12-26T23:12:44.532760924" + "timestamp": "2024-12-27T16:38:17.787825557" } } \ No newline at end of file From 9f656f3f752a87c9e127bf88bc5670b40d8b727f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 23:08:48 +0000 Subject: [PATCH 296/887] test: add build test --- conf/test_build.config | 29 +++- tests/test_build.nf.test | 40 +++++ tests/test_build.nf.test.snap | 313 ++++++++++++++++++++++++++++++++++ 3 files changed, 380 insertions(+), 2 deletions(-) create mode 100644 tests/test_build.nf.test create mode 100644 tests/test_build.nf.test.snap diff --git a/conf/test_build.config b/conf/test_build.config index e577ada58..971e386ae 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -5,9 +5,28 @@ Defines input files and everything required to run a fast and simple pipeline test. Use as follows: - nextflow run nf-core/rnafusion -profile test_build, --outdir -stub + nextflow run nf-core/rnafusion -profile test_build, --outdir ---------------------------------------------------------------------------------------- +Uses a minimal fasta and gtf for testing purposes. +This test is designed to test the `build_references` subworkflow with the following processes on: +- SAMTOOLS_FAIDX +- HGNC_DOWNLOAD +- GATK4_CREATESEQUENCEDICTIONARY +- GET_RRNA_TRANSCRIPTS +- GATK4_BEDTOINTERVALLIST +- GTF_TO_REFFLAT +- GFFREAD +- STAR_GENOMEGENERATE +- ARRIBA_DOWNLOAD +- STARFUSION_BUILD +- FUSIONREPORT_DOWNLOAD + +It does not test the following processes of the `build_references` subworkflow: +- GENCODE_DOWNLOAD +- FUSIONCATCHER_BUILD + +It does not test the main rnafusion subworkflows by setting references_only = true. */ params { @@ -18,7 +37,13 @@ params { references_only = true input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' no_cosmic = true - all = true + all = false + arriba = true + fusioncatcher = false + starfusion = true + fasta = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa' + gtf = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf' + fusionreport = true skip_salmon_index = true starfusion_build = true diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test new file mode 100644 index 000000000..1dbda8336 --- /dev/null +++ b/tests/test_build.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + profile "test_build" + tag "pipeline" + tag "pipeline_rnafusion" + tag "test_build" + + test("Test build references") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + +} diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap new file mode 100644 index 000000000..0b274b02a --- /dev/null +++ b/tests/test_build.nf.test.snap @@ -0,0 +1,313 @@ +{ + "Test build references": { + "content": [ + 12, + { + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "gatk4", + "gatk4/minigenome.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/minigenome.fa.fai", + "references/gencode/minigenome.gtf.interval_list", + "references/gencode/minigenome.gtf.refflat", + "references/gffread", + "references/gffread/minigenome.gtf.fasta", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "starfusion", + "starfusion/ctat_genome_lib_build_dir", + "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "starfusion/ctat_genome_lib_build_dir/__chkpts", + "starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz" + ], + [ + "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", + "rrna.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "rrna.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,7bd504feefb33fcfc9be0517439a423c", + "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,43c387a784ebeed71b4147076cebf978", + "DB-timestamp.txt:md5,119d4ae64c2c23db9ed31b4b4814f920", + "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusiongdb2.db:md5,e1ac123a744e515d3e5f85b8344d526a", + "mitelman.db:md5,1363795c97f77c641065ecd9ad0e484a", + "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", + "minigenome.gtf.interval_list:md5,9111fe876b17e5c18314206e9f985b8c", + "minigenome.gtf.refflat:md5,ed76bc063c98087f1100a928923758c7", + "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", + "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", + "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", + "ctable.bin:md5,f66735de11dbe0b7e67eddfbfaa47755", + "ctg_offsets.bin:md5,174ead59c00c5264300d3ff1de673074", + "duplicate_clusters.tsv:md5,d30ab58d133298ed9ba51f1ba20ce89c", + "info.json:md5,d91d8a954afcb4be9fe7bfb3e84b5be6", + "mphf.bin:md5,b364192c6c73de4c38ec2ed0750f5155", + "pos.bin:md5,c5890a6dd72e6c67ee90df49d62f387a", + "pre_indexing.log:md5,d095ca4b33aaaa1c90e1b995f3f99806", + "rank.bin:md5,3fe9c2dc9da7faff6362510c4f29e87d", + "refAccumLengths.bin:md5,26d9405e7591ec9a606caa36a094941a", + "ref_indexing.log:md5,f93fde6763cd03ae82686887601e9c0d", + "reflengths.bin:md5,187a4a0dee316c5dbf440fa3c58d9eec", + "refseq.bin:md5,712c4a8d988c15016ea746db7022e549", + "seq.bin:md5,f5cfb96c509b37c24b5f1fd5541f7a24", + "versionInfo.json:md5,d2c799050e81aa6e282ac8a73e773941", + "Genome:md5,1621486e3b854fefa37c0b4e77275233", + "Log.out:md5,a56a6e8003d61f86b7602ba471d042d5", + "SA:md5,9b6b936f3a8a1232c4fc5533daf9401d", + "SAindex:md5,8b2025227b78fdc83e3e5b17c0f538f7", + "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", + "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", + "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", + "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", + "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", + "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", + "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", + "genomeParameters.txt:md5,15d295386ecac0ebad47f2c795fb2eb9", + "sjdbInfo.txt:md5,f044cb1cd38af66c832f3afc4b1655cb", + "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", + "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", + "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", + "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "PFAM.domtblout.dat.gz:md5,ff17bbcb36ec03a6bd70685419e847eb", + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.dat.gz:md5,ba17ee9dab2dd5e2ed4f93031d61bdd0", + "blast_pairs.idx:md5,f8cb62c4c39b41b3a85997945fd1fab2", + "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", + "fusion_annot_lib.idx:md5,53d8a5c7b45b673e68464867024643f7", + "pfam_domains.dbm:md5,030800270e0d59674f89d4774fbe492b", + "ref_annot.cdna.fa:md5,22cdf266a4f2f894c9b880c54df03413", + "ref_annot.cdna.fa.idx:md5,5f9a6293ded3d612d21b65eca948d0f2", + "ref_annot.cds:md5,d715b6ec2298de7227a34972395d4f23", + "ref_annot.cdsplus.fa:md5,b3affb83d53261f54516c108494e945d", + "ref_annot.cdsplus.fa.idx:md5,46fbf531aedac2d10f5e04c99eff9387", + "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", + "ref_annot.gtf.gene_spans:md5,562cb9429e0200dd6569937dfa3c4adc", + "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", + "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", + "ref_annot.pep:md5,7bb54b6166dbc92becadcdd20fd37a1a", + "ref_annot.prot_info.dbm:md5,a5b084b44d1dc0fcd9a19591c0dca7b2", + "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", + "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", + "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", + "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", + "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", + "ref_genome.fa.nin:md5,35836935e50092d81c448ab14f39ac7b", + "ref_genome.fa.njs:md5,2b139dd79c628f34cc959d43bb292933", + "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", + "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", + "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", + "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", + "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", + "Log.out:md5,bdbd36ba3a2ac0fbe0237b578d1a7bf5", + "SA:md5,7dd9083264be9c6a2194d990bc10d237", + "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", + "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", + "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", + "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", + "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", + "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", + "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", + "genomeParameters.txt:md5,d2b7dcaf83a3f4f798caa97b23e6c411", + "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", + "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", + "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", + "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", + "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", + "trans.blast.align_coords.align_coords.dbm:md5,0e4ce10a10debc6041bf62d612a87946", + "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-27T18:40:25.101647653" + } +} \ No newline at end of file From aad9dc85df84a1f7cc143ac36804c1e56af1453d Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 27 Dec 2024 23:09:09 +0000 Subject: [PATCH 297/887] chore: allow to run build_references only --- workflows/rnafusion.nf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 857827aa5..ee845963f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -48,6 +48,7 @@ workflow RNAFUSION { BUILD_REFERENCES() ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) + if (!params.references_only) { // TODO: Remove this temporary parameter when we have a full-working GitHub nf-test // // QC from FASTQ files @@ -168,6 +169,7 @@ workflow RNAFUSION { ) ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + } // // Collate and save software versions // @@ -210,6 +212,8 @@ workflow RNAFUSION { sort: true ) ) + + if (!params.references_only) { // TODO: Remove this temporary parameter when we have a full-working GitHub nf-test ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) @@ -220,6 +224,7 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) + } MULTIQC ( ch_multiqc_files.collect(), From 49c69779628a751323ef97eefcd4e9690c79f02c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 30 Dec 2024 13:17:08 +0000 Subject: [PATCH 298/887] tests: update md5 ignore list --- tests/.nftignore | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/.nftignore b/tests/.nftignore index 54792ea8f..7b5b68596 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -3,3 +3,30 @@ references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa references/hgnc/HGNC-DB-timestamp.txt +references/fusion_report_db/DB-timestamp.txt +references/salmon/salmon/ctable.bin +references/salmon/salmon/pos.bin +references/salmon/salmon/pre_indexing.log +references/salmon/salmon/ref_indexing.log +references/salmon/salmon/seq.bin +references/star/Log.out +starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/ +starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz +starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz +starfusion/ctat_genome_lib_build_dir/blast_pairs.idx +starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx +starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm +starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa +starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx +starfusion/ctat_genome_lib_build_dir/ref_annot.cds +starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa +starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx +starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans +starfusion/ctat_genome_lib_build_dir/ref_annot.pep +starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm +starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin +starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs +starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out +starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm +references/star/genomeParameters.txt +starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt From 98f8be17691b8c6ce54635c2e4af77734775fca8 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 30 Dec 2024 13:46:38 +0000 Subject: [PATCH 299/887] test: update nf-test --- tests/test_build.nf.test.snap | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 0b274b02a..c8aefa908 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -190,7 +190,6 @@ "rrna.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,7bd504feefb33fcfc9be0517439a423c", "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,43c387a784ebeed71b4147076cebf978", - "DB-timestamp.txt:md5,119d4ae64c2c23db9ed31b4b4814f920", "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", "fusiongdb2.db:md5,e1ac123a744e515d3e5f85b8344d526a", "mitelman.db:md5,1363795c97f77c641065ecd9ad0e484a", @@ -200,22 +199,16 @@ "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", - "ctable.bin:md5,f66735de11dbe0b7e67eddfbfaa47755", "ctg_offsets.bin:md5,174ead59c00c5264300d3ff1de673074", "duplicate_clusters.tsv:md5,d30ab58d133298ed9ba51f1ba20ce89c", "info.json:md5,d91d8a954afcb4be9fe7bfb3e84b5be6", "mphf.bin:md5,b364192c6c73de4c38ec2ed0750f5155", - "pos.bin:md5,c5890a6dd72e6c67ee90df49d62f387a", - "pre_indexing.log:md5,d095ca4b33aaaa1c90e1b995f3f99806", "rank.bin:md5,3fe9c2dc9da7faff6362510c4f29e87d", "refAccumLengths.bin:md5,26d9405e7591ec9a606caa36a094941a", - "ref_indexing.log:md5,f93fde6763cd03ae82686887601e9c0d", "reflengths.bin:md5,187a4a0dee316c5dbf440fa3c58d9eec", "refseq.bin:md5,712c4a8d988c15016ea746db7022e549", - "seq.bin:md5,f5cfb96c509b37c24b5f1fd5541f7a24", "versionInfo.json:md5,d2c799050e81aa6e282ac8a73e773941", "Genome:md5,1621486e3b854fefa37c0b4e77275233", - "Log.out:md5,a56a6e8003d61f86b7602ba471d042d5", "SA:md5,9b6b936f3a8a1232c4fc5533daf9401d", "SAindex:md5,8b2025227b78fdc83e3e5b17c0f538f7", "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", @@ -225,13 +218,11 @@ "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", - "genomeParameters.txt:md5,15d295386ecac0ebad47f2c795fb2eb9", "sjdbInfo.txt:md5,f044cb1cd38af66c832f3afc4b1655cb", "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", - "PFAM.domtblout.dat.gz:md5,ff17bbcb36ec03a6bd70685419e847eb", "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -255,35 +246,20 @@ "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.dat.gz:md5,ba17ee9dab2dd5e2ed4f93031d61bdd0", - "blast_pairs.idx:md5,f8cb62c4c39b41b3a85997945fd1fab2", "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", - "fusion_annot_lib.idx:md5,53d8a5c7b45b673e68464867024643f7", - "pfam_domains.dbm:md5,030800270e0d59674f89d4774fbe492b", - "ref_annot.cdna.fa:md5,22cdf266a4f2f894c9b880c54df03413", - "ref_annot.cdna.fa.idx:md5,5f9a6293ded3d612d21b65eca948d0f2", - "ref_annot.cds:md5,d715b6ec2298de7227a34972395d4f23", - "ref_annot.cdsplus.fa:md5,b3affb83d53261f54516c108494e945d", - "ref_annot.cdsplus.fa.idx:md5,46fbf531aedac2d10f5e04c99eff9387", "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", - "ref_annot.gtf.gene_spans:md5,562cb9429e0200dd6569937dfa3c4adc", "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", - "ref_annot.pep:md5,7bb54b6166dbc92becadcdd20fd37a1a", - "ref_annot.prot_info.dbm:md5,a5b084b44d1dc0fcd9a19591c0dca7b2", "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", - "ref_genome.fa.nin:md5,35836935e50092d81c448ab14f39ac7b", - "ref_genome.fa.njs:md5,2b139dd79c628f34cc959d43bb292933", "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", - "Log.out:md5,bdbd36ba3a2ac0fbe0237b578d1a7bf5", "SA:md5,7dd9083264be9c6a2194d990bc10d237", "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -294,13 +270,11 @@ "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", - "genomeParameters.txt:md5,d2b7dcaf83a3f4f798caa97b23e6c411", "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", - "trans.blast.align_coords.align_coords.dbm:md5,0e4ce10a10debc6041bf62d612a87946", "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" ] ], @@ -308,6 +282,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2024-12-27T18:40:25.101647653" + "timestamp": "2024-12-30T13:35:33.573499693" } } \ No newline at end of file From abbdf2f4254b305d73e173a05962d7fbcfa8fd4b Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:12:42 +0000 Subject: [PATCH 300/887] feat: add all outputs --- modules/local/fusioninspector/main.nf | 122 +++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 2 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index d27953e18..4d7b3ad5c 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -16,6 +16,11 @@ process FUSIONINSPECTOR { tuple val(meta), path("*.coding_effect") , optional:true, emit: tsv_coding_effect tuple val(meta), path("*.gtf") , optional:true, emit: out_gtf tuple val(meta), path("*FusionInspector.log") , emit: log + tuple val(meta), path("*html") , emit: html + tuple val(meta), path("*abridged.tsv") , emit: abridged_tsv + tuple val(meta), path("IGV_inputs") , emit: igv_inputs + tuple val(meta), path("fi_workdir") , emit: fi_workdir + tuple val(meta), path("chckpts_dir") , emit: chckpts_dir path "versions.yml" , emit: versions when: @@ -46,9 +51,122 @@ process FUSIONINSPECTOR { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.FusionInspector.log + touch ${prefix}.FusionInspector.fusions.abridged.tsv touch ${prefix}.FusionInspector.fusions.tsv - touch ${prefix}.FusionInspector.fusions.tsv.annotated.coding_effect - touch ${prefix}.gtf + touch ${prefix}.fusion_inspector_web.html + mkdir -p chckpts_dir + touch chckpts_dir/add_FFPM.ok + touch chckpts_dir/add_splice_info.ok + touch chckpts_dir/append_microH_info.ok + touch chckpts_dir/blast_filter.ok + touch chckpts_dir/coalesce_junc_n_span.ok + touch chckpts_dir/cp_consol_bam.ok + touch chckpts_dir/cp_contigs_file_workdir + touch chckpts_dir/cp_final.ok + touch chckpts_dir/cp_gtf_file_workdir.ok + touch chckpts_dir/cp_tracks_json.ok + touch chckpts_dir/create_fi_igvjs.ok + touch chckpts_dir/cytoband.ok + touch chckpts_dir/EM_adj_counts.ok + touch chckpts_dir/filter_by_frag_threshs.ok + touch chckpts_dir/final.abridged.ok + touch chckpts_dir/fusion_annotator.ok + touch chckpts_dir/fusion_coding_region_effect.ok + touch chckpts_dir/fusion_contigs.ok + touch chckpts_dir/fusion_reports_html.ok + touch chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok + touch chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok + touch chckpts_dir/index_consol_bam.ok + touch chckpts_dir/init_EM_adj_counts.ok + touch chckpts_dir/init_spanning_reads_bam.ok + touch chckpts_dir/mark_dup_reads.ok + touch chckpts_dir/mark_dups_reads.index.ok + touch chckpts_dir/merged_contig_fai.ok + touch chckpts_dir/merged_contig_gtf_to_bed.ok + touch chckpts_dir/microH.dat.ok + touch chckpts_dir/prep_igv_extract_junc_reads.ok + touch chckpts_dir/prep_igv_junc_reads_bam.ok + touch chckpts_dir/prep_igv_pfam_bed.ok + touch chckpts_dir/prep_igv_pfam_gff3.ok + touch chckpts_dir/prep_igv_seqsim_bed.ok + touch chckpts_dir/prep_igv_seqsim_gff3.ok + touch chckpts_dir/prep_spanning_reads.ok + touch chckpts_dir/run_STAR.ok + touch chckpts_dir/samtools_idx_junc_reads_bam.ok + touch chckpts_dir/samtools_index_span_reads_bam.ok + touch chckpts_dir/span_reads_acc.ok + touch chckpts_dir/${prefix}.bed.bedsort.ok + touch chckpts_dir/${prefix}.bed.bgzip.ok + touch chckpts_dir/${prefix}.bed.tabix.ok + mkdir -p fi_workdir/_STARgenome + touch fi_workdir/Log.final.out + touch fi_workdir/Log.out + touch fi_workdir/Log.progress.out + touch fi_workdir/microH.dat + touch fi_workdir/pipeliner.456.cmds + touch fi_workdir/SJ.out.tab + touch fi_workdir/star_align.ok + touch fi_workdir/_STARgenome/exonGeTrInfo.tab + touch fi_workdir/_STARgenome/exonInfo.tab + touch fi_workdir/_STARgenome/geneInfo.tab + touch fi_workdir/_STARgenome/sjdbInfo.txt + touch fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab + touch fi_workdir/_STARgenome/sjdbList.out.tab + touch fi_workdir/_STARgenome/transcriptInfo.tab + touch fi_workdir/${prefix}.fa + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.fusion_junction_read_accs + touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.fusion_spanning_read_accs + touch fi_workdir/${prefix}.gtf + touch fi_workdir/${prefix}.igv.Pfam.gff3 + touch fi_workdir/${prefix}.igv.seqsimilar.gff3 + touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter + touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj + touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM + touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH + touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated + touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.bai + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_junction_info + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_spanning_info + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_span_reads.sam + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.read_align_counts.idx + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok + touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.spanning_reads_want.idx + touch fi_workdir/${prefix}.star.sortedByCoord.out.bam + touch fi_workdir/${prefix}.star.sortedByCoord.out.bam.bai + touch fi_workdir/${prefix}.star.sortedByCoord.out.bam.bai.ok + touch fi_workdir/${prefix}.star.sortedByCoord.out.bam.ok + mkdir -p IGV_inputs + touch IGV_inputs/cytoBand.txt + touch IGV_inputs/${prefix}.bed + gzip -c < /dev/null > IGV_inputs/${prefix}.bed.sorted.bed.gz + touch IGV_inputs/${prefix}.bed.sorted.bed.gz.tbi + touch IGV_inputs/${prefix}.consolidated.bam + touch IGV_inputs/${prefix}.consolidated.bam.bai + touch IGV_inputs/${prefix}.fa + touch IGV_inputs/${prefix}.fa.fai + touch IGV_inputs/${prefix}.fusion_inspector_web.json + touch IGV_inputs/${prefix}.gtf + touch IGV_inputs/${prefix}.igv.Pfam.bed + touch IGV_inputs/${prefix}.igv.seqsimilar.bed + touch IGV_inputs/${prefix}.junction_reads.bam + touch IGV_inputs/${prefix}.junction_reads.bam.bai + touch IGV_inputs/${prefix}.ROI.bed + touch IGV_inputs/${prefix}.spanning_reads.bam + touch IGV_inputs/${prefix}.spanning_reads.bam.bai + touch IGV_inputs/tracks.json + touch IGV_inputs/TrinityFusion.bed cat <<-END_VERSIONS > versions.yml "${task.process}": From c4774e5089ae55ac6c67dc456c22f312fd99ab9c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:13:05 +0000 Subject: [PATCH 301/887] test: test all outputs --- .../local/fusioninspector/tests/main.nf.test | 5 + .../fusioninspector/tests/main.nf.test.snap | 482 +++++++++++++++++- 2 files changed, 470 insertions(+), 17 deletions(-) diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index ef853b71a..5f65fd9ea 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -57,6 +57,11 @@ nextflow_process { process.out.tsv_coding_effect, // TODO: These files do not seem to be produced. Consult Annick. process.out.out_gtf, // TODO: These files do not seem to be produced. Consult Annick. file(process.out.log[0][1]).name, + file(process.out.html[0][1]).name, + process.out.abridged_tsv, + process.out.igv_inputs, + process.out.fi_workdir, + process.out.chckpts_dir, process.out.versions ).match() } ) diff --git a/modules/local/fusioninspector/tests/main.nf.test.snap b/modules/local/fusioninspector/tests/main.nf.test.snap index 5a90f3745..59de46c49 100644 --- a/modules/local/fusioninspector/tests/main.nf.test.snap +++ b/modules/local/fusioninspector/tests/main.nf.test.snap @@ -12,70 +12,366 @@ ] ], "1": [ + + ], + "2": [ + + ], + "3": [ [ { "id": "test", "single_end": false }, - "test.FusionInspector.fusions.tsv.annotated.coding_effect:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.FusionInspector.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "2": [ + "4": [ [ { "id": "test", "single_end": false }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.fusion_inspector_web.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ + "5": [ [ { "id": "test", "single_end": false }, - "test.FusionInspector.log:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.FusionInspector.fusions.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "4": [ + "6": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "TrinityFusion.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytoBand.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ROI.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.sorted.bed.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.sorted.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.consolidated.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.consolidated.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_inspector_web.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.Pfam.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.junction_reads.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.junction_reads.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.spanning_reads.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.spanning_reads.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "tracks.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "microH.dat:md5,d41d8cd98f00b204e9800998ecf8427e", + "pipeliner.456.cmds:md5,d41d8cd98f00b204e9800998ecf8427e", + "star_align.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.fusion_junction_read_accs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.fusion_spanning_read_accs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.Pfam.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_junction_info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_spanning_info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.bai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "EM_adj_counts.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "add_FFPM.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "add_splice_info.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "append_microH_info.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_filter.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "coalesce_junc_n_span.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_consol_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_contigs_file_workdir:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_final.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gtf_file_workdir.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_tracks_json.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "create_fi_igvjs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytoband.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "filter_by_frag_threshs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "final.abridged.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annotator.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_coding_region_effect.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_contigs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_reports_html.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "get_fusion_JUNCTION_reads_from_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "get_fusion_SPANNING_reads_from_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_consol_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "init_EM_adj_counts.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "init_spanning_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mark_dup_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mark_dups_reads.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "merged_contig_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "merged_contig_gtf_to_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "microH.dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_extract_junc_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_junc_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_pfam_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_pfam_gff3.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_seqsim_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_seqsim_gff3.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_spanning_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "run_STAR.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools_idx_junc_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools_index_span_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "span_reads_acc.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.bedsort.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.bgzip.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.tabix.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "9": [ "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" ], - "log": [ + "abridged_tsv": [ [ { "id": "test", "single_end": false }, - "test.FusionInspector.log:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.FusionInspector.fusions.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "out_gtf": [ + "chckpts_dir": [ [ { "id": "test", "single_end": false }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "EM_adj_counts.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "add_FFPM.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "add_splice_info.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "append_microH_info.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_filter.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "coalesce_junc_n_span.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_consol_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_contigs_file_workdir:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_final.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gtf_file_workdir.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_tracks_json.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "create_fi_igvjs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytoband.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "filter_by_frag_threshs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "final.abridged.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annotator.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_coding_region_effect.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_contigs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_reports_html.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "get_fusion_JUNCTION_reads_from_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "get_fusion_SPANNING_reads_from_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_consol_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "init_EM_adj_counts.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "init_spanning_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mark_dup_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mark_dups_reads.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "merged_contig_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "merged_contig_gtf_to_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "microH.dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_extract_junc_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_junc_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_pfam_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_pfam_gff3.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_seqsim_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_seqsim_gff3.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_spanning_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "run_STAR.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools_idx_junc_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools_index_span_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "span_reads_acc.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.bedsort.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.bgzip.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.tabix.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], - "tsv": [ + "fi_workdir": [ [ { "id": "test", "single_end": false }, - "test.FusionInspector.fusions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "microH.dat:md5,d41d8cd98f00b204e9800998ecf8427e", + "pipeliner.456.cmds:md5,d41d8cd98f00b204e9800998ecf8427e", + "star_align.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.fusion_junction_read_accs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.fusion_spanning_read_accs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.Pfam.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_junction_info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_spanning_info:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.bai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], - "tsv_coding_effect": [ + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusion_inspector_web.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "igv_inputs": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "TrinityFusion.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytoBand.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ROI.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.sorted.bed.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.sorted.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.consolidated.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.consolidated.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_inspector_web.json:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.Pfam.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.junction_reads.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.junction_reads.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.spanning_reads.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.spanning_reads.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e", + "tracks.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "log": [ [ { "id": "test", "single_end": false }, - "test.FusionInspector.fusions.tsv.annotated.coding_effect:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.FusionInspector.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] + ], + "out_gtf": [ + + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.fusions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv_coding_effect": [ + ], "versions": [ "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" @@ -86,7 +382,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2024-12-26T23:13:02.858688488" + "timestamp": "2024-12-30T14:11:28.656578568" }, "FUSIONINSPECTOR": { "content": [ @@ -96,7 +392,7 @@ "id": "test", "single_end": false }, - "test.FusionInspector.fusions.tsv:md5,63d2b8205f7725d1c8458c642b1cde61" + "test.FusionInspector.fusions.tsv:md5,d460c0d7fa555fcf0db9615228b4c90f" ] ], [ @@ -106,6 +402,158 @@ ], "FusionInspector.log", + "test.fusion_inspector_web.html", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.FusionInspector.fusions.abridged.tsv:md5,4ea7d11c65f33f963f0c87559d8c51b2" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "TrinityFusion.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytoBand.txt:md5,d8a84202fa42d9455222c94ae641c8b4", + "test.ROI.bed:md5,671de301af27b3dab40ee224401d3a0e", + "test.bed:md5,f3263827da9544f59c67700341086dd8", + "test.bed.sorted.bed.gz:md5,a306900912cc4479f06d61bea00a3ea6", + "test.bed.sorted.bed.gz.tbi:md5,8c9d524558ade2b82c67d60bcfa0de6b", + "test.consolidated.bam:md5,8744a27f874ad01ee159d588a482f29d", + "test.consolidated.bam.bai:md5,07b2313770d96851c54b224daeb9f5eb", + "test.fa:md5,a54bec9daad731a086e8533f89d9c2e6", + "test.fa.fai:md5,15ddfba09f4abf8a15de5eea6c6286ee", + "test.fusion_inspector_web.json:md5,ebe4faf6b6133b40d6c2847195cf55a9", + "test.gtf:md5,d523061bd8b443a014d4cca9406ec772", + "test.igv.Pfam.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.junction_reads.bam:md5,914400e910a2ff23e0daf9326a81700e", + "test.junction_reads.bam.bai:md5,0b6a1078fb91a6d4b9591324b0f95649", + "test.spanning_reads.bam:md5,7a328ec72821a97f2d38f76a642a507e", + "test.spanning_reads.bam.bai:md5,962a587d2c752d7762a511fd02bca62e", + "tracks.json:md5,72f2234c2ad2b7997226283acf040161" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "Log.final.out:md5,858dea4a306e57423b12cb2fcfe3b7fd", + "Log.out:md5,28f71667674309af6a6017d357255bad", + "Log.progress.out:md5,b2bd061d6cbaaf3d6d3b1fed547f69b8", + "SJ.out.tab:md5,2ed3417c0ef9daa230a72e6fd3137588", + [ + "exonGeTrInfo.tab:md5,8815dc1fce3a5f6cb836ea8f822e9c81", + "exonInfo.tab:md5,e51c649a0ca61719e8d4f7324c069c60", + "geneInfo.tab:md5,2f334fb0772c906860c9489ee0d8f3ff", + "sjdbInfo.txt:md5,3a27e9e4b5f402d3daed85dd6f06519e", + "sjdbList.fromGTF.out.tab:md5,fd4e89499ee467de647bd202d8894628", + "sjdbList.out.tab:md5,dad82973249f1c094e36610d2663ddec", + "transcriptInfo.tab:md5,69658043a209e2bb59c1da71b11fd5c3" + ], + "microH.dat:md5,153277f4c2b5600b70fea4508255b20b", + "pipeliner.456.cmds:md5,a057d47f4b3903f9c2b363016f909314", + "star_align.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fa:md5,a54bec9daad731a086e8533f89d9c2e6", + "test.fusion_preds.coalesced.summary:md5,6aea1d2c5e0e916b0c9cfa2bf233e9aa", + "test.fusion_preds.coalesced.summary.EMadj:md5,930f235f0915af2c35af3e75e451e464", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh:md5,47bcd82c0ffca6b64c64bb9edca549e0", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo:md5,6bb11f5efe7bb3879950a492a078d21b", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter:md5,5cd1259a3279026bb5e50c2a4890e548", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info:md5,ed6214ba6c0cd135afd76a808dfdbd5d", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter:md5,5cd1259a3279026bb5e50c2a4890e548", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info:md5,ed6214ba6c0cd135afd76a808dfdbd5d", + "test.fusion_preds.coalesced.summary.fusion_junction_read_accs:md5,9b872a5f1e6a5a21957a55fbf758cbef", + "test.fusion_preds.coalesced.summary.fusion_spanning_read_accs:md5,5475c0ed243fbeb67f5a3e3dd25869ce", + "test.gtf:md5,d523061bd8b443a014d4cca9406ec772", + "test.igv.Pfam.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.post_blast_and_promiscuity_filter:md5,5cd1259a3279026bb5e50c2a4890e548", + "test.post_blast_and_promiscuity_filter.EMadj:md5,d0d7849496bb1579ca5bc6e87c8b2921", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM:md5,0adc8c263fe9f596ff52111b0a7f6027", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH:md5,ac3f6599a5f01beec0ac9ed8e1837e31", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated:md5,31bd0b83ec77de19a5b38467ef22957b", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect:md5,d460c0d7fa555fcf0db9615228b4c90f", + "test.star.cSorted.dupsMarked.bam:md5,8744a27f874ad01ee159d588a482f29d", + "test.star.cSorted.dupsMarked.bam.bai:md5,07b2313770d96851c54b224daeb9f5eb", + "test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis:md5,a1a0daca698e0ff4141f820c9fe64360", + "test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam:md5,7585d76d73eacfc222ce76cdb4e22d0c", + "test.star.cSorted.dupsMarked.bam.fusion_junction_info:md5,3a56cfc29fee2bdb0171adf0d0df5829", + "test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam:md5,c9e99bbe81bdbadf5fa56176828540ae", + "test.star.cSorted.dupsMarked.bam.fusion_spanning_info:md5,d92895bbc30299eb0cdcc8669e3cd9ff", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx:md5,e08aab8e6ce7ebcadb2554b8336e0fd1", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx:md5,15c9b83f36e30cf6f8fe039a2597e597", + "test.star.sortedByCoord.out.bam:md5,5e933b7b3914d249988094953f01e67c", + "test.star.sortedByCoord.out.bam.bai:md5,76c0b5b0ff34a612afbc2b5f684653a2", + "test.star.sortedByCoord.out.bam.bai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "EM_adj_counts.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "add_FFPM.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "add_splice_info.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "append_microH_info.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_filter.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "coalesce_junc_n_span.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_consol_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_contigs_file_workdir:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_final.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gtf_file_workdir.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_tracks_json.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "create_fi_igvjs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cytoband.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "filter_by_frag_threshs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "final.abridged.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annotator.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_coding_region_effect.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_contigs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_reports_html.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "get_fusion_JUNCTION_reads_from_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "get_fusion_SPANNING_reads_from_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_consol_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "init_EM_adj_counts.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "init_spanning_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mark_dup_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mark_dups_reads.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "merged_contig_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "merged_contig_gtf_to_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "microH.dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_extract_junc_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_junc_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_pfam_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_pfam_gff3.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_seqsim_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_igv_seqsim_gff3.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "prep_spanning_reads.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "run_STAR.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools_idx_junc_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools_index_span_reads_bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "span_reads_acc.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.bedsort.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.bgzip.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bed.tabix.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], [ "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" ] @@ -114,6 +562,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2024-12-26T23:12:44.532760924" + "timestamp": "2024-12-30T14:11:16.244098341" } } \ No newline at end of file From e4e64e25b0e798e0383af1b861607fbb5da4d81c Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 30 Dec 2024 18:26:44 +0000 Subject: [PATCH 302/887] test: add test_build to ci --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a510d72db..71ff72459 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,7 @@ jobs: - "latest-stable" test_profile: - "test_stub" + - "test_build" compute_profile: - "docker" - "singularity" From e631ca1a18f34c21cd3894ff92194443d905dac9 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 30 Dec 2024 23:49:43 +0000 Subject: [PATCH 303/887] test: update nf-test to capture stable and unstable files --- .../local/fusioninspector/tests/main.nf.test | 105 +++++++++--------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index a331515cf..4ac373178 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -10,26 +10,26 @@ nextflow_process { test("FUSIONINSPECTOR") { config './nextflow.config' - setup { - run("STARFUSION_BUILD") { - script "../../starfusion/build/main.nf" - process { - """ - input[0] = [ - [ id:'minigenome fasta' ], - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") - ] - input[1] = [ - [ id:'minigenome gtf' ], - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") - ] + setup { + run("STARFUSION_BUILD") { + script "../../starfusion/build/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome fasta' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") + ] + input[1] = [ + [ id:'minigenome gtf' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") + ] - input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") - input [3] = "human" - """ + input[2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input[3] = "human" + """ + } } } - } when { process { @@ -50,6 +50,38 @@ nextflow_process { } then { + + def unstableFiles = [ + "test.bed", + "test.consolidated.bam", + "test.junction_reads.bam", + "test.spanning_reads.bam", + "Log.final.out", + "Log.out", + "microH.dat", + "pipeliner.456.cmds", + "test.fusion_preds.coalesced.summary", + "test.fusion_preds.coalesced.summary.EMadj", + "test.fusion_preds.coalesced.summary.min_frag_thresh", + "test.fusion_preds.coalesced.summary.wSpliceInfo", + "test.fusion_preds.coalesced.summary.wSpliceInfo.post_blast_filter", + "test.fusion_preds.coalesced.summary.wSpliceInfo.post_blast_filter.post_promisc_filter", + "test.fusion_preds.coalesced.summary.fusion_junction_reads_acc", + "test.fusion_preds.coalesced.summary.fusion_spanning_reads_acc", + "test.post_blast_and_promiscuity_filter", + "test.post_blast_and_promiscuity_filter.EMadj", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", + "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", + "test.star.cSorted.dupsMarked.bam", + "test.star.cSorted.dupsMarked.bam.fusion_spanning_info", + "test.star.cSorted.dupsMarked.bam.read_align_counts", + "test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", + "test.star.sortedByCoord.out.bam", + "test.star.sortedByCoord.out.bam.bai" + ] + assertAll( { assert process.success }, { assert snapshot( @@ -59,47 +91,18 @@ nextflow_process { file(process.out.log[0][1]).name, file(process.out.html[0][1]).name, process.out.abridged_tsv, - process.out.igv_inputs, - process.out.fi_workdir, + file(process.out.igv_inputs[0][1]).listFiles().findAll { file -> !unstableFiles.contains(file.name) }, + file(process.out.fi_workdir[0][1]).listFiles().findAll { file -> !unstableFiles.contains(file.name) }, + file(process.out.igv_inputs[0][1]).list().findAll { file -> !unstableFiles.contains(file) }, + file(process.out.igv_inputs[0][1]).list().findAll { file -> !unstableFiles.contains(file) }, process.out.chckpts_dir, process.out.versions - ).match() } + ).match() }, ) } } - test("FUSIONINSPECTOR - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - [ - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") - ], // reads - [ - file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt") - ] - ] - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - process.out).match() } - ) - } - - } } From 0f0d5cf8f42b552dd9d29979fd281278609e5e7f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 31 Dec 2024 14:56:46 +0000 Subject: [PATCH 304/887] test: update test and snapshot --- .../local/fusioninspector/tests/main.nf.test | 49 ++++- .../fusioninspector/tests/main.nf.test.snap | 191 ++++++++---------- 2 files changed, 125 insertions(+), 115 deletions(-) diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index 4ac373178..26a7ca6d9 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -54,12 +54,13 @@ nextflow_process { def unstableFiles = [ "test.bed", "test.consolidated.bam", + "test.consolidated.bam.bai", "test.junction_reads.bam", + "test.junction_reads.bam.bai", "test.spanning_reads.bam", "Log.final.out", "Log.out", "microH.dat", - "pipeliner.456.cmds", "test.fusion_preds.coalesced.summary", "test.fusion_preds.coalesced.summary.EMadj", "test.fusion_preds.coalesced.summary.min_frag_thresh", @@ -75,11 +76,20 @@ nextflow_process { "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", "test.star.cSorted.dupsMarked.bam", + "test.star.cSorted.dupsMarked.bam.bai", + "test.star.cSorted.dupsMarked.bam.fusion_junction_info", "test.star.cSorted.dupsMarked.bam.fusion_spanning_info", "test.star.cSorted.dupsMarked.bam.read_align_counts", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx", "test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", "test.star.sortedByCoord.out.bam", - "test.star.sortedByCoord.out.bam.bai" + "test.star.sortedByCoord.out.bam.bai", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", + "test.fusion_preds.coalesced.summary.fusion_junction_read_accs", + "test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter" ] assertAll( @@ -90,19 +100,48 @@ nextflow_process { process.out.out_gtf, // TODO: These files do not seem to be produced. Consult Annick. file(process.out.log[0][1]).name, file(process.out.html[0][1]).name, - process.out.abridged_tsv, + file(process.out.abridged_tsv[0][1]).name, file(process.out.igv_inputs[0][1]).listFiles().findAll { file -> !unstableFiles.contains(file.name) }, file(process.out.fi_workdir[0][1]).listFiles().findAll { file -> !unstableFiles.contains(file.name) }, file(process.out.igv_inputs[0][1]).list().findAll { file -> !unstableFiles.contains(file) }, - file(process.out.igv_inputs[0][1]).list().findAll { file -> !unstableFiles.contains(file) }, + file(process.out.fi_workdir[0][1]).list().findAll { file -> !unstableFiles.contains(file) }, process.out.chckpts_dir, process.out.versions - ).match() }, + ).match() } ) } } + test("FUSIONINSPECTOR stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") + ], // reads + [ + file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt") + ] + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out + ).match() } + ) + } + } } diff --git a/modules/local/fusioninspector/tests/main.nf.test.snap b/modules/local/fusioninspector/tests/main.nf.test.snap index f338dd55a..6e3f05c2c 100644 --- a/modules/local/fusioninspector/tests/main.nf.test.snap +++ b/modules/local/fusioninspector/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "FUSIONINSPECTOR - stub": { + "FUSIONINSPECTOR stub": { "content": [ { "0": [ @@ -12,10 +12,10 @@ ] ], "1": [ - + ], "2": [ - + ], "3": [ [ @@ -359,7 +359,7 @@ ] ], "out_gtf": [ - + ], "tsv": [ [ @@ -371,7 +371,7 @@ ] ], "tsv_coding_effect": [ - + ], "versions": [ "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" @@ -382,124 +382,95 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2024-12-30T14:11:28.656578568" + "timestamp": "2024-12-31T13:48:13.020571472" }, "FUSIONINSPECTOR": { "content": [ + "test.FusionInspector.fusions.tsv", [ - [ - { - "id": "test", - "single_end": false - }, - "test.FusionInspector.fusions.tsv:md5,d460c0d7fa555fcf0db9615228b4c90f" - ] - ], - [ - + ], [ - + ], "FusionInspector.log", "test.fusion_inspector_web.html", + "test.FusionInspector.fusions.abridged.tsv", [ - [ - { - "id": "test", - "single_end": false - }, - "test.FusionInspector.fusions.abridged.tsv:md5,4ea7d11c65f33f963f0c87559d8c51b2" - ] + "test.fa:md5,a54bec9daad731a086e8533f89d9c2e6", + "test.gtf:md5,d523061bd8b443a014d4cca9406ec772", + "test.fa.fai:md5,15ddfba09f4abf8a15de5eea6c6286ee", + "cytoBand.txt:md5,d8a84202fa42d9455222c94ae641c8b4", + "test.bed.sorted.bed.gz:md5,a306900912cc4479f06d61bea00a3ea6", + "test.bed.sorted.bed.gz.tbi:md5,8c9d524558ade2b82c67d60bcfa0de6b", + "test.spanning_reads.bam.bai:md5,6e035943a5c90026bd499e78c7eeed4a", + "test.igv.Pfam.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_inspector_web.json:md5,ebe4faf6b6133b40d6c2847195cf55a9", + "test.ROI.bed:md5,671de301af27b3dab40ee224401d3a0e", + "TrinityFusion.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "tracks.json:md5,72f2234c2ad2b7997226283acf040161" ], [ + "test.fa:md5,a54bec9daad731a086e8533f89d9c2e6", + "test.gtf:md5,d523061bd8b443a014d4cca9406ec772", + "pipeliner.456.cmds:md5,bb8bf0e749f794dfb37efc2ff7c24be0", + "Log.progress.out:md5,b2bd061d6cbaaf3d6d3b1fed547f69b8", [ - { - "id": "test", - "single_end": false - }, - [ - "TrinityFusion.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "cytoBand.txt:md5,d8a84202fa42d9455222c94ae641c8b4", - "test.ROI.bed:md5,671de301af27b3dab40ee224401d3a0e", - "test.bed:md5,f3263827da9544f59c67700341086dd8", - "test.bed.sorted.bed.gz:md5,a306900912cc4479f06d61bea00a3ea6", - "test.bed.sorted.bed.gz.tbi:md5,8c9d524558ade2b82c67d60bcfa0de6b", - "test.consolidated.bam:md5,8744a27f874ad01ee159d588a482f29d", - "test.consolidated.bam.bai:md5,07b2313770d96851c54b224daeb9f5eb", - "test.fa:md5,a54bec9daad731a086e8533f89d9c2e6", - "test.fa.fai:md5,15ddfba09f4abf8a15de5eea6c6286ee", - "test.fusion_inspector_web.json:md5,ebe4faf6b6133b40d6c2847195cf55a9", - "test.gtf:md5,d523061bd8b443a014d4cca9406ec772", - "test.igv.Pfam.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.igv.seqsimilar.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.junction_reads.bam:md5,914400e910a2ff23e0daf9326a81700e", - "test.junction_reads.bam.bai:md5,0b6a1078fb91a6d4b9591324b0f95649", - "test.spanning_reads.bam:md5,7a328ec72821a97f2d38f76a642a507e", - "test.spanning_reads.bam.bai:md5,962a587d2c752d7762a511fd02bca62e", - "tracks.json:md5,72f2234c2ad2b7997226283acf040161" - ] - ] + "exonGeTrInfo.tab:md5,8815dc1fce3a5f6cb836ea8f822e9c81", + "exonInfo.tab:md5,e51c649a0ca61719e8d4f7324c069c60", + "geneInfo.tab:md5,2f334fb0772c906860c9489ee0d8f3ff", + "sjdbInfo.txt:md5,3a27e9e4b5f402d3daed85dd6f06519e", + "sjdbList.fromGTF.out.tab:md5,fd4e89499ee467de647bd202d8894628", + "sjdbList.out.tab:md5,dad82973249f1c094e36610d2663ddec", + "transcriptInfo.tab:md5,69658043a209e2bb59c1da71b11fd5c3" + ], + "SJ.out.tab:md5,2ed3417c0ef9daa230a72e6fd3137588", + "star_align.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.sortedByCoord.out.bam.bai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam:md5,7585d76d73eacfc222ce76cdb4e22d0c", + "test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam:md5,c9e99bbe81bdbadf5fa56176828540ae", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis:md5,a1a0daca698e0ff4141f820c9fe64360", + "test.igv.Pfam.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.igv.seqsimilar.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info:md5,ed6214ba6c0cd135afd76a808dfdbd5d", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info:md5,ed6214ba6c0cd135afd76a808dfdbd5d" ], [ - [ - { - "id": "test", - "single_end": false - }, - [ - "Log.final.out:md5,858dea4a306e57423b12cb2fcfe3b7fd", - "Log.out:md5,28f71667674309af6a6017d357255bad", - "Log.progress.out:md5,b2bd061d6cbaaf3d6d3b1fed547f69b8", - "SJ.out.tab:md5,2ed3417c0ef9daa230a72e6fd3137588", - [ - "exonGeTrInfo.tab:md5,8815dc1fce3a5f6cb836ea8f822e9c81", - "exonInfo.tab:md5,e51c649a0ca61719e8d4f7324c069c60", - "geneInfo.tab:md5,2f334fb0772c906860c9489ee0d8f3ff", - "sjdbInfo.txt:md5,3a27e9e4b5f402d3daed85dd6f06519e", - "sjdbList.fromGTF.out.tab:md5,fd4e89499ee467de647bd202d8894628", - "sjdbList.out.tab:md5,dad82973249f1c094e36610d2663ddec", - "transcriptInfo.tab:md5,69658043a209e2bb59c1da71b11fd5c3" - ], - "microH.dat:md5,153277f4c2b5600b70fea4508255b20b", - "pipeliner.456.cmds:md5,a057d47f4b3903f9c2b363016f909314", - "star_align.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.fa:md5,a54bec9daad731a086e8533f89d9c2e6", - "test.fusion_preds.coalesced.summary:md5,6aea1d2c5e0e916b0c9cfa2bf233e9aa", - "test.fusion_preds.coalesced.summary.EMadj:md5,930f235f0915af2c35af3e75e451e464", - "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh:md5,47bcd82c0ffca6b64c64bb9edca549e0", - "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo:md5,6bb11f5efe7bb3879950a492a078d21b", - "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter:md5,5cd1259a3279026bb5e50c2a4890e548", - "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info:md5,ed6214ba6c0cd135afd76a808dfdbd5d", - "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter:md5,5cd1259a3279026bb5e50c2a4890e548", - "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info:md5,ed6214ba6c0cd135afd76a808dfdbd5d", - "test.fusion_preds.coalesced.summary.fusion_junction_read_accs:md5,9b872a5f1e6a5a21957a55fbf758cbef", - "test.fusion_preds.coalesced.summary.fusion_spanning_read_accs:md5,5475c0ed243fbeb67f5a3e3dd25869ce", - "test.gtf:md5,d523061bd8b443a014d4cca9406ec772", - "test.igv.Pfam.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.igv.seqsimilar.gff3:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.post_blast_and_promiscuity_filter:md5,5cd1259a3279026bb5e50c2a4890e548", - "test.post_blast_and_promiscuity_filter.EMadj:md5,d0d7849496bb1579ca5bc6e87c8b2921", - "test.post_blast_and_promiscuity_filter.EMadj.FFPM:md5,0adc8c263fe9f596ff52111b0a7f6027", - "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH:md5,ac3f6599a5f01beec0ac9ed8e1837e31", - "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated:md5,31bd0b83ec77de19a5b38467ef22957b", - "test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect:md5,d460c0d7fa555fcf0db9615228b4c90f", - "test.star.cSorted.dupsMarked.bam:md5,8744a27f874ad01ee159d588a482f29d", - "test.star.cSorted.dupsMarked.bam.bai:md5,07b2313770d96851c54b224daeb9f5eb", - "test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis:md5,a1a0daca698e0ff4141f820c9fe64360", - "test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam:md5,7585d76d73eacfc222ce76cdb4e22d0c", - "test.star.cSorted.dupsMarked.bam.fusion_junction_info:md5,3a56cfc29fee2bdb0171adf0d0df5829", - "test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam:md5,c9e99bbe81bdbadf5fa56176828540ae", - "test.star.cSorted.dupsMarked.bam.fusion_spanning_info:md5,d92895bbc30299eb0cdcc8669e3cd9ff", - "test.star.cSorted.dupsMarked.bam.read_align_counts.idx:md5,e08aab8e6ce7ebcadb2554b8336e0fd1", - "test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx:md5,15c9b83f36e30cf6f8fe039a2597e597", - "test.star.sortedByCoord.out.bam:md5,5e933b7b3914d249988094953f01e67c", - "test.star.sortedByCoord.out.bam.bai:md5,76c0b5b0ff34a612afbc2b5f684653a2", - "test.star.sortedByCoord.out.bam.bai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.star.sortedByCoord.out.bam.ok:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] + "test.fa", + "test.gtf", + "test.fa.fai", + "cytoBand.txt", + "test.bed.sorted.bed.gz", + "test.bed.sorted.bed.gz.tbi", + "test.spanning_reads.bam.bai", + "test.igv.Pfam.bed", + "test.igv.seqsimilar.bed", + "test.fusion_inspector_web.json", + "test.ROI.bed", + "TrinityFusion.bed", + "tracks.json" + ], + [ + "test.fa", + "test.gtf", + "pipeliner.456.cmds", + "Log.progress.out", + "_STARgenome", + "SJ.out.tab", + "star_align.ok", + "test.star.sortedByCoord.out.bam.ok", + "test.star.sortedByCoord.out.bam.bai.ok", + "test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", + "test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", + "test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", + "test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", + "test.igv.Pfam.gff3", + "test.igv.seqsimilar.gff3", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", + "test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info" ], [ [ @@ -562,6 +533,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2024-12-30T14:11:16.244098341" + "timestamp": "2024-12-31T14:34:37.759837761" } -} +} \ No newline at end of file From 99f409f57f2f64addfe718d2438d8051ca1bea3f Mon Sep 17 00:00:00 2001 From: Anabella Trigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 2 Jan 2025 14:05:29 +0100 Subject: [PATCH 305/887] chore: add indentation --- workflows/rnafusion.nf | 232 ++++++++++++++++++++--------------------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index ee845963f..ea0340f6e 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -50,124 +50,124 @@ workflow RNAFUSION { if (!params.references_only) { // TODO: Remove this temporary parameter when we have a full-working GitHub nf-test - // - // QC from FASTQ files - // - FASTQC ( - ch_samplesheet - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions) - - - // - // Trimming - // - TRIM_WORKFLOW ( - ch_samplesheet, - Channel.value(params.adapter_fasta), - params.fastp_trim - ) - ch_reads = TRIM_WORKFLOW.out.ch_reads_all - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - - SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') - ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) - ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) + // + // QC from FASTQ files + // + FASTQC ( + ch_samplesheet + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions) - // - // SUBWORKFLOW: Run STAR alignment and Arriba - // - - // TODO: add params.seq_platform and pass it as argument to arriba_workflow - // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? - // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file - - ARRIBA_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_arriba_ref_blacklist, - BUILD_REFERENCES.out.ch_arriba_ref_cytobands, - BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, - BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, - BUILD_REFERENCES.out.ch_starfusion_ref, - params.arriba, // boolean - params.all, // boolean - params.fusioninspector_only, // boolean - params.star_ignore_sjdbgtf, // boolean - params.ctatsplicing, // boolean - params.seq_center ?: '', // string - params.arriba_fusions, // path - params.cram // array - ) - ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) + // + // Trimming + // + TRIM_WORKFLOW ( + ch_samplesheet, + Channel.value(params.adapter_fasta), + params.fastp_trim + ) + ch_reads = TRIM_WORKFLOW.out.ch_reads_all + ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + + SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') + ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) + ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) + + + // + // SUBWORKFLOW: Run STAR alignment and Arriba + // + + // TODO: add params.seq_platform and pass it as argument to arriba_workflow + // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? + // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file + + ARRIBA_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_starindex_ref, + BUILD_REFERENCES.out.ch_arriba_ref_blacklist, + BUILD_REFERENCES.out.ch_arriba_ref_cytobands, + BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, + BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, + BUILD_REFERENCES.out.ch_starfusion_ref, + params.arriba, // boolean + params.all, // boolean + params.fusioninspector_only, // boolean + params.star_ignore_sjdbgtf, // boolean + params.ctatsplicing, // boolean + params.seq_center ?: '', // string + params.arriba_fusions, // path + params.cram // array + ) + ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) - //Run STAR fusion - STARFUSION_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_starfusion_ref - ) - ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + //Run STAR fusion + STARFUSION_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_starindex_ref, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_starfusion_ref + ) + ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - //Run fusioncatcher - FUSIONCATCHER_WORKFLOW ( - ch_reads - ) - ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + //Run fusioncatcher + FUSIONCATCHER_WORKFLOW ( + ch_reads + ) + ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) - //Run stringtie - STRINGTIE_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, - BUILD_REFERENCES.out.ch_gtf - ) - ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) + //Run stringtie + STRINGTIE_WORKFLOW ( + STARFUSION_WORKFLOW.out.ch_bam_sorted, + BUILD_REFERENCES.out.ch_gtf + ) + ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) - //Run fusion-report - FUSIONREPORT_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_fusionreport_ref, - ARRIBA_WORKFLOW.out.fusions, - STARFUSION_WORKFLOW.out.fusions, - FUSIONCATCHER_WORKFLOW.out.fusions - ) - ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) - - //Run fusionInpector - FUSIONINSPECTOR_WORKFLOW ( - ch_reads, - FUSIONREPORT_WORKFLOW.out.fusion_list, - FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, - FUSIONREPORT_WORKFLOW.out.report, - FUSIONREPORT_WORKFLOW.out.csv, - STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, - BUILD_REFERENCES.out.ch_arriba_ref_cytobands, - BUILD_REFERENCES.out.ch_hgnc_ref, - BUILD_REFERENCES.out.ch_hgnc_date - ) - ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) + //Run fusion-report + FUSIONREPORT_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_fusionreport_ref, + ARRIBA_WORKFLOW.out.fusions, + STARFUSION_WORKFLOW.out.fusions, + FUSIONCATCHER_WORKFLOW.out.fusions + ) + ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) + + //Run fusionInpector + FUSIONINSPECTOR_WORKFLOW ( + ch_reads, + FUSIONREPORT_WORKFLOW.out.fusion_list, + FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, + FUSIONREPORT_WORKFLOW.out.report, + FUSIONREPORT_WORKFLOW.out.csv, + STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, + BUILD_REFERENCES.out.ch_arriba_ref_cytobands, + BUILD_REFERENCES.out.ch_hgnc_ref, + BUILD_REFERENCES.out.ch_hgnc_date + ) + ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - //QC - QC_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, - BUILD_REFERENCES.out.ch_refflat, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_fai, - BUILD_REFERENCES.out.ch_rrna_interval - ) - ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + //QC + QC_WORKFLOW ( + STARFUSION_WORKFLOW.out.ch_bam_sorted, + BUILD_REFERENCES.out.ch_refflat, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_fai, + BUILD_REFERENCES.out.ch_rrna_interval + ) + ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) } // @@ -214,16 +214,16 @@ workflow RNAFUSION { ) if (!params.references_only) { // TODO: Remove this temporary parameter when we have a full-working GitHub nf-test - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) } MULTIQC ( From 36960ec12838701e7518aef648f4a823ec868c97 Mon Sep 17 00:00:00 2001 From: Anabella Trigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 2 Jan 2025 15:23:33 +0100 Subject: [PATCH 306/887] test: add nf-test --- .../main.nf} | 2 +- .../fusionreport_workflow/tests/main.nf.test | 73 +++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) rename subworkflows/local/{fusionreport_workflow.nf => fusionreport_workflow/main.nf} (94%) create mode 100644 subworkflows/local/fusionreport_workflow/tests/main.nf.test diff --git a/subworkflows/local/fusionreport_workflow.nf b/subworkflows/local/fusionreport_workflow/main.nf similarity index 94% rename from subworkflows/local/fusionreport_workflow.nf rename to subworkflows/local/fusionreport_workflow/main.nf index 04019e121..eac40e328 100644 --- a/subworkflows/local/fusionreport_workflow.nf +++ b/subworkflows/local/fusionreport_workflow/main.nf @@ -1,4 +1,4 @@ -include { FUSIONREPORT } from '../../modules/local/fusionreport/detect/main' +include { FUSIONREPORT } from '../../../modules/local/fusionreport/detect/main' workflow FUSIONREPORT_WORKFLOW { diff --git a/subworkflows/local/fusionreport_workflow/tests/main.nf.test b/subworkflows/local/fusionreport_workflow/tests/main.nf.test new file mode 100644 index 000000000..2b7da3d3c --- /dev/null +++ b/subworkflows/local/fusionreport_workflow/tests/main.nf.test @@ -0,0 +1,73 @@ +nextflow_workflow { + + name "Test Subworkflow FUSIONREPORT_WORKFLOW" + script "../main.nf" + workflow "FUSIONREPORT_WORKFLOW" + + tag "subworkflow" + tag "fusionreport_workflow" + tag "fusionreport" + + test("FUSIONREPORT_WORKFLOW - Full Test") { + + setup { + run("FUSIONREPORT_DOWNLOAD") { + script "../../../../modules/local/fusionreport/download/main.nf" + process { + """ + """ + } + } + } + + when { + workflow { + """ + // Input channels + input[0] = Channel.of( + [ [ id:'test_sample' ], + file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz") ] + ) + + input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref + + input[2] = Channel.of( + [[ id:'test_sample' ], + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/arriba.tsv") ] + ) + + input[3] = Channel.of( + [[ id:'test_sample' ], + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/starfusion.tsv") ] + ) + + input[4] = Channel.of( + [[ id:'test_sample' ], + file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt") ] + ) + + """ + } + params { + fusioninspector_only = false + tools_cutoff = 1 + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.fusion_list, + workflow.out.fusion_list_filtered, + workflow.out.report, + workflow.out.csv, + workflow.out.versions + ).match() } + ) + } + } + + +} From 8e32484c11216583dfe6792db549cfdc5376c74a Mon Sep 17 00:00:00 2001 From: Alan M Date: Thu, 2 Jan 2025 21:47:15 +0100 Subject: [PATCH 307/887] update snaps after merging --- .../local/fusioncatcher/build/environment.yml | 5 ++++ modules/local/fusioncatcher/build/main.nf | 10 +++++--- .../fusioncatcher/detect/environment.yml | 5 ++-- modules/local/fusioncatcher/detect/main.nf | 25 +++++++++++-------- .../fusioncatcher/download/environment.yml | 5 ++-- modules/local/fusioncatcher/download/main.nf | 8 +++--- .../fusioncatcher_workflow/tests/main.nf.test | 15 ++++++----- .../tests/main.nf.test.snap | 2 +- workflows/rnafusion.nf | 9 ++++--- 9 files changed, 51 insertions(+), 33 deletions(-) create mode 100644 modules/local/fusioncatcher/build/environment.yml diff --git a/modules/local/fusioncatcher/build/environment.yml b/modules/local/fusioncatcher/build/environment.yml new file mode 100644 index 000000000..b5d59e181 --- /dev/null +++ b/modules/local/fusioncatcher/build/environment.yml @@ -0,0 +1,5 @@ +channels: +- conda-forge +- bioconda +dependencies: +- bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 4aaaf504e..3dcdd36b0 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -2,14 +2,17 @@ process FUSIONCATCHER_BUILD { tag "fusioncatcher_build" label 'process_medium' - container "docker.io/rannickscilifelab/fusioncatcher:1.34" + conda "${projectDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : + 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" input: val genome_gencode_version output: - path "human_v${genome_gencode_version}" , emit: reference - path "versions.yml" , emit: versions + tuple env(meta), path("human_v${genome_gencode_version}"), emit: reference + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -17,6 +20,7 @@ process FUSIONCATCHER_BUILD { script: def args = task.ext.args ?: '' + meta = [ id: "human_v${genome_gencode_version}" ] """ fusioncatcher-build.py \\ -g homo_sapiens \\ diff --git a/modules/local/fusioncatcher/detect/environment.yml b/modules/local/fusioncatcher/detect/environment.yml index 312995854..b5d59e181 100644 --- a/modules/local/fusioncatcher/detect/environment.yml +++ b/modules/local/fusioncatcher/detect/environment.yml @@ -1,4 +1,5 @@ channels: - - bioconda +- conda-forge +- bioconda dependencies: - - bioconda::fusioncatcher=1.33 +- bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 385172574..8e6cdcf23 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -1,35 +1,38 @@ process FUSIONCATCHER_DETECT { tag "$meta.id" label 'process_high' - - container "docker.io/rannickscilifelab/fusioncatcher:1.34" + + conda "${projectDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : + 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" input: tuple val(meta), path(fastqs, stageAs: "input/*") tuple val(meta2), path(reference) output: - tuple val(meta), path("*.fusioncatcher.fusion-genes.txt") , optional:true , emit: fusions - tuple val(meta), path("*.fusioncatcher.summary.txt") , optional:true , emit: summary - tuple val(meta), path("*.fusioncatcher.log") , emit: log - path "versions.yml" , emit: versions + tuple val(meta), path("*.fusioncatcher.fusion-genes.txt"), emit: fusions, optional: true + tuple val(meta), path("*.fusioncatcher.summary.txt") , emit: summary, optional: true + tuple val(meta), path("*.fusioncatcher.log") , emit: log + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def single_end = meta.single_end ? "--single-end" : "" """ fusioncatcher.py \\ -d ${reference} \\ -i input \\ - -p $task.cpus \\ + -p ${task.cpus} \\ -o . \\ --skip-blat \\ - $single_end \\ - $args + ${single_end} \\ + ${args} mv final-list_candidate-fusion-genes.txt ${prefix}.fusioncatcher.fusion-genes.txt mv summary_candidate_fusions.txt ${prefix}.fusioncatcher.summary.txt diff --git a/modules/local/fusioncatcher/download/environment.yml b/modules/local/fusioncatcher/download/environment.yml index 312995854..b5d59e181 100644 --- a/modules/local/fusioncatcher/download/environment.yml +++ b/modules/local/fusioncatcher/download/environment.yml @@ -1,4 +1,5 @@ channels: - - bioconda +- conda-forge +- bioconda dependencies: - - bioconda::fusioncatcher=1.33 +- bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 3e384faca..cbf4585c8 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -2,7 +2,10 @@ process FUSIONCATCHER_DOWNLOAD { tag "fusioncatcher_download" label 'process_medium' - container "docker.io/rannickscilifelab/fusioncatcher:1.34" + conda "${projectDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : + 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" input: val genome_gencode_version @@ -17,8 +20,7 @@ process FUSIONCATCHER_DOWNLOAD { script: def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - meta = [ id: "human_${genome_gencode_version}" ] + meta = [ id: "human_v${genome_gencode_version}" ] """ wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.aa wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.ab diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test index d0304380a..baa9eb999 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -5,23 +5,23 @@ nextflow_workflow { workflow "FUSIONCATCHER_WORKFLOW" tag "subworkflow" tag "fusioncatcher" - tag "fusioncatcher/download" + tag "fusioncatcher/build" tag "fusioncatcher/detect" // Test test("FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4") { - /*setup { + setup { // Download reference files for fusioncatch - run("FUSIONCATCHER_DOWNLOAD") { - script "../../../../modules/local/fusioncatcher/download/main.nf" + run("FUSIONCATCHER_BUILD") { + script "../../../../modules/local/fusioncatcher/build/main.nf" process { """ - // No arguments required. Human version v102 + input[0] = Channel.value('102') """ } } - }*/ + } // TODO: get smaller reference files for fusioncatcher when { @@ -38,8 +38,7 @@ nextflow_workflow { ] ) // ch_references - input[1] = Channel.fromPath("complete/with/your/local/path", checkIfExists: true) - .map{ [[id: "human_v102" ], it] } //FUSIONCATCHER_DOWNLOAD.out.reference + input[1] = FUSIONCATCHER_BUILD.out.reference // fusioncatcher (boolean) input[2] = true diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap index 523916e4b..98ebe812a 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -32,6 +32,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.0" }, - "timestamp": "2024-12-19T17:44:38.284199" + "timestamp": "2025-01-02T21:43:44.92688" } } \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 2faee6af0..d2346a0b2 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -116,11 +116,14 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - //Run fusioncatcher + //R un fusioncatcher // TODO: check this inputs! + ch_fustioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref, checkIfExists: true) + .map{ [ [id: it.name], it] } + FUSIONCATCHER_WORKFLOW ( - ch_reads_fusioncatcher, - params.fusioncatcher_ref, // channel [ meta, path ] + ch_reads, + ch_fustioncatcher_ref, // channel [ meta, path ] params.run_fusioncatcher, params.all, params.fusioninspector_only, From 0f9b3e78b330d724eedf15875f93839e131c1c90 Mon Sep 17 00:00:00 2001 From: Alan M Date: Thu, 2 Jan 2025 21:52:42 +0100 Subject: [PATCH 308/887] remove bakcup file and update changelog --- CHANGELOG.md | 1 + .../local/fusioncatcher_workflow.nf.bkp | 34 ------------------- 2 files changed, 1 insertion(+), 34 deletions(-) delete mode 100644 subworkflows/local/fusioncatcher_workflow.nf.bkp diff --git a/CHANGELOG.md b/CHANGELOG.md index e61cc28a6..0f550365a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local module: `STARFUSION_DETECT`. [#586](https://github.com/nf-core/rnafusion/pull/586) - Added a new module `CTATSPLICING_STARTOCANCERINTRONS` and a new parameter `--ctatsplicing`. This options creates reports on cancer splicing abberations and requires one or both of `--arriba` and `--starfusion` to be given. [#587](https://github.com/nf-core/rnafusion/pull/587) - Add parameter `--references_only` when no data should be analysed, but only the references should be built [#505](https://github.com/nf-core/rnafusion/pull/505) +- Add nf-test to local subworkflow: `FUSIONCATCHER_WORKFLOW` [#591](https://github.com/nf-core/rnafusion/pull/591) - Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) ### Changed diff --git a/subworkflows/local/fusioncatcher_workflow.nf.bkp b/subworkflows/local/fusioncatcher_workflow.nf.bkp deleted file mode 100644 index 97ed55de8..000000000 --- a/subworkflows/local/fusioncatcher_workflow.nf.bkp +++ /dev/null @@ -1,34 +0,0 @@ -include { FUSIONCATCHER } from '../../modules/local/fusioncatcher/detect/main' - - -workflow FUSIONCATCHER_WORKFLOW { - take: - reads - - main: - ch_versions = Channel.empty() - ch_dummy_file = file("$baseDir/assets/dummy_file_fusioncatcher.txt", checkIfExists: true) - - if ((params.fusioncatcher || params.all) && !params.fusioninspector_only) { - if (params.fusioncatcher_fusions){ - ch_fusioncatcher_fusions = reads.combine(Channel.value(file(params.fusioncatcher_fusions, checkIfExists:true))) - .map { it -> [ it[0], it[1] ] } - } else { - FUSIONCATCHER ( - reads, - params.fusioncatcher_ref - ) - ch_fusioncatcher_fusions = FUSIONCATCHER.out.fusions - ch_versions = ch_versions.mix(FUSIONCATCHER.out.versions) - } - } - else { - ch_fusioncatcher_fusions = reads.combine(Channel.value(file(ch_dummy_file, checkIfExists:true))) - .map { it -> [ it[0], it[1] ] } - } - - emit: - fusions = ch_fusioncatcher_fusions - versions = ch_versions - } - From 78a3230d9c89a6a60f8f70802d6ef95d5f270398 Mon Sep 17 00:00:00 2001 From: Alan M Date: Fri, 3 Jan 2025 19:40:39 +0100 Subject: [PATCH 309/887] fix bug with fusioncatcher ref --- modules/local/fusioncatcher/build/main.nf | 4 +-- modules/local/fusioncatcher/detect/main.nf | 4 +-- modules/local/fusioncatcher/download/main.nf | 4 +-- .../fusioncatcher_workflow/tests/main.nf.test | 2 +- .../tests/main.nf.test.snap | 8 ++--- tests/test_stub.nf.test.snap | 30 +++++++++---------- workflows/rnafusion.nf | 8 ++--- 7 files changed, 28 insertions(+), 32 deletions(-) diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 3dcdd36b0..258fbca23 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -29,7 +29,7 @@ process FUSIONCATCHER_BUILD { cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" END_VERSIONS """ @@ -39,7 +39,7 @@ process FUSIONCATCHER_BUILD { touch human_v${genome_gencode_version}/ensembl_fully_overlapping_genes.txt cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" END_VERSIONS """ } diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index 8e6cdcf23..f86702000 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -40,7 +40,7 @@ process FUSIONCATCHER_DETECT { cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: \$(echo \$(fusioncatcher.py --version 2>&1)| sed 's/fusioncatcher.py //') + fusioncatcher: "\$(fusioncatcher.py --version 2>&1 | awk '{print \$2}')" END_VERSIONS """ @@ -53,7 +53,7 @@ process FUSIONCATCHER_DETECT { touch ${prefix}.fusioncatcher.log cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: \$(echo \$(fusioncatcher.py --version 2>&1)| sed 's/fusioncatcher.py //') + fusioncatcher: "\$(fusioncatcher.py --version 2>&1 | awk '{print \$2}')" END_VERSIONS """ } diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index cbf4585c8..af585d62c 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -31,7 +31,7 @@ process FUSIONCATCHER_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" END_VERSIONS """ @@ -41,7 +41,7 @@ process FUSIONCATCHER_DOWNLOAD { touch human_v${genome_gencode_version}/ensembl_fully_overlapping_genes.txt cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: \$(echo \$(fusioncatcher --version 2>&1)) + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" END_VERSIONS """ } diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test index baa9eb999..59c60595b 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -17,7 +17,7 @@ nextflow_workflow { script "../../../../modules/local/fusioncatcher/build/main.nf" process { """ - input[0] = Channel.value('102') + input[0] = Channel.value('46') """ } } diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap index 98ebe812a..47ffc5af1 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,6462518e02774293fa221cead8373305" + "versions.yml:md5,05bd93a243728a293211ce52e5f97282" ], "fusions": [ [ @@ -24,14 +24,14 @@ ] ], "versions": [ - "versions.yml:md5,6462518e02774293fa221cead8373305" + "versions.yml:md5,05bd93a243728a293211ce52e5f97282" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.0" + "nextflow": "24.10.3" }, - "timestamp": "2025-01-02T21:43:44.92688" + "timestamp": "2025-01-03T19:29:54.767628" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 0ac620e73..93354967e 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -15,11 +15,11 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER": { - "fusioncatcher": 1.35 - }, "FUSIONCATCHER_BUILD": { - "fusioncatcher": "fusioncatcher.py 1.35" + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" }, "FUSIONREPORT": { "fusion_report": "2.1.5" @@ -354,10 +354,10 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-12-20T14:00:19.311265" + "timestamp": "2025-01-03T14:17:57.064279" }, "stub test with fastp trim": { "content": [ @@ -381,11 +381,11 @@ "FASTQC_FOR_FASTP": { "fastqc": "0.12.1" }, - "FUSIONCATCHER": { - "fusioncatcher": 1.35 - }, "FUSIONCATCHER_BUILD": { - "fusioncatcher": "fusioncatcher.py 1.35" + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" }, "FUSIONREPORT": { "fusion_report": "2.1.5" @@ -729,9 +729,9 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-12-20T13:57:10.179877" + "timestamp": "2025-01-03T14:16:13.691547" } -} +} \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index d2346a0b2..d8e717ecc 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -116,14 +116,10 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - //R un fusioncatcher - // TODO: check this inputs! - ch_fustioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref, checkIfExists: true) - .map{ [ [id: it.name], it] } - + //Run fusioncatcher FUSIONCATCHER_WORKFLOW ( ch_reads, - ch_fustioncatcher_ref, // channel [ meta, path ] + BUILD_REFERENCES.out.ch_fusioncatcher_ref, // channel [ meta, path ] params.run_fusioncatcher, params.all, params.fusioninspector_only, From 8cac4707bb4c9fb67fb6b58072363fee421c0dfd Mon Sep 17 00:00:00 2001 From: Alan M Date: Fri, 3 Jan 2025 19:45:23 +0100 Subject: [PATCH 310/887] pre-commit changes --- modules/local/fusioncatcher/build/main.nf | 2 +- modules/local/fusioncatcher/detect/main.nf | 4 ++-- subworkflows/local/fusioncatcher_workflow/tests/main.nf.test | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf index 258fbca23..db1c72107 100644 --- a/modules/local/fusioncatcher/build/main.nf +++ b/modules/local/fusioncatcher/build/main.nf @@ -2,7 +2,7 @@ process FUSIONCATCHER_BUILD { tag "fusioncatcher_build" label 'process_medium' - conda "${projectDir}/environment.yml" + conda "${projectDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf index f86702000..7980439f8 100644 --- a/modules/local/fusioncatcher/detect/main.nf +++ b/modules/local/fusioncatcher/detect/main.nf @@ -1,7 +1,7 @@ process FUSIONCATCHER_DETECT { tag "$meta.id" label 'process_high' - + conda "${projectDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : @@ -12,7 +12,7 @@ process FUSIONCATCHER_DETECT { tuple val(meta2), path(reference) output: - tuple val(meta), path("*.fusioncatcher.fusion-genes.txt"), emit: fusions, optional: true + tuple val(meta), path("*.fusioncatcher.fusion-genes.txt"), emit: fusions, optional: true tuple val(meta), path("*.fusioncatcher.summary.txt") , emit: summary, optional: true tuple val(meta), path("*.fusioncatcher.log") , emit: log path "versions.yml" , emit: versions diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test index 59c60595b..ef6cecc7d 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -22,7 +22,7 @@ nextflow_workflow { } } } - + // TODO: get smaller reference files for fusioncatcher when { workflow { @@ -38,7 +38,7 @@ nextflow_workflow { ] ) // ch_references - input[1] = FUSIONCATCHER_BUILD.out.reference + input[1] = FUSIONCATCHER_BUILD.out.reference // fusioncatcher (boolean) input[2] = true From 557a0ed45da78438808da1fa875c649520f59390 Mon Sep 17 00:00:00 2001 From: Alan M Date: Fri, 3 Jan 2025 20:04:27 +0100 Subject: [PATCH 311/887] prettier changes --- modules/local/fusioncatcher/build/environment.yml | 6 +++--- modules/local/fusioncatcher/detect/environment.yml | 6 +++--- modules/local/fusioncatcher/download/environment.yml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/local/fusioncatcher/build/environment.yml b/modules/local/fusioncatcher/build/environment.yml index b5d59e181..8e83de36b 100644 --- a/modules/local/fusioncatcher/build/environment.yml +++ b/modules/local/fusioncatcher/build/environment.yml @@ -1,5 +1,5 @@ channels: -- conda-forge -- bioconda + - conda-forge + - bioconda dependencies: -- bioconda::fusioncatcher=1.33 + - bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/detect/environment.yml b/modules/local/fusioncatcher/detect/environment.yml index b5d59e181..8e83de36b 100644 --- a/modules/local/fusioncatcher/detect/environment.yml +++ b/modules/local/fusioncatcher/detect/environment.yml @@ -1,5 +1,5 @@ channels: -- conda-forge -- bioconda + - conda-forge + - bioconda dependencies: -- bioconda::fusioncatcher=1.33 + - bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/download/environment.yml b/modules/local/fusioncatcher/download/environment.yml index b5d59e181..8e83de36b 100644 --- a/modules/local/fusioncatcher/download/environment.yml +++ b/modules/local/fusioncatcher/download/environment.yml @@ -1,5 +1,5 @@ channels: -- conda-forge -- bioconda + - conda-forge + - bioconda dependencies: -- bioconda::fusioncatcher=1.33 + - bioconda::fusioncatcher=1.33 From a04128cd7d036fe58067e50b567abe7b4bbec69c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 7 Jan 2025 10:37:08 +0100 Subject: [PATCH 312/887] fix some merge conflicts --- main.nf | 6 +-- .../utils_nfcore_rnafusion_pipeline/main.nf | 3 +- tests/test_stub.nf.test.snap | 38 +++---------------- 3 files changed, 10 insertions(+), 37 deletions(-) diff --git a/main.nf b/main.nf index ced04ca91..efe3437ac 100644 --- a/main.nf +++ b/main.nf @@ -56,7 +56,8 @@ workflow NFCORE_RNAFUSION { } else { RNAFUSION(samplesheet) } - + emit: + RNAFUSION.out.multiqc_report } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -73,10 +74,8 @@ workflow { PIPELINE_INITIALISATION ( params.version, params.validate_params, - params.monochrome_logs, args, params.outdir, - params.input ) // @@ -96,6 +95,7 @@ workflow { params.outdir, params.monochrome_logs, params.hook_url, + NFCORE_RNAFUSION.out.multiqc_report ) } diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 8b08603ce..9cff37c6a 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -30,10 +30,8 @@ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit validate_params // boolean: Boolean whether to validate parameters against the schema at runtime - monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args outdir // string: The output directory where the results will be saved - input // string: Path to input samplesheet main: @@ -114,6 +112,7 @@ workflow PIPELINE_COMPLETION { outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications + multiqc_report main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 3b83c2400..117067622 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -2,17 +2,7 @@ "stub test no fastp trim": { "content": [ 4, - { - "FASTQC": { - "fastqc": "0.12.1" - }, - "FUSIONREPORT": { - "fusion_report": "2.1.5" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + null, [ "fastqc", "fastqc/test.html", @@ -30,7 +20,7 @@ "multiqc/multiqc_plots", "multiqc/multiqc_report.html", "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", @@ -41,28 +31,12 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T19:27:00.717876194" + "timestamp": "2024-12-20T15:40:14.297437" }, "stub test with fastp trim": { "content": [ 6, - { - "FASTP": { - "fastp": "0.23.4" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FASTQC_FOR_FASTP": { - "fastqc": "0.12.1" - }, - "FUSIONREPORT": { - "fusion_report": "2.1.5" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + null, [ "fastp", "fastp/test.fastp.html", @@ -89,7 +63,7 @@ "multiqc/multiqc_plots", "multiqc/multiqc_report.html", "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", @@ -100,6 +74,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-03T19:26:43.375635514" + "timestamp": "2024-12-20T15:39:20.981018" } } \ No newline at end of file From c5c45c0e2d628607d9dc5e34df7ab017ae70e89e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:20:24 +0100 Subject: [PATCH 313/887] update softwareversion file --- .../utils_nfcore_rnafusion_pipeline/main.nf | 2 +- tests/test_cosmic.nf.test | 6 +- tests/test_cosmic.nf.test.snap | 10 +- tests/test_stub.nf.test | 4 +- tests/test_stub.nf.test.snap | 210 +++++++++++++++++- 5 files changed, 217 insertions(+), 15 deletions(-) diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index c57ce9f3b..7e0362286 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -130,7 +130,7 @@ workflow PIPELINE_COMPLETION { plaintext_email, outdir, monochrome_logs, - multiqc_reports.getVal(), + multiqc_reports.getVal() ) } diff --git a/tests/test_cosmic.nf.test b/tests/test_cosmic.nf.test index 9a56e76e5..b4f2a3639 100644 --- a/tests/test_cosmic.nf.test +++ b/tests/test_cosmic.nf.test @@ -28,7 +28,7 @@ nextflow_pipeline { // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents @@ -58,7 +58,7 @@ nextflow_pipeline { // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents @@ -89,7 +89,7 @@ nextflow_pipeline { // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents diff --git a/tests/test_cosmic.nf.test.snap b/tests/test_cosmic.nf.test.snap index b8e6d4a5f..c920e0321 100644 --- a/tests/test_cosmic.nf.test.snap +++ b/tests/test_cosmic.nf.test.snap @@ -9,10 +9,10 @@ }, [ "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml" + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml" ], [ - + ] ], "meta": { @@ -29,7 +29,7 @@ "pipeline_info" ], [ - + ] ], "meta": { @@ -46,7 +46,7 @@ "pipeline_info" ], [ - + ] ], "meta": { @@ -55,4 +55,4 @@ }, "timestamp": "2024-12-10T15:09:29.277399" } -} \ No newline at end of file +} diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index b0601a9f7..065723e2f 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -30,7 +30,7 @@ nextflow_pipeline { // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents @@ -61,7 +61,7 @@ nextflow_pipeline { // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index c535947e3..91d847eb8 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -2,7 +2,105 @@ "stub test no fastp trim": { "content": [ 31, - null, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER": { + "fusioncatcher": 1.35 + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "fusioncatcher.py 1.35" + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_ARRIBA": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, [ "arriba", "arriba/test.arriba.fusions.discarded.tsv", @@ -259,12 +357,116 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2025-01-07T10:53:09.572584" + "timestamp": "2025-01-07T13:16:02.754052" }, "stub test with fastp trim": { "content": [ 33, - null, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER": { + "fusioncatcher": 1.35 + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "fusioncatcher.py 1.35" + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_ARRIBA": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": null, + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, [ "arriba", "arriba/test.arriba.fusions.discarded.tsv", @@ -530,6 +732,6 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2025-01-07T10:50:24.959026" + "timestamp": "2025-01-07T13:13:38.690939" } } \ No newline at end of file From 5a019d14600ba5361ca13649d040db173272c492 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:31:19 +0100 Subject: [PATCH 314/887] update version --- tests/test_stub.nf.test.snap | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 91d847eb8..92a7c0eea 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -77,17 +77,17 @@ "STAR-Fusion": "1.14.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, @@ -443,17 +443,17 @@ "STAR-Fusion": "1.14.0" }, "STAR_FOR_ARRIBA": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { - "star": null, + "star": "2.7.11b", "samtools": 1.2, "gawk": "5.1.0" }, @@ -734,4 +734,4 @@ }, "timestamp": "2025-01-07T13:13:38.690939" } -} \ No newline at end of file +} From 1516bcadd2bc907a43d345aff98207a532ab6d91 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:35:20 +0000 Subject: [PATCH 315/887] feat: update `fusion-report` to 3.1.1 --- modules/local/fusionreport/detect/environment.yml | 6 ++++++ modules/local/fusionreport/detect/main.nf | 5 ++++- modules/local/fusionreport/download/environment.yml | 6 ++++++ modules/local/fusionreport/download/main.nf | 6 ++++-- 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 modules/local/fusionreport/detect/environment.yml create mode 100644 modules/local/fusionreport/download/environment.yml diff --git a/modules/local/fusionreport/detect/environment.yml b/modules/local/fusionreport/detect/environment.yml new file mode 100644 index 000000000..0d260fdb8 --- /dev/null +++ b/modules/local/fusionreport/detect/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::fusion-report=3.1.1 + - conda-forge::openpyxl=3.1.5 diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 56a29ab4c..3670eec0b 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -2,7 +2,10 @@ process FUSIONREPORT { tag "$meta.id" label 'process_medium' - container "docker.io/clinicalgenomics/fusion-report:3.1.0" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d9d1075dc45da6b08ec99c6e8bcc83e0ab71a674e7efdc7a36e459539793fcf9/data' : + 'community.wave.seqera.io/library/fusion-report_openpyxl:6748677442b83a9a'}" input: diff --git a/modules/local/fusionreport/download/environment.yml b/modules/local/fusionreport/download/environment.yml new file mode 100644 index 000000000..0d260fdb8 --- /dev/null +++ b/modules/local/fusionreport/download/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::fusion-report=3.1.1 + - conda-forge::openpyxl=3.1.5 diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 89f631db4..ec62c75eb 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -2,8 +2,10 @@ process FUSIONREPORT_DOWNLOAD { tag 'fusionreport' label 'process_medium' - conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:3.1.0" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d9d1075dc45da6b08ec99c6e8bcc83e0ab71a674e7efdc7a36e459539793fcf9/data' : + 'community.wave.seqera.io/library/fusion-report_openpyxl:6748677442b83a9a'}" output: tuple val(meta), path("fusion_report_db"), emit: fusionreport_ref From f40e9f5f8532e06195654a3eb9e3f90a0ccba959 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:37:13 +0000 Subject: [PATCH 316/887] test: add required params --- .../fusionreport_workflow/tests/main.nf.test | 14 ++++-- .../tests/main.nf.test.snap | 46 +++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 subworkflows/local/fusionreport_workflow/tests/main.nf.test.snap diff --git a/subworkflows/local/fusionreport_workflow/tests/main.nf.test b/subworkflows/local/fusionreport_workflow/tests/main.nf.test index 2b7da3d3c..61aaf023d 100644 --- a/subworkflows/local/fusionreport_workflow/tests/main.nf.test +++ b/subworkflows/local/fusionreport_workflow/tests/main.nf.test @@ -26,23 +26,23 @@ nextflow_workflow { // Input channels input[0] = Channel.of( [ [ id:'test_sample' ], - file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz") ] + file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz") ] ) input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref input[2] = Channel.of( - [[ id:'test_sample' ], + [[ id:'test_sample' ], file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/arriba.tsv") ] ) input[3] = Channel.of( - [[ id:'test_sample' ], + [[ id:'test_sample' ], file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/starfusion.tsv") ] ) input[4] = Channel.of( - [[ id:'test_sample' ], + [[ id:'test_sample' ], file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt") ] ) @@ -51,6 +51,10 @@ nextflow_workflow { params { fusioninspector_only = false tools_cutoff = 1 + arriba = true + starfusion = true + fusioncatcher = true + no_cosmic = true outdir = "$outputDir" } } @@ -69,5 +73,5 @@ nextflow_workflow { } } - + } diff --git a/subworkflows/local/fusionreport_workflow/tests/main.nf.test.snap b/subworkflows/local/fusionreport_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..2c384e5a2 --- /dev/null +++ b/subworkflows/local/fusionreport_workflow/tests/main.nf.test.snap @@ -0,0 +1,46 @@ +{ + "FUSIONREPORT_WORKFLOW - Full Test": { + "content": [ + [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport.tsv:md5,3593b7021f26cc5427fdc96f0d1c72f0" + ] + ], + [ + [ + { + "id": "test_sample" + }, + "test_sample.fusionreport_filtered.tsv:md5,3593b7021f26cc5427fdc96f0d1c72f0" + ] + ], + [ + [ + { + "id": "test_sample" + }, + "test_sample_fusionreport_index.html:md5,3513bcaa58446399c0957db69402d3bd" + ] + ], + [ + [ + { + "id": "test_sample" + }, + "test_sample.fusions.csv:md5,49f378c2112d7e0b3b17d9095c79e6bd" + ] + ], + [ + "versions.yml:md5,90749dbf8e3e7b259c935eabb8c6ce1e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2025-01-07T13:31:41.215356596" + } +} \ No newline at end of file From f976de19694abce63c010c2ce83a80c04d0b0f3f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:42:18 +0000 Subject: [PATCH 317/887] test: adapt the test to new template --- tests/test_build.nf.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test index 1dbda8336..f6665777b 100644 --- a/tests/test_build.nf.test +++ b/tests/test_build.nf.test @@ -27,7 +27,7 @@ nextflow_pipeline { // Number of successful tasks workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents From 2a2d9ca032786848266ab2c612640e46a16b71c2 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 9 Jan 2025 13:40:10 +0000 Subject: [PATCH 318/887] test: try fix on template merge issue --- tests/test_build.nf.test.snap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index c8aefa908..f2e1bc38f 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -52,7 +52,7 @@ "get/rrna.bed", "get/rrna.gtf", "pipeline_info", - "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", "references/arriba", "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", @@ -197,7 +197,7 @@ "minigenome.gtf.interval_list:md5,9111fe876b17e5c18314206e9f985b8c", "minigenome.gtf.refflat:md5,ed76bc063c98087f1100a928923758c7", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", - "hgnc_complete_set.txt:md5,a563a2f8432ec0ab7d3dc74d769102b8", + "hgnc_complete_set.txt:md5,ba66fe5d27ce643b5636a2a85b1b32cb", "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", "ctg_offsets.bin:md5,174ead59c00c5264300d3ff1de673074", "duplicate_clusters.tsv:md5,d30ab58d133298ed9ba51f1ba20ce89c", @@ -284,4 +284,4 @@ }, "timestamp": "2024-12-30T13:35:33.573499693" } -} \ No newline at end of file +} From b7c928b02b2e532d4128e5edd86a3b2937cf2242 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 14 Jan 2025 13:10:10 +0000 Subject: [PATCH 319/887] test: update tests and snapshot --- tests/.nftignore | 1 + tests/test_build.nf.test.snap | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/.nftignore b/tests/.nftignore index 7b5b68596..07c82b438 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -3,6 +3,7 @@ references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa references/hgnc/HGNC-DB-timestamp.txt +references/hgnc/hgnc_complete_set.txt references/fusion_report_db/DB-timestamp.txt references/salmon/salmon/ctable.bin references/salmon/salmon/pos.bin diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index f2e1bc38f..d1d798fc7 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -191,13 +191,12 @@ "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,7bd504feefb33fcfc9be0517439a423c", "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,43c387a784ebeed71b4147076cebf978", "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusiongdb2.db:md5,e1ac123a744e515d3e5f85b8344d526a", - "mitelman.db:md5,1363795c97f77c641065ecd9ad0e484a", + "fusiongdb2.db:md5,715b52d8fa4270c510240c48fb88e9c7", + "mitelman.db:md5,51e307dbf4c35c425a3473baa44939c0", "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "minigenome.gtf.interval_list:md5,9111fe876b17e5c18314206e9f985b8c", "minigenome.gtf.refflat:md5,ed76bc063c98087f1100a928923758c7", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", - "hgnc_complete_set.txt:md5,ba66fe5d27ce643b5636a2a85b1b32cb", "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", "ctg_offsets.bin:md5,174ead59c00c5264300d3ff1de673074", "duplicate_clusters.tsv:md5,d30ab58d133298ed9ba51f1ba20ce89c", @@ -282,6 +281,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2024-12-30T13:35:33.573499693" + "timestamp": "2025-01-14T13:08:24.564679638" } -} +} \ No newline at end of file From 675c0a3b835c7b434a6faa76187186191ff5f3b5 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 14 Jan 2025 14:12:05 +0000 Subject: [PATCH 320/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 010d16194..3738dca25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `FUSIONCATCHER_WORKFLOW` [#591](https://github.com/nf-core/rnafusion/pull/591) - Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) - Add nf-test to local module: `FUSIONINSPECTOR`. [#601](https://github.com/nf-core/rnafusion/pull/601) +- Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) ### Changed From 7bfea342bb32e7cf713225f3af45e65356478c4e Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Mon, 20 Jan 2025 14:37:10 +0000 Subject: [PATCH 321/887] Template update for nf-core/tools version 3.1.2 --- .github/workflows/ci.yml | 2 + .github/workflows/download_pipeline.yml | 28 +++++---- .nf-core.yml | 2 +- CITATIONS.md | 4 +- README.md | 10 ++- conf/test.config | 4 +- nextflow.config | 2 +- ro-crate-metadata.json | 81 +++++++++---------------- 8 files changed, 61 insertions(+), 72 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 68412b2ce..78fb3b574 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,6 +46,8 @@ jobs: steps: - name: Check out pipeline code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + with: + fetch-depth: 0 - name: Set up Nextflow uses: nf-core/setup-nextflow@v2 diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 13b51e2c3..ab06316ea 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -34,6 +34,17 @@ jobs: REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} + steps: + - name: Get the repository name and current branch + id: get_repo_properties + run: | + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" + + download: + runs-on: ubuntu-latest + needs: configure steps: - name: Install Nextflow uses: nf-core/setup-nextflow@v2 @@ -56,21 +67,10 @@ jobs: python -m pip install --upgrade pip pip install git+https://github.com/nf-core/tools.git@dev - - name: Get the repository name and current branch set as environment variable - id: get_repo_properties - run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" - - name: Make a cache directory for the container images run: | mkdir -p ./singularity_container_images - download: - runs-on: ubuntu-latest - needs: configure - steps: - name: Download the pipeline env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images @@ -87,6 +87,9 @@ jobs: - name: Inspect download run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} + - name: Inspect container images + run: tree ./singularity_container_images | tee ./container_initial + - name: Count the downloaded number of container images id: count_initial run: | @@ -123,7 +126,8 @@ jobs: final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} difference=$((final_count - initial_count)) echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" - tree ./singularity_container_images + tree ./singularity_container_images > ./container_afterwards + diff ./container_initial ./container_afterwards exit 1 else echo "The pipeline can be downloaded successfully!" diff --git a/.nf-core.yml b/.nf-core.yml index 148865a49..dbf96efef 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,7 +4,7 @@ lint: - .github/PULL_REQUEST_TEMPLATE.md - conf/igenomes.config - conf/igenomes_ignored.config -nf_core_version: 3.1.1 +nf_core_version: 3.1.2 repository_type: pipeline template: author: Martin Proks, Annick Renevey diff --git a/CITATIONS.md b/CITATIONS.md index 93ddd1a75..0fc81801b 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,7 +12,9 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) -> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online].- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. + +- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. diff --git a/README.md b/README.md index 12b71f87f..f40e75a67 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ nf-core/rnafusion -[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml) + + +[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) @@ -32,7 +34,7 @@ ## Usage > [!NOTE] -> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow.Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. - + + + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/conf/test.config b/conf/test.config index 955708618..56ff5304f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,8 +25,6 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - - // Genome references + input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'// Genome references genome = 'R64-1-1' } diff --git a/nextflow.config b/nextflow.config index bf863573a..1057767d5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -257,7 +257,7 @@ manifest { // Nextflow plugins plugins { - id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 145ad4d00..1314af32a 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2024-12-20T13:11:36+00:00", - "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    [![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow.Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2025-01-20T14:36:55+00:00", + "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#f907a90b-3444-4392-bd9f-cad7780c2dc3" + "@id": "#f6260e6b-9f65-45aa-9ada-0e886fa2fb70" } ], "name": "nf-core/rnafusion" @@ -121,61 +121,40 @@ }, { "@id": "main.nf", - "@type": [ - "File", - "SoftwareSourceCode", - "ComputationalWorkflow" - ], + "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], "creator": [ { - "@id": "https://orcid.org/0000-0002-8178-3128" + "@id": "#phil.ewels@scilifelab.se" }, { - "@id": "#max.u.garcia@gmail.com" + "@id": "https://orcid.org/0000-0001-9017-591X" }, { - "@id": "#phil.ewels@scilifelab.se" + "@id": "https://orcid.org/0000-0002-8178-3128" }, { - "@id": "https://orcid.org/0000-0001-9017-591X" + "@id": "#max.u.garcia@gmail.com" } ], "dateCreated": "", - "dateModified": "2024-12-20T13:11:36Z", + "dateModified": "2025-01-20T14:36:55Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", - "keywords": [ - "nf-core", - "nextflow", - "fusion", - "fusion-genes", - "gene-fusion", - "rna", - "rna-seq" - ], - "license": [ - "MIT" - ], + "keywords": ["nf-core", "nextflow", "fusion", "fusion-genes", "gene-fusion", "rna", "rna-seq"], + "license": ["MIT"], "maintainer": [ { "@id": "https://orcid.org/0000-0002-8178-3128" } ], - "name": [ - "nf-core/rnafusion" - ], + "name": ["nf-core/rnafusion"], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": [ - "https://github.com/nf-core/rnafusion", - "https://nf-co.re/rnafusion/dev/" - ], - "version": [ - "4.0.0dev" - ] + "url": ["https://github.com/nf-core/rnafusion", "https://nf-co.re/rnafusion/dev/"], + "version": ["4.0.0dev"] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -190,11 +169,11 @@ "version": "!>=24.04.2" }, { - "@id": "#f907a90b-3444-4392-bd9f-cad7780c2dc3", + "@id": "#f6260e6b-9f65-45aa-9ada-0e886fa2fb70", "@type": "TestSuite", "instance": [ { - "@id": "#7a00a302-505f-4b06-bd1c-5a4e1fa19bdd" + "@id": "#c5ee26a1-ec22-464a-b17b-3a0c5dcf6e02" } ], "mainEntity": { @@ -203,7 +182,7 @@ "name": "Test suite for nf-core/rnafusion" }, { - "@id": "#7a00a302-505f-4b06-bd1c-5a4e1fa19bdd", + "@id": "#c5ee26a1-ec22-464a-b17b-3a0c5dcf6e02", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/rnafusion", "resource": "repos/nf-core/rnafusion/actions/workflows/ci.yml", @@ -331,18 +310,6 @@ "name": "nf-core", "url": "https://nf-co.re/" }, - { - "@id": "https://orcid.org/0000-0002-8178-3128", - "@type": "Person", - "email": "mproksik@gmail.com", - "name": "Martin Proks" - }, - { - "@id": "#max.u.garcia@gmail.com", - "@type": "Person", - "email": "max.u.garcia@gmail.com", - "name": "Maxime Garcia" - }, { "@id": "#phil.ewels@scilifelab.se", "@type": "Person", @@ -354,6 +321,18 @@ "@type": "Person", "email": "rickard.hammaren@scilifelab.se", "name": "Rickard Hammar\u00e9n" + }, + { + "@id": "https://orcid.org/0000-0002-8178-3128", + "@type": "Person", + "email": "mproksik@gmail.com", + "name": "Martin Proks" + }, + { + "@id": "#max.u.garcia@gmail.com", + "@type": "Person", + "email": "max.u.garcia@gmail.com", + "name": "Maxime Garcia" } ] -} \ No newline at end of file +} From a31752950e168b58dd5bdb9ac243eef11866e892 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 21 Jan 2025 14:55:01 +0100 Subject: [PATCH 322/887] add cancer splicing lib to starfusion ref --- conf/modules.config | 15 ++++++- .../local/ctatsplicing/prepgenomelib/main.nf | 45 +++++++++++++++++++ nextflow.config | 1 - subworkflows/local/build_references.nf | 11 ++++- 4 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 modules/local/ctatsplicing/prepgenomelib/main.nf diff --git a/conf/modules.config b/conf/modules.config index 967e820a7..c66cafadb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -360,7 +360,20 @@ process { ] } - withName: 'NFCORE_RNAFUSION:BUILD_REFERENCES:STARFUSION_BUILD' { + withName: 'STARFUSION_BUILD' { + cpus = { 24 * task.attempt } + memory = { 100.GB * task.attempt } + time = { 2.d * task.attempt } + publishDir = [ + enabled: !params.ctatsplicing && !params.all, + path: { "${params.genomes_base}/starfusion" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + ext.args = "--max_readlength ${params.read_length} --human_gencode_filter" + } + + withName: 'CTATSPLICING_PREPGENOMELIB' { cpus = { 24 * task.attempt } memory = { 100.GB * task.attempt } time = { 2.d * task.attempt } diff --git a/modules/local/ctatsplicing/prepgenomelib/main.nf b/modules/local/ctatsplicing/prepgenomelib/main.nf new file mode 100644 index 000000000..fd7feebc4 --- /dev/null +++ b/modules/local/ctatsplicing/prepgenomelib/main.nf @@ -0,0 +1,45 @@ +process CTATSPLICING_PREPGENOMELIB { + tag "$meta.id" + label 'process_single' + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://data.broadinstitute.org/Trinity/CTAT_SINGULARITY/CTAT-SPLICING/ctat_splicing.v0.0.2.simg' : + 'docker.io/trinityctat/ctat_splicing:0.0.2' }" + + input: + tuple val(meta), path(genome_lib) + + output: + tuple val(meta), path(genome_lib, includeInputs:true), emit: reference + path "versions.yml" , emit: versions + + script: + def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz + + /usr/local/src/CTAT-SPLICING/prep_genome_lib/ctat-splicing-lib-integration.py \\ + --cancer_introns_tsv cancer_introns.*.tsv.gz \\ + --genome_lib_dir $genome_lib + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ctat-splicing: $VERSION + END_VERSIONS + """ + + stub: + def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + touch $genome_lib/refGene.bed + touch $genome_lib/refGene.sort.bed.gz + touch $genome_lib/refGene.sort.bed.gz.tbi + mkdir $genome_lib/cancer_splicing_lib + touch $genome_lib/cancer_splicing_lib/cancer_splicing.idx + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ctat-splicing: $VERSION + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index 1bd38be68..d83ceecda 100644 --- a/nextflow.config +++ b/nextflow.config @@ -91,7 +91,6 @@ params { starindex_ref = "${params.genomes_base}/star" fusionreport_ref = "${params.genomes_base}/fusion_report_db" - // Internal file presence checks salmon_index_stub_check = "${params.genomes_base}/salmon/salmon/complete_ref_lens.bin" starindex_ref_stub_check = "${params.genomes_base}/star/star/Genome" diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 56fd8eb24..c7cb3c31b 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -11,6 +11,7 @@ include { HGNC_DOWNLOAD } from '../../modules/local/hgnc/main' include { STARFUSION_BUILD } from '../../modules/local/starfusion/build/main' include { GTF_TO_REFFLAT } from '../../modules/local/uscs/custom_gtftogenepred/main' include { GET_RRNA_TRANSCRIPTS } from '../../modules/local/get_rrna_transcript/main' +include { CTATSPLICING_PREPGENOMELIB } from '../../modules/local/ctatsplicing/prepgenomelib/main.nf' /* ======================================================================================== @@ -142,7 +143,15 @@ workflow BUILD_REFERENCES { !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) - ch_starfusion_ref = STARFUSION_BUILD.out.reference + if (params.ctatsplicing || params.all) { + CTATSPLICING_PREPGENOMELIB( + STARFUSION_BUILD.out.reference + ) + ch_versions = ch_versions.mix(CTATSPLICING_PREPGENOMELIB.out.versions) + ch_starfusion_ref = CTATSPLICING_PREPGENOMELIB.out.reference + } else { + ch_starfusion_ref = STARFUSION_BUILD.out.reference + } } else { ch_starfusion_ref = Channel.fromPath(params.starfusion_ref) From 43b6045db4f743c9b3b0fc001095c4f2f8170d12 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 21 Jan 2025 14:57:07 +0100 Subject: [PATCH 323/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 010d16194..39c7f0ba0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `FUSIONCATCHER_WORKFLOW` [#591](https://github.com/nf-core/rnafusion/pull/591) - Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) - Add nf-test to local module: `FUSIONINSPECTOR`. [#601](https://github.com/nf-core/rnafusion/pull/601) +- Added `CTATSPLICING_PREPGENOMELIB` to update the starfusion genome library directory with a cancer splicing index. [#610](https://github.com/nf-core/rnafusion/pull/610) ### Changed From 472da39e9ad2d5f4b7590012ca332902956d04d2 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 21 Jan 2025 15:09:40 +0100 Subject: [PATCH 324/887] update prepgenomelib resources --- conf/modules.config | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index c66cafadb..c13cb3d2f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -374,9 +374,8 @@ process { } withName: 'CTATSPLICING_PREPGENOMELIB' { - cpus = { 24 * task.attempt } - memory = { 100.GB * task.attempt } - time = { 2.d * task.attempt } + cpus = { 1 * task.attempt } + memory = { 20.GB * task.attempt } publishDir = [ path: { "${params.genomes_base}/starfusion" }, mode: params.publish_dir_mode, From 9fcd72ff7aa4f3d48f6b65e575e5abc039461628 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:14:45 +0100 Subject: [PATCH 325/887] remove md5sums for databases --- tests/test_build.nf.test.snap | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index f2e1bc38f..421d557e7 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -191,13 +191,10 @@ "cytobands_hg38_GRCh38_v2.4.0.tsv:md5,7bd504feefb33fcfc9be0517439a423c", "protein_domains_hg38_GRCh38_v2.4.0.gff3:md5,43c387a784ebeed71b4147076cebf978", "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", - "fusiongdb2.db:md5,e1ac123a744e515d3e5f85b8344d526a", - "mitelman.db:md5,1363795c97f77c641065ecd9ad0e484a", "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "minigenome.gtf.interval_list:md5,9111fe876b17e5c18314206e9f985b8c", "minigenome.gtf.refflat:md5,ed76bc063c98087f1100a928923758c7", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", - "hgnc_complete_set.txt:md5,ba66fe5d27ce643b5636a2a85b1b32cb", "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", "ctg_offsets.bin:md5,174ead59c00c5264300d3ff1de673074", "duplicate_clusters.tsv:md5,d30ab58d133298ed9ba51f1ba20ce89c", From cf53a214f5ae9791054f169bb0ee3355ad1a7ef4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:50:40 +0100 Subject: [PATCH 326/887] move outdir up --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 1bd38be68..bebb5a8c0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -15,6 +15,7 @@ params { cosmic_username = null cosmic_passwd = null qiagen = false + outdir = null // MultiQC options multiqc_config = null @@ -107,7 +108,6 @@ params { whitelist = null // Boilerplate options - outdir = null publish_dir_mode = 'copy' email = null email_on_fail = null From 0915989fc0bd19f27f6f9d1a612e1ba5cf33a88b Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 21 Jan 2025 15:55:03 +0000 Subject: [PATCH 327/887] fix stub test snapshot --- tests/test_stub.nf.test.snap | 330 ++++++++++++++++++----------------- 1 file changed, 174 insertions(+), 156 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 3a4257485..cd8cd92cc 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,7 +1,7 @@ { "stub test no fastp trim": { "content": [ - 31, + 32, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -9,6 +9,9 @@ "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, + "CTATSPLICING_PREPGENOMELIB": { + "ctat-splicing": "0.0.2" + }, "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" }, @@ -224,6 +227,87 @@ "references/star/sjdbList.fromGTF.out.tab", "references/star/sjdbList.out.tab", "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", @@ -266,81 +350,6 @@ "star_for_starfusion/test.unmapped_2.fastq.gz", "star_for_starfusion/testXd.out.bam", "starfusion", - "starfusion/ctat_genome_lib_build_dir", - "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "starfusion/ctat_genome_lib_build_dir/__chkpts", - "starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "starfusion/test.starfusion.abridged.coding_effect.tsv", "starfusion/test.starfusion.abridged.tsv", "starfusion/test.starfusion.fusion_predictions.tsv", @@ -355,13 +364,13 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.4" }, - "timestamp": "2025-01-07T13:16:02.754052" + "timestamp": "2025-01-21T15:53:57.652134536" }, "stub test with fastp trim": { "content": [ - 33, + 34, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -369,6 +378,9 @@ "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, + "CTATSPLICING_PREPGENOMELIB": { + "ctat-splicing": "0.0.2" + }, "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" }, @@ -599,6 +611,87 @@ "references/star/sjdbList.fromGTF.out.tab", "references/star/sjdbList.out.tab", "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "salmon", "salmon/test", "salmon/test_lib_format_counts.json", @@ -641,81 +734,6 @@ "star_for_starfusion/test.unmapped_2.fastq.gz", "star_for_starfusion/testXd.out.bam", "starfusion", - "starfusion/ctat_genome_lib_build_dir", - "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "starfusion/ctat_genome_lib_build_dir/__chkpts", - "starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "starfusion/test.starfusion.abridged.coding_effect.tsv", "starfusion/test.starfusion.abridged.tsv", "starfusion/test.starfusion.fusion_predictions.tsv", @@ -730,8 +748,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.4" }, - "timestamp": "2025-01-07T13:13:38.690939" + "timestamp": "2025-01-21T15:53:10.332117615" } } \ No newline at end of file From 49b2e1d549d22e9aae2a07059f0a11d16a37f0c0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 Jan 2025 17:00:18 +0100 Subject: [PATCH 328/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 010d16194..00339c8ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update from ensembl 102 to gencode 46 default references [#505](https://github.com/nf-core/rnafusion/pull/505) - Update`FUSIONINSPECTOR` to v2.10.0. [#601](https://github.com/nf-core/rnafusion/pull/601) - Remove local module `STARFUSION_DOWNLOAD` [#598](https://github.com/nf-core/rnafusion/pull/598) +- Fix error message when parameter outdir is missing [#611](https://github.com/nf-core/rnafusion/pull/611) ### Fixed From 77952f9141d5d9748b279de5726090732ab47f9a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 21 Jan 2025 17:10:11 +0100 Subject: [PATCH 329/887] excude databases subject to quick changes --- tests/.nftignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/.nftignore b/tests/.nftignore index 7b5b68596..9d6a156e3 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -3,7 +3,10 @@ references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz references/ensembl/Homo_sapiens.GRCh38.102.dna.primary_assembly.fa references/hgnc/HGNC-DB-timestamp.txt +references/hgnc/hgnc_complete_set.txt references/fusion_report_db/DB-timestamp.txt +references/fusion_report_db/fusiongdb2.db +references/fusion_report_db/mitelman.db references/salmon/salmon/ctable.bin references/salmon/salmon/pos.bin references/salmon/salmon/pre_indexing.log From 2d5d9bb557a2d3c12e7dbd1536648fdc324b6b06 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 22 Jan 2025 15:11:46 +0000 Subject: [PATCH 330/887] fix: add unstable files to nftignore --- tests/.nftignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/.nftignore b/tests/.nftignore index 9d6a156e3..cb651aedf 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -33,3 +33,5 @@ starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm references/star/genomeParameters.txt starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt +references/fusion_report_db/mitelman.db +references/fusion_report_db/fusiongdb2.db From 10d431d184aa768d00799f19eb18362f2386628b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 22 Jan 2025 16:55:30 +0100 Subject: [PATCH 331/887] add param instead of hardcoded url --- modules/local/ctatsplicing/prepgenomelib/main.nf | 3 +-- nextflow.config | 1 + nextflow_schema.json | 7 +++++++ subworkflows/local/build_references.nf | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/modules/local/ctatsplicing/prepgenomelib/main.nf b/modules/local/ctatsplicing/prepgenomelib/main.nf index fd7feebc4..0fbf5e9e4 100644 --- a/modules/local/ctatsplicing/prepgenomelib/main.nf +++ b/modules/local/ctatsplicing/prepgenomelib/main.nf @@ -8,6 +8,7 @@ process CTATSPLICING_PREPGENOMELIB { input: tuple val(meta), path(genome_lib) + path(cancer_intron_tsv) output: tuple val(meta), path(genome_lib, includeInputs:true), emit: reference @@ -16,8 +17,6 @@ process CTATSPLICING_PREPGENOMELIB { script: def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ - wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz - /usr/local/src/CTAT-SPLICING/prep_genome_lib/ctat-splicing-lib-integration.py \\ --cancer_introns_tsv cancer_introns.*.tsv.gz \\ --genome_lib_dir $genome_lib diff --git a/nextflow.config b/nextflow.config index d83ceecda..fafd6ac20 100644 --- a/nextflow.config +++ b/nextflow.config @@ -90,6 +90,7 @@ params { starfusion_ref = "${params.genomes_base}/starfusion/ctat_genome_lib_build_dir" starindex_ref = "${params.genomes_base}/star" fusionreport_ref = "${params.genomes_base}/fusion_report_db" + ctatsplicing_cancer_introns = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz" // Internal file presence checks salmon_index_stub_check = "${params.genomes_base}/salmon/salmon/complete_ref_lens.bin" diff --git a/nextflow_schema.json b/nextflow_schema.json index 0f59e2144..aaf8a64ab 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -247,6 +247,13 @@ "fa_icon": "far fa-file-code", "description": "Path to file in starfusion references" }, + "ctatsplicing_cancer_introns": { + "type": "string", + "format": "file-path", + "exists": true, + "description": "Path to the cancer introns CSV file to create the CTAT-SPLICING reference with", + "default": "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz" + }, "starindex": { "type": "boolean", "fa_icon": "far fa-file-code", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index c7cb3c31b..6ad2c1906 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -145,7 +145,8 @@ workflow BUILD_REFERENCES { ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) if (params.ctatsplicing || params.all) { CTATSPLICING_PREPGENOMELIB( - STARFUSION_BUILD.out.reference + STARFUSION_BUILD.out.reference, + params.ctatsplicing_cancer_introns ) ch_versions = ch_versions.mix(CTATSPLICING_PREPGENOMELIB.out.versions) ch_starfusion_ref = CTATSPLICING_PREPGENOMELIB.out.reference From 6d6fbe9aa15412e694a774d5e83788a5c997bbca Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Mon, 27 Jan 2025 14:47:35 +0000 Subject: [PATCH 332/887] Template update for nf-core/tools version 3.2.0 --- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 33 ------------------- .nf-core.yml | 2 +- .pre-commit-config.yaml | 2 +- docs/output.md | 11 +++++-- modules.json | 4 +-- modules/nf-core/fastqc/main.nf | 20 +++++------ modules/nf-core/fastqc/tests/tags.yml | 2 -- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +-- .../nf-core/multiqc/tests/main.nf.test.snap | 24 +++++++------- nextflow.config | 16 ++++----- ro-crate-metadata.json | 28 ++++++++-------- 13 files changed, 60 insertions(+), 90 deletions(-) delete mode 100644 modules/nf-core/fastqc/tests/tags.yml diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 0bed96d36..95b6b6af8 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@80620a5d27ce0ae443b965134db88467fc607b43 # v7 + uses: dawidd6/action-download-artifact@20319c5641d495c8a52e688b7dc5fada6c3a9fbc # v8 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 450b1d5e4..76a9e67ed 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -27,39 +27,6 @@ jobs: ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics - send-tweet: - runs-on: ubuntu-latest - - steps: - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 - with: - python-version: "3.10" - - name: Install dependencies - run: pip install tweepy==4.14.0 - - name: Send tweet - shell: python - run: | - import os - import tweepy - - client = tweepy.Client( - access_token=os.getenv("TWITTER_ACCESS_TOKEN"), - access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), - consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), - consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), - ) - tweet = os.getenv("TWEET") - client.create_tweet(text=tweet) - env: - TWEET: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} - TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} - TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} - TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} - bsky-post: runs-on: ubuntu-latest steps: diff --git a/.nf-core.yml b/.nf-core.yml index dbf96efef..dae5ba31d 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,7 +4,7 @@ lint: - .github/PULL_REQUEST_TEMPLATE.md - conf/igenomes.config - conf/igenomes_ignored.config -nf_core_version: 3.1.2 +nf_core_version: 3.2.0 repository_type: pipeline template: author: Martin Proks, Annick Renevey diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9e9f0e1c4..1dec86502 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - prettier@3.2.5 - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "3.0.3" + rev: "3.1.2" hooks: - id: editorconfig-checker alias: ec diff --git a/docs/output.md b/docs/output.md index f5beb7911..501e19501 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,7 +12,8 @@ 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- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +- [FastQC](#fastqc) - Raw read QC +- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC @@ -26,7 +27,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d
    -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/).### MultiQC +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). + +### MultiQC
    Output files @@ -40,7 +43,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see .### Pipeline information +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . + +### Pipeline information
    Output files diff --git a/modules.json b/modules.json index d655d7870..296d35429 100644 --- a/modules.json +++ b/modules.json @@ -7,12 +7,12 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "dc94b6ee04a05ddb9f7ae050712ff30a13149164", + "git_sha": "08108058ea36a63f141c25c4e75f9f872a5b2296", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", "installed_by": ["modules"] } } diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 752c3a10c..033f4154a 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -1,5 +1,5 @@ process FASTQC { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' conda "${moduleDir}/environment.yml" @@ -19,30 +19,30 @@ process FASTQC { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" // Make list of old name and new name pairs to use for renaming in the bash while loop def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } - def rename_to = old_new_pairs*.join(' ').join(' ') + def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ') // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus + def memory_in_mb = task.memory ? task.memory.toUnit('MB').toFloat() / task.cpus : null // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) """ - printf "%s %s\\n" $rename_to | while read old_name new_name; do + printf "%s %s\\n" ${rename_to} | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name done fastqc \\ - $args \\ - --threads $task.cpus \\ - --memory $fastqc_memory \\ - $renamed_files + ${args} \\ + --threads ${task.cpus} \\ + --memory ${fastqc_memory} \\ + ${renamed_files} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml deleted file mode 100644 index 7834294ba..000000000 --- a/modules/nf-core/fastqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastqc: - - modules/nf-core/fastqc/** diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 6f5b867b7..a27122ce1 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.25.1 + - bioconda::multiqc=1.27 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index cc0643e1d..58d9313c6 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.27--pyhdfd78af_0' : + 'biocontainers/multiqc:1.27--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 2fcbb5ff7..7b7c13220 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:51:46.317523" + "timestamp": "2025-01-27T09:29:57.631982377" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:52:20.680978" + "timestamp": "2025-01-27T09:30:34.743726958" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:52:09.185842" + "timestamp": "2025-01-27T09:30:21.44383553" } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 1057767d5..a309f87e6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -195,14 +195,14 @@ env { } // Set bash options -process.shell = """\ -bash - -set -e # Exit if a tool returns a non-zero status/exit code -set -u # Treat unset variables and parameters as an error -set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute -set -C # No clobber - prevent output redirection from overwriting files. -""" +process.shell = [ + "bash", + "-C", // No clobber - prevent output redirection from overwriting files. + "-e", // Exit if a tool returns a non-zero status/exit code + "-u", // Treat unset variables and parameters as an error + "-o", // Returns the status of the last command to exit.. + "pipefail" // ..with a non-zero status or zero if all successfully execute +] // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 1314af32a..972b1a807 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-01-20T14:36:55+00:00", + "datePublished": "2025-01-27T14:47:28+00:00", "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#f6260e6b-9f65-45aa-9ada-0e886fa2fb70" + "@id": "#472b4f7d-c1ad-4a49-9ebc-abac03e60cd0" } ], "name": "nf-core/rnafusion" @@ -127,17 +127,17 @@ "@id": "#phil.ewels@scilifelab.se" }, { - "@id": "https://orcid.org/0000-0001-9017-591X" + "@id": "#max.u.garcia@gmail.com" }, { "@id": "https://orcid.org/0000-0002-8178-3128" }, { - "@id": "#max.u.garcia@gmail.com" + "@id": "https://orcid.org/0000-0001-9017-591X" } ], "dateCreated": "", - "dateModified": "2025-01-20T14:36:55Z", + "dateModified": "2025-01-27T14:47:28Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": ["nf-core", "nextflow", "fusion", "fusion-genes", "gene-fusion", "rna", "rna-seq"], "license": ["MIT"], @@ -169,11 +169,11 @@ "version": "!>=24.04.2" }, { - "@id": "#f6260e6b-9f65-45aa-9ada-0e886fa2fb70", + "@id": "#472b4f7d-c1ad-4a49-9ebc-abac03e60cd0", "@type": "TestSuite", "instance": [ { - "@id": "#c5ee26a1-ec22-464a-b17b-3a0c5dcf6e02" + "@id": "#a52cf27d-3699-475d-b4c8-2eb08a2f0245" } ], "mainEntity": { @@ -182,7 +182,7 @@ "name": "Test suite for nf-core/rnafusion" }, { - "@id": "#c5ee26a1-ec22-464a-b17b-3a0c5dcf6e02", + "@id": "#a52cf27d-3699-475d-b4c8-2eb08a2f0245", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/rnafusion", "resource": "repos/nf-core/rnafusion/actions/workflows/ci.yml", @@ -317,10 +317,10 @@ "name": "Phil Ewels" }, { - "@id": "https://orcid.org/0000-0001-9017-591X", + "@id": "#max.u.garcia@gmail.com", "@type": "Person", - "email": "rickard.hammaren@scilifelab.se", - "name": "Rickard Hammar\u00e9n" + "email": "max.u.garcia@gmail.com", + "name": "Maxime Garcia" }, { "@id": "https://orcid.org/0000-0002-8178-3128", @@ -329,10 +329,10 @@ "name": "Martin Proks" }, { - "@id": "#max.u.garcia@gmail.com", + "@id": "https://orcid.org/0000-0001-9017-591X", "@type": "Person", - "email": "max.u.garcia@gmail.com", - "name": "Maxime Garcia" + "email": "rickard.hammaren@scilifelab.se", + "name": "Rickard Hammar\u00e9n" } ] } From 659fa0bc733b298724712bba50575ea97d56e6d6 Mon Sep 17 00:00:00 2001 From: MacBook Air Date: Thu, 20 Feb 2025 17:04:09 -0800 Subject: [PATCH 333/887] docs: update fusionreport score calculation documentation - Add detailed explanation of new scoring system - Document 80/20 weight distribution between tool detection and database hits - Add formula for score calculation --- docs/output.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/output.md b/docs/output.md index ad3c78e36..1664babfb 100644 --- a/docs/output.md +++ b/docs/output.md @@ -264,13 +264,17 @@ The weights for databases are as follows: - MITELMAN (50) - FusionGDB2 (0) -The final formula for calculating score is: +The score is calculated using two components: -$$ -score = 0.5 * \sum_{tool}^{tools} f(fusion, tool)*w(tool) + 0.5 * \sum_{db}^{dbs} g(fusion, db)*w(db) -$$ +1. Tool Detection (80% of total score) + - Calculated as: (number of tools detecting the fusion) / (number of tools actually used) + - This reflects how many of the active tools found the fusion -All tools have the same weight. +2. Database Hits (20% of total score) + - Based on database matches using weights above + - Calculated as: (number of database hits) / (total possible database hits) + +Final score = (0.8 × Tool Detection Score) + (0.2 × Database Hits Score) ### Salmon From 214b70b52ee1c9e538806ec8a831513ad9b26e9f Mon Sep 17 00:00:00 2001 From: MacBook Air Date: Tue, 25 Feb 2025 11:43:33 -0800 Subject: [PATCH 334/887] Apply pre-commit fixes and update changelog --- CHANGELOG.md | 1 + docs/output.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cdc774e1d..c3220386a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) - Add nf-test to local module: `FUSIONINSPECTOR`. [#601](https://github.com/nf-core/rnafusion/pull/601) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) +- Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) ### Changed diff --git a/docs/output.md b/docs/output.md index 1664babfb..3698f7a69 100644 --- a/docs/output.md +++ b/docs/output.md @@ -267,6 +267,7 @@ The weights for databases are as follows: The score is calculated using two components: 1. Tool Detection (80% of total score) + - Calculated as: (number of tools detecting the fusion) / (number of tools actually used) - This reflects how many of the active tools found the fusion From e84787b83667784cdaf58e3b842b5fb625b45cf0 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 11 Mar 2025 19:06:39 +0000 Subject: [PATCH 335/887] feat: add nf-test to `arriba_visualisation` --- modules/local/arriba/visualisation/main.nf | 3 +- .../arriba/visualisation/tests/main.nf.test | 83 +++++++++++++++++++ .../visualisation/tests/main.nf.test.snap | 49 +++++++++++ 3 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 modules/local/arriba/visualisation/tests/main.nf.test create mode 100644 modules/local/arriba/visualisation/tests/main.nf.test.snap diff --git a/modules/local/arriba/visualisation/main.nf b/modules/local/arriba/visualisation/main.nf index f1aa097b6..293247328 100644 --- a/modules/local/arriba/visualisation/main.nf +++ b/modules/local/arriba/visualisation/main.nf @@ -23,14 +23,15 @@ process ARRIBA_VISUALISATION { script: def args = task.ext.args ?: '' def arg_cytobands = cytobands ? " --cytobands=$cytobands" : "" + def arg_alignment = bam ? " --alignments=$bam" : "" def arg_protein_domains = protein_domains ? "--proteinDomains=$protein_domains" : "" def prefix = task.ext.prefix ?: "${meta.id}" """ draw_fusions.R \\ --fusions=$fusions \\ - --alignments=$bam \\ --output=${prefix}.pdf \\ --annotation=${gtf} \\ + $arg_alignment \\ $arg_cytobands \\ $arg_protein_domains \\ $args diff --git a/modules/local/arriba/visualisation/tests/main.nf.test b/modules/local/arriba/visualisation/tests/main.nf.test new file mode 100644 index 000000000..1a18b0db3 --- /dev/null +++ b/modules/local/arriba/visualisation/tests/main.nf.test @@ -0,0 +1,83 @@ +nextflow_process { + + name "Test Process ARRIBA_VISUALISATION" + script "../main.nf" + process "ARRIBA_VISUALISATION" + tag "modules" + tag "modules_nfcore" + tag "arriba" + tag "arriba/visualisation" + + test("ARRIBA_VISUALISATION") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [], + [], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/test_fastqs.arriba.fusions.tsv", checkIfExists: true) + ] + input[1] = [ + [ id:'test_gtf' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true) + ] + input[2] = [ + [ id:'test_protein_domains' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", checkIfExists: true) + ] + input[3] = [ + [ id:'test_cytobands' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert file(process.out.pdf[0][1]).name }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("ARRIBA_VISUALISATION stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file("https://github.com/nf-core/test-datasets/raw/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam.bai", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/test_fastqs.arriba.fusions.tsv", checkIfExists: true) + ] + input[1] = [ + [ id:'test_gtf' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/ensembl/Homo_sapiens.GRCh38.102.chr4.gtf", checkIfExists: true) + ] + input[2] = [ + [ id:'test_protein_domains' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", checkIfExists: true) + ] + input[3] = [ + [ id:'test_cytobands' ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/local/arriba/visualisation/tests/main.nf.test.snap b/modules/local/arriba/visualisation/tests/main.nf.test.snap new file mode 100644 index 000000000..7ed24df79 --- /dev/null +++ b/modules/local/arriba/visualisation/tests/main.nf.test.snap @@ -0,0 +1,49 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,77b78715defd458bd9e742e58e39cd42" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-11T19:05:38.906558079" + }, + "ARRIBA_VISUALISATION stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_combined_fusions_arriba_visualisation.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,77b78715defd458bd9e742e58e39cd42" + ], + "pdf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_combined_fusions_arriba_visualisation.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,77b78715defd458bd9e742e58e39cd42" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-11T19:05:48.424051167" + } +} \ No newline at end of file From d1cc0da9f07d55ca67090c1038eeb87ec2876c73 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 11 Mar 2025 19:11:08 +0000 Subject: [PATCH 336/887] docs: update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3220386a..fff397252 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) - Add nf-test to local module: `FUSIONINSPECTOR`. [#601](https://github.com/nf-core/rnafusion/pull/601) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) -- Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) +- Add nf-test to local module: `ARRIBA_VISUALISATION`. [#625](https://github.com/nf-core/rnafusion/pull/625) ### Changed @@ -47,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update`FUSIONINSPECTOR` to v2.10.0. [#601](https://github.com/nf-core/rnafusion/pull/601) - Remove local module `STARFUSION_DOWNLOAD` [#598](https://github.com/nf-core/rnafusion/pull/598) - Fix error message when parameter outdir is missing [#611](https://github.com/nf-core/rnafusion/pull/611) +- Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) ### Fixed From 6aae0c693b37bc38b913b53f4889ebdca6619bcb Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 17 Mar 2025 15:17:08 +0100 Subject: [PATCH 337/887] update star module --- modules.json | 2 +- modules/nf-core/star/align/environment.yml | 6 +- modules/nf-core/star/align/main.nf | 13 +-- .../star/align/tests/main.nf.test.snap | 90 +++++++++---------- 4 files changed, 57 insertions(+), 54 deletions(-) diff --git a/modules.json b/modules.json index 01e049b64..b4ca9cafe 100644 --- a/modules.json +++ b/modules.json @@ -118,7 +118,7 @@ }, "star/align": { "branch": "master", - "git_sha": "a5ad53288c79fa52c5ae708c317e09ec2dd149ab", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "star/genomegenerate": { diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml index 7c57530a3..91e37ae12 100644 --- a/modules/nf-core/star/align/environment.yml +++ b/modules/nf-core/star/align/environment.yml @@ -1,9 +1,11 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.20 - - bioconda::samtools=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 - bioconda::star=2.7.11b - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 417071ba9..22a52184d 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -4,8 +4,8 @@ process STAR_ALIGN { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b4/b425bc2a95806d878993f9a66dae3ae80ac2dafff4c208c5ae01b7a90a32fa91/data' : - 'community.wave.seqera.io/library/star_samtools_htslib_gawk:10c6e8c834460019' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/26/268b4c9c6cbf8fa6606c9b7fd4fafce18bf2c931d1a809a0ce51b105ec06c89d/data' : + 'community.wave.seqera.io/library/htslib_samtools_star_gawk:ae438e9a604351a4' }" input: tuple val(meta), path(reads, stageAs: "input*/*") @@ -41,12 +41,13 @@ process STAR_ALIGN { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def reads1 = [], reads2 = [] + def reads1 = [] + def reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" - def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" - def seq_center = seq_center ? "'CN:$seq_center'" : "" - attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center 'SM:$prefix' $seq_platform" + def seq_platform_arg = seq_platform ? "'PL:$seq_platform'" : "" + def seq_center_arg = seq_center ? "'CN:$seq_center'" : "" + attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center_arg 'SM:$prefix' $seq_platform_arg" def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' """ diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap index b533fb8b4..a1ec3a3d0 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -97,7 +97,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -307,7 +307,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -321,10 +321,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:08.738074176" + "timestamp": "2024-12-11T16:28:39.242074494" }, "homo_sapiens - paired_end - arriba - stub": { "content": [ @@ -424,7 +424,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -634,7 +634,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -648,10 +648,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:36.122131869" + "timestamp": "2024-12-11T16:29:08.392620556" }, "homo_sapiens - single_end": { "content": [ @@ -703,14 +703,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:01:22.197991909" + "timestamp": "2024-12-11T16:21:34.549483887" }, "homo_sapiens - paired_end": { "content": [ @@ -762,14 +762,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:02:06.988663857" + "timestamp": "2024-12-11T16:22:17.011253146" }, "homo_sapiens - paired_end - multiple - stub": { "content": [ @@ -869,7 +869,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -1079,7 +1079,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -1093,10 +1093,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:10:12.005468781" + "timestamp": "2024-12-11T16:29:31.072104862" }, "homo_sapiens - paired_end - multiple": { "content": [ @@ -1148,14 +1148,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:08:54.877286681" + "timestamp": "2024-12-11T16:28:26.645008336" }, "homo_sapiens - paired_end - stub": { "content": [ @@ -1255,7 +1255,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -1465,7 +1465,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -1479,10 +1479,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:20.911466345" + "timestamp": "2024-12-11T16:28:53.816280805" }, "homo_sapiens - paired_end - starfusion": { "content": [ @@ -1525,14 +1525,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:07:25.0639914" + "timestamp": "2024-12-11T16:27:14.136111964" }, "homo_sapiens - paired_end - arriba": { "content": [ @@ -1574,14 +1574,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:04:00.685784211" + "timestamp": "2024-12-11T16:24:00.829462526" }, "homo_sapiens - paired_end - starfusion - stub": { "content": [ @@ -1681,7 +1681,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -1891,7 +1891,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -1905,9 +1905,9 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:53.173671551" + "timestamp": "2024-12-11T16:29:20.015372487" } } \ No newline at end of file From a3bb3d98ec82e7c5075ef17524917eabdb0f7212 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 17 Mar 2025 16:50:21 +0100 Subject: [PATCH 338/887] first implementation of the star consolidation --- conf/modules.config | 136 ++++-------------- modules.json | 5 + .../nf-core/samtools/convert/environment.yml | 8 ++ modules/nf-core/samtools/convert/main.nf | 60 ++++++++ modules/nf-core/samtools/convert/meta.yml | 103 +++++++++++++ .../samtools/convert/tests/main.nf.test | 107 ++++++++++++++ .../samtools/convert/tests/main.nf.test.snap | 131 +++++++++++++++++ .../nf-core/samtools/convert/tests/tags.yml | 2 + nextflow.config | 6 +- nextflow_schema.json | 6 +- subworkflows/local/arriba_workflow/main.nf | 53 +------ subworkflows/local/fastq_align_star/main.nf | 58 ++++++++ .../local/starfusion_workflow/main.nf | 41 +----- workflows/rnafusion.nf | 81 +++++++---- 14 files changed, 569 insertions(+), 228 deletions(-) create mode 100644 modules/nf-core/samtools/convert/environment.yml create mode 100644 modules/nf-core/samtools/convert/main.nf create mode 100644 modules/nf-core/samtools/convert/meta.yml create mode 100644 modules/nf-core/samtools/convert/tests/main.nf.test create mode 100644 modules/nf-core/samtools/convert/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/convert/tests/tags.yml create mode 100644 subworkflows/local/fastq_align_star/main.nf diff --git a/conf/modules.config b/conf/modules.config index 967e820a7..68e2e3478 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -45,25 +45,13 @@ process { ] } - withName: '.*ARRIBA_WORKFLOW:.*:CTATSPLICING_STARTOCANCERINTRONS' { + withName: 'CTATSPLICING_STARTOCANCERINTRONS' { ext.args = {[ bam ? "--vis" : "", "--sample_name ${meta.id}", ].join(" ")} publishDir = [ - path: { "${params.outdir}/ctatsplicing/arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*STARFUSION_WORKFLOW:.*:CTATSPLICING_STARTOCANCERINTRONS' { - ext.args = {[ - bam ? "--vis" : "", - "--sample_name ${meta.id}", - ].join(" ")} - publishDir = [ - path: { "${params.outdir}/ctatsplicing/starfusion" }, + path: { "${params.outdir}/ctatsplicing" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -237,115 +225,49 @@ process { ] } - withName: 'SAMTOOLS_INDEX_FOR_ARRIBA' { - ext.prefix = { "${meta.id}_star_for_arriba_sorted" } - publishDir = [ - path: { "${params.outdir}/cram_arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: 'SAMTOOLS_SORT_FOR_ARRIBA' { - ext.prefix = { "${meta.id}_star_for_arriba_sorted" } - publishDir = [ - path: { "${params.outdir}/cram_arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: 'SAMTOOLS_VIEW_FOR_ARRIBA' { - ext.args = { "--output-fmt cram" } - ext.prefix = { "${meta.id}_star_for_arriba_sorted" } - publishDir = [ - path: { "${params.outdir}/cram_arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: 'SAMTOOLS_INDEX_FOR_STARFUSION' { - publishDir = [ - path: { "${params.outdir}/star_for_starfusion" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: 'SAMTOOLS_INDEX_FOR_STARFUSION_CRAM' { - ext.prefix = { "${meta.id}.star_for_starfusion.Aligned.sortedByCoord.out" } + withName: 'SAMTOOLS_CONVERT' { + ext.prefix = { "${meta.id}.Aligned.sortedByCoord.out" } publishDir = [ - path: { "${params.outdir}/cram_starfusion" }, + path: { "${params.outdir}/cram" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'SAMTOOLS_VIEW_FOR_STARFUSION' { - ext.args = { "--output-fmt cram" } - ext.prefix = { "${meta.id}.star_for_starfusion.Aligned.sortedByCoord.out" } + withName: 'SAMTOOLS_INDEX' { publishDir = [ - path: { "${params.outdir}/cram_starfusion" }, + path: { "${params.outdir}/star" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'STAR_FOR_ARRIBA' { - publishDir = [ - path: { "${params.outdir}/star_for_arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - ext.args = '--readFilesCommand zcat \ - --outSAMtype BAM SortedByCoordinate \ - --outSAMunmapped Within \ - --outBAMcompression 0 \ - --outFilterMultimapNmax 50 \ - --peOverlapNbasesMin 10 \ - --alignSplicedMateMapLminOverLmate 0.5 \ - --alignSJstitchMismatchNmax 5 -1 5 5 \ - --chimSegmentMin 10 \ - --chimOutType WithinBAM HardClip Junctions \ - --chimJunctionOverhangMin 10 \ - --chimScoreDropMax 30 \ - --chimScoreJunctionNonGTAG 0 \ - --chimScoreSeparation 1 \ - --chimSegmentReadGapMax 3 \ - --chimMultimapNmax 50' - } - - withName: 'STAR_FOR_STARFUSION' { + withName: 'STAR_ALIGN' { publishDir = [ - path: { "${params.outdir}/star_for_starfusion" }, + path: { "${params.outdir}/star" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] - ext.args = '--twopassMode Basic \ - --outReadsUnmapped None \ - --readFilesCommand zcat \ - --outSAMtype BAM SortedByCoordinate \ - --outSAMstrandField intronMotif \ - --outSAMunmapped Within \ - --chimSegmentMin 12 \ - --chimJunctionOverhangMin 8 \ - --chimOutJunctionFormat 1 \ - --alignSJDBoverhangMin 10 \ - --alignMatesGapMax 100000 \ - --alignIntronMax 100000 \ - --alignSJstitchMismatchNmax 5 -1 5 5 \ - --chimMultimapScoreRange 3 \ - --chimScoreJunctionNonGTAG -4 \ - --chimMultimapNmax 20 \ - --chimNonchimScoreDropMin 10 \ - --peOverlapNbasesMin 12 \ - --peOverlapMMp 0.1 \ - --alignInsertionFlush Right \ - --alignSplicedMateMapLminOverLmate 0 \ - --alignSplicedMateMapLmin 30 \ - --chimOutType Junctions \ - --quantMode GeneCounts' + ext.args = '--outReadsUnmapped None \ + --outSAMstrandField intronMotif \ + --chimOutJunctionFormat 1 \ + --twopassMode None \ + --outFilterMultimapNmax 50 \ + --chimMultimapNmax 50 \ + --quantMode GeneCounts \ + --outSAMunmapped Within \ + --readFilesCommand zcat \ + --alignSJstitchMismatchNmax 5 -1 5 5 \ + --outSAMtype BAM SortedByCoordinate \ + --chimSegmentMin 10 \ + --peOverlapNbasesMin 10 \ + --alignSplicedMateMapLminOverLmate 0.5 \ + --chimJunctionOverhangMin 10 \ + --chimScoreJunctionNonGTAG 0 \ + --chimScoreDropMax 30 \ + --chimScoreSeparation 1 \ + --chimSegmentReadGapMax 3 \ + --chimOutType Junctions WithinBAM' } withName: 'STAR_GENOMEGENERATE' { diff --git a/modules.json b/modules.json index b4ca9cafe..79e06b4e9 100644 --- a/modules.json +++ b/modules.json @@ -96,6 +96,11 @@ "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", "installed_by": ["modules"] }, + "samtools/convert": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": ["modules"] + }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", diff --git a/modules/nf-core/samtools/convert/environment.yml b/modules/nf-core/samtools/convert/environment.yml new file mode 100644 index 000000000..62054fc97 --- /dev/null +++ b/modules/nf-core/samtools/convert/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/convert/main.nf b/modules/nf-core/samtools/convert/main.nf new file mode 100644 index 000000000..cf9253d10 --- /dev/null +++ b/modules/nf-core/samtools/convert/main.nf @@ -0,0 +1,60 @@ +process SAMTOOLS_CONVERT { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(input), path(index) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("*.bam") , emit: bam , optional: true + tuple val(meta), path("*.cram") , emit: cram, optional: true + tuple val(meta), path("*.bai") , emit: bai , optional: true + tuple val(meta), path("*.crai") , emit: crai, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def output_extension = input.getExtension() == "bam" ? "cram" : "bam" + + """ + samtools view \\ + --threads ${task.cpus} \\ + --reference ${fasta} \\ + $args \\ + $input \\ + -o ${prefix}.${output_extension} + + samtools index -@${task.cpus} ${prefix}.${output_extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def output_extension = input.getExtension() == "bam" ? "cram" : "bam" + def index_extension = output_extension == "bam" ? "bai" : "crai" + + """ + touch ${prefix}.${output_extension} + touch ${prefix}.${index_extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/convert/meta.yml b/modules/nf-core/samtools/convert/meta.yml new file mode 100644 index 000000000..d5bfa161b --- /dev/null +++ b/modules/nf-core/samtools/convert/meta.yml @@ -0,0 +1,103 @@ +name: samtools_convert +description: convert and then index CRAM -> BAM or BAM -> CRAM file +keywords: + - view + - index + - bam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - index: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference file to create the CRAM file + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fai: + type: file + description: Reference index file to create the CRAM file + pattern: "*.{fai}" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: filtered/converted BAM file + pattern: "*{.bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: filtered/converted CRAM file + pattern: "*{cram}" + - bai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: filtered/converted BAM index + pattern: "*{.bai}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: filtered/converted CRAM index + pattern: "*{.crai}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@FriederikeHanssen" + - "@maxulysse" +maintainers: + - "@FriederikeHanssen" + - "@maxulysse" + - "@matthdsm" diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test b/modules/nf-core/samtools/convert/tests/main.nf.test new file mode 100644 index 000000000..91a0c69ea --- /dev/null +++ b/modules/nf-core/samtools/convert/tests/main.nf.test @@ -0,0 +1,107 @@ +nextflow_process { + + name "Test Process SAMTOOLS_CONVERT" + script "../main.nf" + process "SAMTOOLS_CONVERT" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/convert" + + test("sarscov2 - [bam, bai], fasta, fai") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'fai' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.cram[0][1]).name).match("bam_to_cram_alignment") }, + { assert snapshot(file(process.out.crai[0][1]).name).match("bam_to_cram_index") }, + { assert snapshot(process.out.versions).match("bam_to_cram_versions") } + ) + } + } + + test("homo_sapiens - [cram, crai], fasta, fai") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'fai' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_alignment") }, + { assert snapshot(file(process.out.bai[0][1]).name).match("cram_to_bam_alignment_index") }, + { assert snapshot(process.out.versions).match("cram_to_bam_versions") } + ) + } + } + + test("sarscov2 - [bam, bai], fasta, fai - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'fai' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + } +} diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test.snap b/modules/nf-core/samtools/convert/tests/main.nf.test.snap new file mode 100644 index 000000000..a021254e8 --- /dev/null +++ b/modules/nf-core/samtools/convert/tests/main.nf.test.snap @@ -0,0 +1,131 @@ +{ + "cram_to_bam_alignment": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-06T11:14:51.300147176" + }, + "bam_to_cram_alignment": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-06T11:14:36.625470184" + }, + "cram_to_bam_versions": { + "content": [ + [ + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:52:35.516411351" + }, + "bam_to_cram_versions": { + "content": [ + [ + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:52:24.694454205" + }, + "stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" + ], + "bai": [ + + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:52:45.799885099" + }, + "bam_to_cram_index": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-06T11:14:36.640009334" + }, + "cram_to_bam_alignment_index": { + "content": [ + "test.bam.bai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-06T11:14:51.304477426" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/convert/tests/tags.yml b/modules/nf-core/samtools/convert/tests/tags.yml new file mode 100644 index 000000000..030d5eb5e --- /dev/null +++ b/modules/nf-core/samtools/convert/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/convert: + - "modules/nf-core/samtools/convert/**" diff --git a/nextflow.config b/nextflow.config index f1e66fa42..9fbc0dbb6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -43,12 +43,12 @@ params { adapter_fasta = [] // Compression - cram = [] + cram = false // Alignment options star_ignore_sjdbgtf = false - seq_center = null - seq_platform = null + seq_center = "" + seq_platform = "" fusioncatcher_limitSjdbInsertNsj = 2000000 fusioninspector_limitSjdbInsertNsj = 1000000 diff --git a/nextflow_schema.json b/nextflow_schema.json index 0f59e2144..cfe294653 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -309,8 +309,8 @@ "description": "Option to compress BAM files to CRAM.", "properties": { "cram": { - "type": "string", - "description": "List of tools for which to compress BAM file to CRAM,default: [], options: arriba, starfusion. Leave no space between options", + "type": "boolean", + "description": "Output CRAM files instead of BAM files.", "fa_icon": "fas fa-cut" } } @@ -534,14 +534,12 @@ "seq_center": { "type": "string", "description": "Sequencing center", - "hidden": true, "fa_icon": "fas fa-toolbox", "help_text": "This will reported in the BAM header as CN" }, "seq_platform": { "type": "string", "description": "Sequencing platform", - "hidden": true, "fa_icon": "fas fa-toolbox", "help_text": "This will reported in the BAM header as PL." }, diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 84ba3604f..a9a0d9cc9 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -1,59 +1,26 @@ include { ARRIBA_ARRIBA } from '../../../modules/nf-core/arriba/arriba/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_ARRIBA } from '../../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_FOR_ARRIBA } from '../../../modules/nf-core/samtools/sort/main' -include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_ARRIBA } from '../../../modules/nf-core/samtools/view/main' -include { STAR_ALIGN as STAR_FOR_ARRIBA } from '../../../modules/nf-core/star/align/main' - -include { CTATSPLICING_WORKFLOW } from '../ctatsplicing_workflow' workflow ARRIBA_WORKFLOW { take: - reads // channel [ meta, [ fastqs ] ] + reads // channel [ meta, [ bam ] ] ch_gtf // channel [ meta, path_gtf ] ch_fasta // channel [ meta, path_fasta ] - ch_starindex_ref // channel [ meta, path_index ] ch_arriba_ref_blacklist // channel [ meta, path_blacklist ] ch_arriba_ref_cytobands // channel [ meta, path_cytobands ] ch_arriba_ref_known_fusions // channel [ meta, path_known_fusions ] ch_arriba_ref_protein_domains // channel [ meta, path_proteins ] - ch_starfusion_ref // channel [ meta, path_starfusion_ref ] arriba // boolean all // boolean fusioninspector_only // boolean - star_ignore_sjdbgtf // boolean - ctatsplicing // boolean - seq_center // string arriba_fusions // path - cram // array main: def ch_versions = Channel.empty() - def ch_cram_index = Channel.empty() def ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) if (( arriba || all ) && !fusioninspector_only) { - STAR_FOR_ARRIBA( - reads, - ch_starindex_ref, - ch_gtf, - star_ignore_sjdbgtf, - '', - seq_center - ) - ch_versions = ch_versions.mix(STAR_FOR_ARRIBA.out.versions) - - if ( ctatsplicing || all ) { - CTATSPLICING_WORKFLOW( - STAR_FOR_ARRIBA.out.spl_junc_tab, - STAR_FOR_ARRIBA.out.junction, - STAR_FOR_ARRIBA.out.bam, - ch_starfusion_ref - ) - ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) - } - if ( arriba_fusions ) { ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) @@ -63,7 +30,7 @@ workflow ARRIBA_WORKFLOW { } else { ARRIBA_ARRIBA ( - STAR_FOR_ARRIBA.out.bam, + reads, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, @@ -78,21 +45,6 @@ workflow ARRIBA_WORKFLOW { ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ it -> return it[1] } } - if ( cram.contains('arriba') ) { - - SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam, ch_fasta) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions ) - - SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) - ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) - - SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_VIEW_FOR_ARRIBA.out.cram) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions ) - - // Join cram and index files - ch_cram_index = SAMTOOLS_VIEW_FOR_ARRIBA.out.cram.join(SAMTOOLS_INDEX_FOR_ARRIBA.out.crai) - } - } else { ch_arriba_fusions = reads @@ -105,7 +57,6 @@ workflow ARRIBA_WORKFLOW { emit: fusions = ch_arriba_fusions // channel [ meta, path_fusions ] fusions_fail = ch_arriba_fusion_fail // channel [ path, fusions_failed ] - cram_index = ch_cram_index // channel [ meta, cram, crai ] versions = ch_versions // channel [ versions ] } diff --git a/subworkflows/local/fastq_align_star/main.nf b/subworkflows/local/fastq_align_star/main.nf new file mode 100644 index 000000000..2477b31bd --- /dev/null +++ b/subworkflows/local/fastq_align_star/main.nf @@ -0,0 +1,58 @@ +include { SAMTOOLS_CONVERT } from '../../../modules/nf-core/samtools/convert/main' +include { STAR_ALIGN } from '../../../modules/nf-core/star/align/main' +include { SAMTOOLS_INDEX } from '../../../modules/nf-core/samtools/index/main.nf' + +workflow FASTQ_ALIGN_STAR { + take: + reads // channel: [ meta, [ fastq1, fastq2 ]] + index // channel: [ meta, index ] + gtf // channel: [ meta, gtf ] + fasta // channel: [ meta, fasta ] + fai // channel: [ meta, fai ] + ignore_sjdbgtf // boolean + seq_platform // string + seq_center // string + cram // boolean: Create CRAM files + + main: + def ch_versions = Channel.empty() + STAR_ALIGN( + reads, + index, + gtf, + ignore_sjdbgtf, + seq_platform, + seq_center + ) + ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) + + SAMTOOLS_INDEX( + STAR_ALIGN.out.bam_sorted + ) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) + + ch_bam_bai = STAR_ALIGN.out.bam_sorted + .join(SAMTOOLS_INDEX.out.bai, failOnMismatch:true, failOnDuplicate:true) + + def ch_cram_crai = Channel.empty() + if(cram) { + SAMTOOLS_CONVERT( + STAR_ALIGN.out.bam_sorted.map { meta, bam -> [ meta, bam, []] }, + fasta, + fai + ) + ch_versions = ch_versions.mix(SAMTOOLS_CONVERT.out.versions.first()) + ch_cram_crai = SAMTOOLS_CONVERT.out.cram + .join(SAMTOOLS_CONVERT.out.crai, failOnMismatch:true, failOnDuplicate:true) + } + + emit: + versions = ch_versions // channel [ versions ] + bam_bai = ch_bam_bai + cram_crai = ch_cram_crai + junctions = STAR_ALIGN.out.junction + spl_junc_tabs = STAR_ALIGN.out.spl_junc_tab + log_final = STAR_ALIGN.out.log_final + gene_count = STAR_ALIGN.out.read_per_gene_tab +} + diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index 938832c96..7d7f511a7 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -1,16 +1,13 @@ include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION } from '../../../modules/nf-core/samtools/index/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION_CRAM } from '../../../modules/nf-core/samtools/index/main' include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_STARFUSION } from '../../../modules/nf-core/samtools/view/main' -include { STAR_ALIGN as STAR_FOR_STARFUSION } from '../../../modules/nf-core/star/align/main' include { STARFUSION } from '../../../modules/local/starfusion/detect/main' include { CTATSPLICING_WORKFLOW } from '../ctatsplicing_workflow' workflow STARFUSION_WORKFLOW { take: - reads - ch_gtf - ch_starindex_ref - ch_fasta + reads // channel: [ meta, bam, bai ] + junctions // channel: [ meta, junctions ] ch_starfusion_ref main: @@ -26,53 +23,21 @@ workflow STARFUSION_WORKFLOW { ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) .map { it -> [ it[0], it[2] ] } } else { - STAR_FOR_STARFUSION( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') - ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) - ch_align = STAR_FOR_STARFUSION.out.bam_sorted // TODO: This does not seem to be captured and used as the output is bam_sorted_aligned and not bam_sorted + reads_junction = reads.join(junctions) // TODO: This join is not needed as STARFUSION can simply read from the junction file: https://github.com/STAR-Fusion/STAR-Fusion/wiki#alternatively-kickstart-mode-running-star-yourself-and-then-running-star-fusion-using-the-existing-outputs - - SAMTOOLS_INDEX_FOR_STARFUSION(STAR_FOR_STARFUSION.out.bam_sorted) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION.out.versions) - bam_sorted_indexed = STAR_FOR_STARFUSION.out.bam_sorted.join(SAMTOOLS_INDEX_FOR_STARFUSION.out.bai) - reads_junction = reads.join(STAR_FOR_STARFUSION.out.junction ) // TODO: This join is not needed as STARFUSION can simply read from the junction file: https://github.com/STAR-Fusion/STAR-Fusion/wiki#alternatively-kickstart-mode-running-star-yourself-and-then-running-star-fusion-using-the-existing-outputs - - if (params.ctatsplicing || params.all) { - CTATSPLICING_WORKFLOW( - STAR_FOR_STARFUSION.out.spl_junc_tab, - STAR_FOR_STARFUSION.out.junction, - STAR_FOR_STARFUSION.out.bam, - ch_starfusion_ref - ) - ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) - } - - if (params.cram.contains('starfusion')){ - SAMTOOLS_VIEW_FOR_STARFUSION (bam_sorted_indexed, ch_fasta, [] ) - ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_STARFUSION.out.versions) - - SAMTOOLS_INDEX_FOR_STARFUSION_CRAM (SAMTOOLS_VIEW_FOR_STARFUSION.out.cram) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION_CRAM.out.versions) - } if (params.starfusion || params.all){ STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) ch_versions = ch_versions.mix(STARFUSION.out.versions) ch_starfusion_fusions = STARFUSION.out.fusions } - - ch_star_stats = STAR_FOR_STARFUSION.out.log_final - ch_star_gene_count = STAR_FOR_STARFUSION.out.read_per_gene_tab } } else { ch_starfusion_fusions = reads.combine(Channel.value(file(ch_dummy_file, checkIfExists:true))) .map { it -> [ it[0], it[2] ] } - ch_star_stats = Channel.empty() - ch_star_gene_count = Channel.empty() } emit: fusions = ch_starfusion_fusions - star_stats = ch_star_stats - star_gene_count = ch_star_gene_count ch_bam_sorted = ch_align ch_bam_sorted_indexed = bam_sorted_indexed versions = ch_versions diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index ddd006ba3..15c21f38e 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -16,8 +16,11 @@ include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusionin include { FUSIONREPORT_WORKFLOW } from '../subworkflows/local/fusionreport_workflow' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { STAR_ALIGN } from '../modules/nf-core/star/align/main' include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' include { paramsSummaryMap } from 'plugin/nf-schema' +include { FASTQ_ALIGN_STAR } from '../subworkflows/local/fastq_align_star' +include { CTATSPLICING_WORKFLOW } from '../subworkflows/local/ctatsplicing_workflow' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' @@ -75,6 +78,44 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) + // + // Run STAR alignment + // + + def ch_aligned_reads = Channel.empty() + def ch_star_junctions = Channel.empty() + def ch_star_split_junctions = Channel.empty() + if((params.arriba || params.all || params.ctatsplicing || params.starfusion) && !params.fusioninspector_only) { + FASTQ_ALIGN_STAR( + ch_reads, + BUILD_REFERENCES.out.ch_starindex_ref, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_fai, + params.star_ignore_sjdbgtf, + params.seq_platform, + params.seq_center, + params.cram + ) + ch_versions = ch_versions.mix(FASTQ_ALIGN_STAR.out.versions) + ch_aligned_reads = FASTQ_ALIGN_STAR.out.bam_bai + ch_star_junctions = FASTQ_ALIGN_STAR.out.junctions + ch_star_split_junctions = FASTQ_ALIGN_STAR.out.spl_junc_tabs + } + + // + // Run CTAT-SPLICING + // + + if((params.ctatsplicing || params.all)) { + CTATSPLICING_WORKFLOW( + ch_star_split_junctions, + ch_star_junctions, + ch_aligned_reads.map { meta, bam, _bai -> [ meta, bam ]}, + BUILD_REFERENCES.out.ch_starfusion_ref + ) + ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) + } // // SUBWORKFLOW: Run STAR alignment and Arriba @@ -85,49 +126,39 @@ workflow RNAFUSION { // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file ARRIBA_WORKFLOW ( - ch_reads, + ch_aligned_reads.map { meta, bam, _bai -> [ meta, bam ]}, BUILD_REFERENCES.out.ch_gtf, BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_starindex_ref, BUILD_REFERENCES.out.ch_arriba_ref_blacklist, BUILD_REFERENCES.out.ch_arriba_ref_cytobands, BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, - BUILD_REFERENCES.out.ch_starfusion_ref, params.arriba, // boolean params.all, // boolean params.fusioninspector_only, // boolean - params.star_ignore_sjdbgtf, // boolean - params.ctatsplicing, // boolean - params.seq_center ?: '', // string params.arriba_fusions, // path - params.cram // array ) ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) //Run STAR fusion STARFUSION_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_fasta, + ch_aligned_reads, + ch_star_junctions, BUILD_REFERENCES.out.ch_starfusion_ref ) ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - - - //Run fusioncatcher - FUSIONCATCHER_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_fusioncatcher_ref, // channel [ meta, path ] - params.run_fusioncatcher, - params.all, - params.fusioninspector_only, - params.fusioncatcher_fusions - ) - ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + //Run fusioncatcher + FUSIONCATCHER_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_fusioncatcher_ref, // channel [ meta, path ] + params.run_fusioncatcher, + params.all, + params.fusioninspector_only, + params.fusioncatcher_fusions + ) + ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) //Run stringtie @@ -224,8 +255,8 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.log_final.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.gene_count.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) From 9ad81f21cbc01e1cf540a5c296d784f6a8e6970d Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 17 Mar 2025 16:54:32 +0100 Subject: [PATCH 339/887] small input tuple mismatch fix --- subworkflows/local/starfusion_workflow/main.nf | 2 +- workflows/rnafusion.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index 7d7f511a7..705cb3257 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -6,7 +6,7 @@ include { CTATSPLICING_WORKFLOW } from '../cta workflow STARFUSION_WORKFLOW { take: - reads // channel: [ meta, bam, bai ] + reads // channel: [ meta, bam ] junctions // channel: [ meta, junctions ] ch_starfusion_ref diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 15c21f38e..2cce2a64d 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -143,7 +143,7 @@ workflow RNAFUSION { //Run STAR fusion STARFUSION_WORKFLOW ( - ch_aligned_reads, + ch_aligned_reads.map { meta, bam, _bai -> [ meta, bam ]}, ch_star_junctions, BUILD_REFERENCES.out.ch_starfusion_ref ) From 1ce77b98a5725864f36ccbdcca3f19eb7e01ecd3 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 17 Mar 2025 17:15:19 +0100 Subject: [PATCH 340/887] fix samtools convert stub + use aligned bam --- conf/modules.config | 2 +- modules.json | 2 +- modules/nf-core/samtools/convert/main.nf | 2 +- .../nf-core/samtools/convert/tests/main.nf.test.snap | 10 +++++----- subworkflows/local/fastq_align_star/main.nf | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 68e2e3478..30247beae 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -228,7 +228,7 @@ process { withName: 'SAMTOOLS_CONVERT' { ext.prefix = { "${meta.id}.Aligned.sortedByCoord.out" } publishDir = [ - path: { "${params.outdir}/cram" }, + path: { "${params.outdir}/star" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/modules.json b/modules.json index 79e06b4e9..2b54916e4 100644 --- a/modules.json +++ b/modules.json @@ -98,7 +98,7 @@ }, "samtools/convert": { "branch": "master", - "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "git_sha": "b823b7220bac94079f9ea65113401956ca7d633e", "installed_by": ["modules"] }, "samtools/faidx": { diff --git a/modules/nf-core/samtools/convert/main.nf b/modules/nf-core/samtools/convert/main.nf index cf9253d10..9667e72d8 100644 --- a/modules/nf-core/samtools/convert/main.nf +++ b/modules/nf-core/samtools/convert/main.nf @@ -50,7 +50,7 @@ process SAMTOOLS_CONVERT { """ touch ${prefix}.${output_extension} - touch ${prefix}.${index_extension} + touch ${prefix}.${output_extension}.${index_extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test.snap b/modules/nf-core/samtools/convert/tests/main.nf.test.snap index a021254e8..a7bff30d5 100644 --- a/modules/nf-core/samtools/convert/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/convert/tests/main.nf.test.snap @@ -67,7 +67,7 @@ "id": "test", "single_end": false }, - "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ @@ -85,7 +85,7 @@ "id": "test", "single_end": false }, - "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "cram": [ @@ -103,10 +103,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-09-16T07:52:45.799885099" + "timestamp": "2025-03-17T17:05:45.33625491" }, "bam_to_cram_index": { "content": [ diff --git a/subworkflows/local/fastq_align_star/main.nf b/subworkflows/local/fastq_align_star/main.nf index 2477b31bd..194c0c29c 100644 --- a/subworkflows/local/fastq_align_star/main.nf +++ b/subworkflows/local/fastq_align_star/main.nf @@ -27,17 +27,17 @@ workflow FASTQ_ALIGN_STAR { ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) SAMTOOLS_INDEX( - STAR_ALIGN.out.bam_sorted + STAR_ALIGN.out.bam_sorted_aligned ) ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) - ch_bam_bai = STAR_ALIGN.out.bam_sorted + ch_bam_bai = STAR_ALIGN.out.bam_sorted_aligned .join(SAMTOOLS_INDEX.out.bai, failOnMismatch:true, failOnDuplicate:true) def ch_cram_crai = Channel.empty() if(cram) { SAMTOOLS_CONVERT( - STAR_ALIGN.out.bam_sorted.map { meta, bam -> [ meta, bam, []] }, + STAR_ALIGN.out.bam_sorted_aligned.map { meta, bam -> [ meta, bam, []] }, fasta, fai ) From ab7acbdce87f1a12acaea76bb6de239033673fdc Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 17 Mar 2025 17:38:03 +0100 Subject: [PATCH 341/887] correct bam flow in rnafusion.nf --- workflows/rnafusion.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 2cce2a64d..4168c3cbb 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -163,7 +163,7 @@ workflow RNAFUSION { //Run stringtie STRINGTIE_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, + ch_aligned_reads.map { meta, bam, _bai -> [meta, bam]}, BUILD_REFERENCES.out.ch_gtf ) ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) @@ -198,7 +198,7 @@ workflow RNAFUSION { //QC QC_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, + ch_aligned_reads, BUILD_REFERENCES.out.ch_refflat, BUILD_REFERENCES.out.ch_fasta, BUILD_REFERENCES.out.ch_fai, From c386899914392097915412a3b34f27bf4c723d4b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 17 Mar 2025 17:43:32 +0100 Subject: [PATCH 342/887] fix test --- tests/test_stub.nf.test.snap | 216 ++++++++++++----------------------- 1 file changed, 72 insertions(+), 144 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 3a4257485..c19d56a5f 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,7 +1,7 @@ { "stub test no fastp trim": { "content": [ - 31, + 29, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -67,7 +67,7 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "SAMTOOLS_INDEX_FOR_STARFUSION": { + "SAMTOOLS_INDEX": { "samtools": 1.21 }, "STARFUSION": { @@ -76,14 +76,9 @@ "STARFUSION_BUILD": { "STAR-Fusion": "1.14.0" }, - "STAR_FOR_ARRIBA": { - "star": "2.7.11b", - "samtools": 1.2, - "gawk": "5.1.0" - }, - "STAR_FOR_STARFUSION": { + "STAR_ALIGN": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { @@ -106,30 +101,17 @@ "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", "ctatsplicing", - "ctatsplicing/arriba", - "ctatsplicing/arriba/test.cancer.introns", - "ctatsplicing/arriba/test.cancer.introns.prelim", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/arriba/test.chckpts", - "ctatsplicing/arriba/test.ctat-splicing.igv.html", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/arriba/test.igv.tracks", - "ctatsplicing/arriba/test.introns", - "ctatsplicing/arriba/test.introns.for_IGV.bed", - "ctatsplicing/starfusion", - "ctatsplicing/starfusion/test.cancer.introns", - "ctatsplicing/starfusion/test.cancer.introns.prelim", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/starfusion/test.chckpts", - "ctatsplicing/starfusion/test.ctat-splicing.igv.html", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/starfusion/test.igv.tracks", - "ctatsplicing/starfusion/test.introns", - "ctatsplicing/starfusion/test.introns.for_IGV.bed", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", "fastqc", "fastqc/test.html", "fastqc/test.zip", @@ -228,43 +210,25 @@ "salmon/test", "salmon/test_lib_format_counts.json", "salmon/test_meta_info.json", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", "starfusion", "starfusion/ctat_genome_lib_build_dir", "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", @@ -355,13 +319,13 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.5" }, - "timestamp": "2025-01-07T13:16:02.754052" + "timestamp": "2025-03-17T17:40:40.562156411" }, "stub test with fastp trim": { "content": [ - 33, + 31, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -433,7 +397,7 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "SAMTOOLS_INDEX_FOR_STARFUSION": { + "SAMTOOLS_INDEX": { "samtools": 1.21 }, "STARFUSION": { @@ -442,14 +406,9 @@ "STARFUSION_BUILD": { "STAR-Fusion": "1.14.0" }, - "STAR_FOR_ARRIBA": { - "star": "2.7.11b", - "samtools": 1.2, - "gawk": "5.1.0" - }, - "STAR_FOR_STARFUSION": { + "STAR_ALIGN": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { @@ -472,30 +431,17 @@ "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", "ctatsplicing", - "ctatsplicing/arriba", - "ctatsplicing/arriba/test.cancer.introns", - "ctatsplicing/arriba/test.cancer.introns.prelim", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/arriba/test.chckpts", - "ctatsplicing/arriba/test.ctat-splicing.igv.html", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/arriba/test.igv.tracks", - "ctatsplicing/arriba/test.introns", - "ctatsplicing/arriba/test.introns.for_IGV.bed", - "ctatsplicing/starfusion", - "ctatsplicing/starfusion/test.cancer.introns", - "ctatsplicing/starfusion/test.cancer.introns.prelim", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/starfusion/test.chckpts", - "ctatsplicing/starfusion/test.ctat-splicing.igv.html", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/starfusion/test.igv.tracks", - "ctatsplicing/starfusion/test.introns", - "ctatsplicing/starfusion/test.introns.for_IGV.bed", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", "fastp", "fastp/test.fastp.html", "fastp/test.fastp.json", @@ -603,43 +549,25 @@ "salmon/test", "salmon/test_lib_format_counts.json", "salmon/test_meta_info.json", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", "starfusion", "starfusion/ctat_genome_lib_build_dir", "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", @@ -730,8 +658,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.5" }, - "timestamp": "2025-01-07T13:13:38.690939" + "timestamp": "2025-03-17T17:38:45.56378377" } } \ No newline at end of file From 92017377adeb7cb95509e36fc177ca96bf11cfd8 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 18 Mar 2025 10:04:30 +0100 Subject: [PATCH 343/887] update changelog --- CHANGELOG.md | 4 +++- workflows/rnafusion.nf | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fff397252..2d24f8d7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,7 +47,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update`FUSIONINSPECTOR` to v2.10.0. [#601](https://github.com/nf-core/rnafusion/pull/601) - Remove local module `STARFUSION_DOWNLOAD` [#598](https://github.com/nf-core/rnafusion/pull/598) - Fix error message when parameter outdir is missing [#611](https://github.com/nf-core/rnafusion/pull/611) -- Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) +- Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between thttps://github.com/nf-core/rnafusion/pull/633ool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) +- The STAR alignment now only runs once instead of multiple times when using `--arriba` and `--starfusion` [#633](https://github.com/nf-core/rnafusion/pull/633) +- The `--cram` parameter has been converted to a boolean value instead of the comma-separated list of values. Use this parameter if you also want to create CRAM files from the BAM files created with STAR [#633](https://github.com/nf-core/rnafusion/pull/633) ### Fixed diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 4168c3cbb..9e2c1ff8f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -85,7 +85,7 @@ workflow RNAFUSION { def ch_aligned_reads = Channel.empty() def ch_star_junctions = Channel.empty() def ch_star_split_junctions = Channel.empty() - if((params.arriba || params.all || params.ctatsplicing || params.starfusion) && !params.fusioninspector_only) { + if((params.arriba || params.ctatsplicing || params.starfusion || params.all) && !params.fusioninspector_only) { FASTQ_ALIGN_STAR( ch_reads, BUILD_REFERENCES.out.ch_starindex_ref, @@ -121,7 +121,6 @@ workflow RNAFUSION { // SUBWORKFLOW: Run STAR alignment and Arriba // - // TODO: add params.seq_platform and pass it as argument to arriba_workflow // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file From 0b1d31f1029efd2f384e482b5553dca1c57124e9 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 18 Mar 2025 17:18:26 +0100 Subject: [PATCH 344/887] fix language server errors --- modules.json | 6 +- modules/nf-core/arriba/arriba/main.nf | 16 ++-- modules/nf-core/salmon/quant/environment.yml | 2 + modules/nf-core/salmon/quant/main.nf | 3 +- modules/nf-core/star/align/environment.yml | 6 +- modules/nf-core/star/align/main.nf | 13 +-- .../star/align/tests/main.nf.test.snap | 90 +++++++++---------- .../local/fusioncatcher_workflow/main.nf | 4 +- .../utils_nfcore_rnafusion_pipeline/main.nf | 2 - 9 files changed, 73 insertions(+), 69 deletions(-) diff --git a/modules.json b/modules.json index 01e049b64..bc3fe7962 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "arriba/arriba": { "branch": "master", - "git_sha": "7741dfc830e77a8ead2fcb50b01461ee09d0cdfe", + "git_sha": "1719e20e3881b37b9e1e8498ea669a2b92e54b9a", "installed_by": ["modules"] }, "arriba/download": { @@ -93,7 +93,7 @@ }, "salmon/quant": { "branch": "master", - "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "git_sha": "85b5f8a0d9df9ce7587af50e2ee75b37c97515c6", "installed_by": ["modules"] }, "samtools/faidx": { @@ -118,7 +118,7 @@ }, "star/align": { "branch": "master", - "git_sha": "a5ad53288c79fa52c5ae708c317e09ec2dd149ab", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "star/genomegenerate": { diff --git a/modules/nf-core/arriba/arriba/main.nf b/modules/nf-core/arriba/arriba/main.nf index 75dbf93ad..b89231280 100644 --- a/modules/nf-core/arriba/arriba/main.nf +++ b/modules/nf-core/arriba/arriba/main.nf @@ -27,10 +27,10 @@ process ARRIBA_ARRIBA { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def blacklist = blacklist ? "-b $blacklist" : "-f blacklist" - def known_fusions = known_fusions ? "-k $known_fusions" : "" - def cytobands = cytobands ? "-d $cytobands" : "" - def protein_domains = protein_domains ? "-p $protein_domains" : "" + def blacklist_arg = blacklist ? "-b $blacklist" : "-f blacklist" + def known_fusions_arg = known_fusions ? "-k $known_fusions" : "" + def cytobands_arg = cytobands ? "-d $cytobands" : "" + def protein_domains_arg = protein_domains ? "-p $protein_domains" : "" """ arriba \\ @@ -39,10 +39,10 @@ process ARRIBA_ARRIBA { -g $gtf \\ -o ${prefix}.fusions.tsv \\ -O ${prefix}.fusions.discarded.tsv \\ - $blacklist \\ - $known_fusions \\ - $cytobands \\ - $protein_domains \\ + $blacklist_arg \\ + $known_fusions_arg \\ + $cytobands_arg \\ + $protein_domains_arg \\ $args cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/salmon/quant/environment.yml b/modules/nf-core/salmon/quant/environment.yml index b3f75777e..c9d531434 100644 --- a/modules/nf-core/salmon/quant/environment.yml +++ b/modules/nf-core/salmon/quant/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index f1e3b5cda..e2d273525 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -29,7 +29,8 @@ process SALMON_QUANT { prefix = task.ext.prefix ?: "${meta.id}" def reference = "--index $index" - def reads1 = [], reads2 = [] + def reads1 = [] + def reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" if (alignment_mode) { diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml index 7c57530a3..91e37ae12 100644 --- a/modules/nf-core/star/align/environment.yml +++ b/modules/nf-core/star/align/environment.yml @@ -1,9 +1,11 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.20 - - bioconda::samtools=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 - bioconda::star=2.7.11b - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 417071ba9..22a52184d 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -4,8 +4,8 @@ process STAR_ALIGN { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b4/b425bc2a95806d878993f9a66dae3ae80ac2dafff4c208c5ae01b7a90a32fa91/data' : - 'community.wave.seqera.io/library/star_samtools_htslib_gawk:10c6e8c834460019' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/26/268b4c9c6cbf8fa6606c9b7fd4fafce18bf2c931d1a809a0ce51b105ec06c89d/data' : + 'community.wave.seqera.io/library/htslib_samtools_star_gawk:ae438e9a604351a4' }" input: tuple val(meta), path(reads, stageAs: "input*/*") @@ -41,12 +41,13 @@ process STAR_ALIGN { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def reads1 = [], reads2 = [] + def reads1 = [] + def reads2 = [] meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" - def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" - def seq_center = seq_center ? "'CN:$seq_center'" : "" - attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center 'SM:$prefix' $seq_platform" + def seq_platform_arg = seq_platform ? "'PL:$seq_platform'" : "" + def seq_center_arg = seq_center ? "'CN:$seq_center'" : "" + attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center_arg 'SM:$prefix' $seq_platform_arg" def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' """ diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap index b533fb8b4..a1ec3a3d0 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -97,7 +97,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -307,7 +307,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -321,10 +321,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:08.738074176" + "timestamp": "2024-12-11T16:28:39.242074494" }, "homo_sapiens - paired_end - arriba - stub": { "content": [ @@ -424,7 +424,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -634,7 +634,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -648,10 +648,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:36.122131869" + "timestamp": "2024-12-11T16:29:08.392620556" }, "homo_sapiens - single_end": { "content": [ @@ -703,14 +703,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:01:22.197991909" + "timestamp": "2024-12-11T16:21:34.549483887" }, "homo_sapiens - paired_end": { "content": [ @@ -762,14 +762,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:02:06.988663857" + "timestamp": "2024-12-11T16:22:17.011253146" }, "homo_sapiens - paired_end - multiple - stub": { "content": [ @@ -869,7 +869,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -1079,7 +1079,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -1093,10 +1093,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:10:12.005468781" + "timestamp": "2024-12-11T16:29:31.072104862" }, "homo_sapiens - paired_end - multiple": { "content": [ @@ -1148,14 +1148,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:08:54.877286681" + "timestamp": "2024-12-11T16:28:26.645008336" }, "homo_sapiens - paired_end - stub": { "content": [ @@ -1255,7 +1255,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -1465,7 +1465,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -1479,10 +1479,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:20.911466345" + "timestamp": "2024-12-11T16:28:53.816280805" }, "homo_sapiens - paired_end - starfusion": { "content": [ @@ -1525,14 +1525,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:07:25.0639914" + "timestamp": "2024-12-11T16:27:14.136111964" }, "homo_sapiens - paired_end - arriba": { "content": [ @@ -1574,14 +1574,14 @@ ], [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:04:00.685784211" + "timestamp": "2024-12-11T16:24:00.829462526" }, "homo_sapiens - paired_end - starfusion - stub": { "content": [ @@ -1681,7 +1681,7 @@ ] ], "3": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "4": [ [ @@ -1891,7 +1891,7 @@ ] ], "versions": [ - "versions.yml:md5,a149bba1dbb5194560abdd813c7848e3" + "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" ], "wig": [ [ @@ -1905,9 +1905,9 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-20T17:09:53.173671551" + "timestamp": "2024-12-11T16:29:20.015372487" } } \ No newline at end of file diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf index fd9ce34b9..b03908e35 100644 --- a/subworkflows/local/fusioncatcher_workflow/main.nf +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -22,7 +22,7 @@ workflow FUSIONCATCHER_WORKFLOW { if (fusioncatcher_fusions){ ch_fusioncatcher_fusions = reads.combine(Channel.value(file(fusioncatcher_fusions, checkIfExists:true))) - .map { meta, reads, fusions -> [ meta, fusions ] } + .map { meta, _reads, fusions -> [ meta, fusions ] } } else { FUSIONCATCHER_DETECT ( @@ -35,7 +35,7 @@ workflow FUSIONCATCHER_WORKFLOW { } else { ch_fusioncatcher_fusions = reads.combine(Channel.value(file(ch_dummy_file, checkIfExists:true))) - .map { meta, reads, fusions -> [ meta, fusions ] } + .map { meta, _reads, fusions -> [ meta, fusions ] } } emit: diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 7e0362286..378b89f1b 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -2,8 +2,6 @@ // Subworkflow with functionality specific to the nf-core/rnafusion pipeline // -import groovy.json.JsonSlurper - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS From 8e998c561043c2b75c9e3aba40a581bedd5748a8 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 18 Mar 2025 17:19:41 +0100 Subject: [PATCH 345/887] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fff397252..aab21894d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed bug in `GFFREAD` that caused output `gffread_fasta` not being produced [#565](https://github.com/nf-core/rnafusion/issues/565) - Fixed bug in `FUSIONCATCHER_DOWNLOAD` that caused an error when running with singularity profile [#573](https://github.com/nf-core/rnafusion/issues/573) - Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) +- Fixed the codebase to be compatible with the Nextflow language server [#634](https://github.com/nf-core/rnafusion/pull/634) ### Removed From ed6c8bff68ff237cee6619d96e3f984c2a1ff80d Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 18 Mar 2025 17:36:30 +0100 Subject: [PATCH 346/887] mention version bump --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aab21894d..a10feb0b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove local module `STARFUSION_DOWNLOAD` [#598](https://github.com/nf-core/rnafusion/pull/598) - Fix error message when parameter outdir is missing [#611](https://github.com/nf-core/rnafusion/pull/611) - Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) +- Update htslib and samtools version in `star/align` to 1.21 [#634](https://github.com/nf-core/rnafusion/pull/634) ### Fixed From 94049a66fcc8b2594550d7a51ef0d647e4650df1 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 18 Mar 2025 16:53:43 +0000 Subject: [PATCH 347/887] add tests for prepgenomelib (TODO snapshot tomorrow) --- .../local/ctatsplicing/prepgenomelib/main.nf | 2 +- .../prepgenomelib/tests/main.nf.test | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test diff --git a/modules/local/ctatsplicing/prepgenomelib/main.nf b/modules/local/ctatsplicing/prepgenomelib/main.nf index 0fbf5e9e4..04f09e1aa 100644 --- a/modules/local/ctatsplicing/prepgenomelib/main.nf +++ b/modules/local/ctatsplicing/prepgenomelib/main.nf @@ -31,7 +31,7 @@ process CTATSPLICING_PREPGENOMELIB { def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch $genome_lib/refGene.bed - touch $genome_lib/refGene.sort.bed.gz + echo | gzip > $genome_lib/refGene.sort.bed.gz touch $genome_lib/refGene.sort.bed.gz.tbi mkdir $genome_lib/cancer_splicing_lib touch $genome_lib/cancer_splicing_lib/cancer_splicing.idx diff --git a/modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test b/modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test new file mode 100644 index 000000000..de69cd3e2 --- /dev/null +++ b/modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test @@ -0,0 +1,77 @@ +nextflow_process { + + name "Test Process CTATSPLICING_PREPGENOMELIB" + script "../main.nf" + process "CTATSPLICING_PREPGENOMELIB" + + setup { + run("STARFUSION_BUILD") { + script "../../../starfusion/build/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome fasta' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") + ] + input[1] = [ + [ id:'minigenome gtf' ], + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") + ] + + input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input [3] = "human" + """ + } + } + } + + test("test") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = STARFUSION_BUILD.out.reference + input[1] = [ + file("https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.findAll { key, value -> !key.isNumber() }).match() } + ) + } + } + + test("test - stub") { + + options "-stub" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = STARFUSION_BUILD.out.reference + input[1] = [ + file("https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.findAll { key, value -> !key.isNumber() }).match() } + ) + } + } +} From 76926ffead9cd9e166b57c02703080f083b84985 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 19 Mar 2025 10:07:01 +0100 Subject: [PATCH 348/887] bump snap --- tests/test_stub.nf.test.snap | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 3a4257485..e78ec8de1 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -78,12 +78,12 @@ }, "STAR_FOR_ARRIBA": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { @@ -355,9 +355,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.5" }, - "timestamp": "2025-01-07T13:16:02.754052" + "timestamp": "2025-03-19T09:52:40.993862676" }, "stub test with fastp trim": { "content": [ @@ -444,12 +444,12 @@ }, "STAR_FOR_ARRIBA": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STAR_FOR_STARFUSION": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STAR_GENOMEGENERATE": { @@ -730,8 +730,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.5" }, - "timestamp": "2025-01-07T13:13:38.690939" + "timestamp": "2025-03-19T09:51:49.095272949" } } \ No newline at end of file From 013773cdbd340fe8e45e2e3570c25aea0ae0f161 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Wed, 19 Mar 2025 10:54:46 +0000 Subject: [PATCH 349/887] add prepgenome lib snap --- conf/modules.config | 1 - .../prepgenomelib/tests/main.nf.test.snap | 212 ++++++++++++++++++ 2 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index c13cb3d2f..0fc0be935 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -370,7 +370,6 @@ process { mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] - ext.args = "--max_readlength ${params.read_length} --human_gencode_filter" } withName: 'CTATSPLICING_PREPGENOMELIB' { diff --git a/modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test.snap b/modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test.snap new file mode 100644 index 000000000..b0fa56d6d --- /dev/null +++ b/modules/local/ctatsplicing/prepgenomelib/tests/main.nf.test.snap @@ -0,0 +1,212 @@ +{ + "test": { + "content": [ + { + "reference": [ + [ + { + "id": "minigenome fasta" + }, + [ + "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "PFAM.domtblout.dat.gz:md5,26c8d24b6cd736eef6b5d2ddaf337672", + [ + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "blast_pairs.dat.gz:md5,3e7fe3a6fa372742b8574940abdc9a37", + "blast_pairs.idx:md5,b8a9567c9f2b8f099a95956e7dadfdd5", + [ + "cancer_splicing.idx:md5,712867939a7c235bdc47dd3fdb03e014" + ], + "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", + "fusion_annot_lib.idx:md5,d77513b8a65344e32f976cb9df54e0c4", + "pfam_domains.dbm:md5,03f514fe96a42d54eef7429eb7bd2216", + "refGene.bed:md5,d854402131f44d84a14cd90f912f886d", + "refGene.sort.bed.gz:md5,01bf4093e3e9dcad8ed3a0f45a381c95", + "refGene.sort.bed.gz.tbi:md5,6dd8cd94a5cd10699fe8445a70c5b232", + "ref_annot.cdna.fa:md5,a912c9684f1f14b266ff8f6ee6b16b6c", + "ref_annot.cdna.fa.idx:md5,8555d23ba563a84c34a55e9a7b1b14c9", + "ref_annot.cds:md5,19c35508510e3cbd13d70e586712ff71", + "ref_annot.cdsplus.fa:md5,cee60e0eed67964731618f2cb39eb509", + "ref_annot.cdsplus.fa.idx:md5,555823919c78863b03505ed793299562", + "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", + "ref_annot.gtf.gene_spans:md5,20f0a837edf800511c65436f9f5372b6", + "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", + "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", + "ref_annot.pep:md5,655d2d2955149bf632e7ba7036bbc01c", + "ref_annot.prot_info.dbm:md5,6298fed0de42c97c668e3fb8ac4d5e20", + "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", + "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", + "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", + "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", + "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", + "ref_genome.fa.nin:md5,2317a90875fe530dff8e2b95bc8bbee1", + "ref_genome.fa.njs:md5,3127dd8e9e5897924974328a359e383d", + "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", + "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", + "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", + "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", + [ + "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", + "Log.out:md5,f0d53c14008b8a936d65a458ac01345f", + "SA:md5,7dd9083264be9c6a2194d990bc10d237", + "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,e02cd536b7281b894246863b160d5d06", + "chrName.txt:md5,f4d0d6595f423084e6b9472e40dfe6e8", + "chrNameLength.txt:md5,07a67d7ac441d7d30d80840b0927e717", + "chrStart.txt:md5,e2031239a74fe5ee9051e9364e4f608a", + "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", + "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", + "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", + "genomeParameters.txt:md5,767f208cbd11c22bcb315b0254b0d9de", + "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", + "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", + "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", + "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2" + ], + "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", + "trans.blast.align_coords.align_coords.dbm:md5,02f34eb24b0888e0d6adafd4860fafb9", + "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" + ] + ] + ], + "versions": [ + "versions.yml:md5,8175cd19f5d5b8b2214cd948120d7524" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-19T10:53:52.549180977" + }, + "test - stub": { + "content": [ + { + "reference": [ + [ + { + "id": "minigenome fasta" + }, + [ + "AnnotFilterRule.pm:md5,d41d8cd98f00b204e9800998ecf8427e", + "PFAM.domtblout.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_gene_blast_pairs.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_pfam_dat.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "cp_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_pfam_hits.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "index_ref_annot_cdna.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "makeblastdb.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2.splice_bed.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "mm2_genome_idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.dfam_masked.fa.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome_fai.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "blast_pairs.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "cancer_splicing.idx:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "fusion_annot_lib.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "fusion_annot_lib.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "pfam_domains.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "refGene.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "refGene.sort.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "refGene.sort.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdna.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cds:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.cdsplus.fa.idx:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.gene_spans:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mini.sortu:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.gtf.mm2.splice.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.pep:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_annot.prot_info.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.fai:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.mm2:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ndb:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.not:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.ntf:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_genome.fa.nto:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "trans.blast.align_coords.align_coords.dat:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.align_coords.align_coords.dbm:md5,d41d8cd98f00b204e9800998ecf8427e", + "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,8175cd19f5d5b8b2214cd948120d7524" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-19T09:17:05.045966772" + } +} \ No newline at end of file From 0f2657880cb8647249358fabe11126e684b697a8 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Wed, 19 Mar 2025 13:15:20 +0000 Subject: [PATCH 350/887] fix test_build snap --- tests/test_build.nf.test.snap | 174 +++++++++++++++++++--------------- 1 file changed, 96 insertions(+), 78 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 30d80c733..8f8601629 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -107,82 +107,82 @@ "references/star/sjdbList.fromGTF.out.tab", "references/star/sjdbList.out.tab", "references/star/transcriptInfo.tab", - "starfusion", - "starfusion/ctat_genome_lib_build_dir", - "starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "starfusion/ctat_genome_lib_build_dir/__chkpts", - "starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz" + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz" ], [ "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", @@ -220,6 +220,7 @@ "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "PFAM.domtblout.dat.gz:md5,c828178dba2ddd7266060754e4b2adbb", "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -243,20 +244,35 @@ "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e", + "blast_pairs.dat.gz:md5,c9dff0590ddd39631bd06a2e3b29bae2", + "blast_pairs.idx:md5,f3def0be5240e370fe202363467c1551", "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", + "fusion_annot_lib.idx:md5,0b302029cafb22a7d24c8be6d2075645", + "pfam_domains.dbm:md5,47050a6635345fc6b79e80b1d603bc02", + "ref_annot.cdna.fa:md5,ccb172e35cc5696bbc24cdfa33129f77", + "ref_annot.cdna.fa.idx:md5,eeb7bdd0ea9d26278448a27e1a3ec8ea", + "ref_annot.cds:md5,48fb7043d6ca82fb6dfd737980e5c712", + "ref_annot.cdsplus.fa:md5,d004f2c68707a5a5309ff90e168fad17", + "ref_annot.cdsplus.fa.idx:md5,9e8eea63b03ded2d8efc43bd57963d10", "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", + "ref_annot.gtf.gene_spans:md5,04bc2543d99d7a0be4f87a733dc0798d", "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", + "ref_annot.pep:md5,8f1efe2a1b7288a886609e341ad7c441", + "ref_annot.prot_info.dbm:md5,3a7c8492fe5d0214bb7e01cf1740af8d", "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", + "ref_genome.fa.nin:md5,f7e84e3ed403933bc0cb7d528619e94d", + "ref_genome.fa.njs:md5,f51ce88d639b0c3142a309dbf0c1e41c", "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", + "Log.out:md5,23f80ce482ce4779ff88c129e4b6a6e5", "SA:md5,7dd9083264be9c6a2194d990bc10d237", "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -267,18 +283,20 @@ "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", + "genomeParameters.txt:md5,f9e87dbcaa7bc8ea9df576ba3ed3bbd0", "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", + "trans.blast.align_coords.align_coords.dbm:md5,a15f136b73f31fd474450e70e7e85e7b", "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.5" }, - "timestamp": "2025-01-14T13:08:24.564679638" + "timestamp": "2025-03-19T13:09:57.878292804" } } \ No newline at end of file From 4618f19afc8265f551f386b6d40d0cb57f6af5be Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Wed, 19 Mar 2025 14:53:47 +0000 Subject: [PATCH 351/887] ignore unstable files --- tests/.nftignore | 38 +++++++++++++++++------------------ tests/test_build.nf.test.snap | 20 +----------------- 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/tests/.nftignore b/tests/.nftignore index cb651aedf..3bba86da0 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -13,25 +13,25 @@ references/salmon/salmon/pre_indexing.log references/salmon/salmon/ref_indexing.log references/salmon/salmon/seq.bin references/star/Log.out -starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/ -starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz -starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz -starfusion/ctat_genome_lib_build_dir/blast_pairs.idx -starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx -starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm -starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa -starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx -starfusion/ctat_genome_lib_build_dir/ref_annot.cds -starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa -starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx -starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans -starfusion/ctat_genome_lib_build_dir/ref_annot.pep -starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm -starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin -starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs -starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out -starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm +references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/ +references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz +references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz +references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx +references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx +references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm +references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa +references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx +references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds +references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa +references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx +references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans +references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep +references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm +references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin +references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs +references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out +references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm references/star/genomeParameters.txt -starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt +references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt references/fusion_report_db/mitelman.db references/fusion_report_db/fusiongdb2.db diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 8f8601629..2d07ed660 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -220,7 +220,6 @@ "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", - "PFAM.domtblout.dat.gz:md5,c828178dba2ddd7266060754e4b2adbb", "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -244,35 +243,20 @@ "trans.blast.dat.cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "trans.blast.dat.index.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "validate_ctat_genome_lib.ok:md5,d41d8cd98f00b204e9800998ecf8427e", - "blast_pairs.dat.gz:md5,c9dff0590ddd39631bd06a2e3b29bae2", - "blast_pairs.idx:md5,f3def0be5240e370fe202363467c1551", "fusion_annot_lib.gz:md5,23d82a5da81f91ca4e1ecd6481992a12", - "fusion_annot_lib.idx:md5,0b302029cafb22a7d24c8be6d2075645", - "pfam_domains.dbm:md5,47050a6635345fc6b79e80b1d603bc02", - "ref_annot.cdna.fa:md5,ccb172e35cc5696bbc24cdfa33129f77", - "ref_annot.cdna.fa.idx:md5,eeb7bdd0ea9d26278448a27e1a3ec8ea", - "ref_annot.cds:md5,48fb7043d6ca82fb6dfd737980e5c712", - "ref_annot.cdsplus.fa:md5,d004f2c68707a5a5309ff90e168fad17", - "ref_annot.cdsplus.fa.idx:md5,9e8eea63b03ded2d8efc43bd57963d10", "ref_annot.gtf:md5,5ce8afe99ef3940a877a04caeacf9181", - "ref_annot.gtf.gene_spans:md5,04bc2543d99d7a0be4f87a733dc0798d", "ref_annot.gtf.mini.sortu:md5,1d29ccecdbb7b40a99c84a02d6c2c1be", "ref_annot.gtf.mm2.splice.bed:md5,340585ea1843bf06bf555575ddecf28c", - "ref_annot.pep:md5,8f1efe2a1b7288a886609e341ad7c441", - "ref_annot.prot_info.dbm:md5,3a7c8492fe5d0214bb7e01cf1740af8d", "ref_genome.fa:md5,ad699c56ed38566c7d3e9579486b1706", "ref_genome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "ref_genome.fa.mm2:md5,ce50979ea284748eb9f84ae88cfd930e", "ref_genome.fa.ndb:md5,6ea574753b557610f62f6e4ab79e19f5", "ref_genome.fa.nhr:md5,50f28dae71683c4394bfaf94a1ef4392", - "ref_genome.fa.nin:md5,f7e84e3ed403933bc0cb7d528619e94d", - "ref_genome.fa.njs:md5,f51ce88d639b0c3142a309dbf0c1e41c", "ref_genome.fa.not:md5,1e53e9d08f1d23af0299cfa87478a7bb", "ref_genome.fa.nsq:md5,d2361e7871ce4cf51181c112a48f191b", "ref_genome.fa.ntf:md5,de1250813f0c7affc6d12dac9d0fb6bb", "ref_genome.fa.nto:md5,33cdeccccebe80329f1fdbee7f5874cb", "Genome:md5,9e3efdd0901cabb5a2d589664a63b372", - "Log.out:md5,23f80ce482ce4779ff88c129e4b6a6e5", "SA:md5,7dd9083264be9c6a2194d990bc10d237", "SAindex:md5,ac4711df685109e04356db9e9cb9fb7f", "build.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -283,13 +267,11 @@ "exonGeTrInfo.tab:md5,3c35618d07a8e35a0f9108699fcdda42", "exonInfo.tab:md5,bcbb3f32fa31fe504cc737f337ad341c", "geneInfo.tab:md5,db5db4b6e003904e9908fce7c05f0125", - "genomeParameters.txt:md5,f9e87dbcaa7bc8ea9df576ba3ed3bbd0", "sjdbInfo.txt:md5,e4cc1bbf8bd687cfc3d7c2c702e6def7", "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", - "trans.blast.align_coords.align_coords.dbm:md5,a15f136b73f31fd474450e70e7e85e7b", "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128" ] ], @@ -297,6 +279,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-19T13:09:57.878292804" + "timestamp": "2025-03-19T14:46:22.709176112" } } \ No newline at end of file From bd22559f8ea355148f41a5fc83ca33c677ab533f Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Thu, 20 Mar 2025 10:09:07 +0000 Subject: [PATCH 352/887] add an error message for conda/mamba runs --- subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 378b89f1b..23184d336 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -163,6 +163,11 @@ def validateInputParameters() { error("No fusion annotation library provided. `STARFUSION_BUILD` is unable to run.") } + def profiles = workflow.profile + if ((profiles.contains("conda") || profiles.contains("mamba")) && (params.ctatsplicing || params.all)) { + error("Conda or Mamba runs are not supported when using --ctatsplicing or --all") + } + } // From d96374a9a07bca61694c3dc6372a079e149a3a9e Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 20 Mar 2025 14:06:19 +0100 Subject: [PATCH 353/887] fix a small issue with the qc workflow input --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 9e2c1ff8f..de347fcfc 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -197,7 +197,7 @@ workflow RNAFUSION { //QC QC_WORKFLOW ( - ch_aligned_reads, + ch_aligned_reads.map { meta, bam, _bai -> [meta, bam] }, BUILD_REFERENCES.out.ch_refflat, BUILD_REFERENCES.out.ch_fasta, BUILD_REFERENCES.out.ch_fai, From 70d1b14c3865d2ddad1bde66d219e3f15470293b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 20 Mar 2025 14:16:11 +0100 Subject: [PATCH 354/887] update docs --- docs/output.md | 113 +++++++------------------------------------------ 1 file changed, 15 insertions(+), 98 deletions(-) diff --git a/docs/output.md b/docs/output.md index 3698f7a69..c9f8170c0 100644 --- a/docs/output.md +++ b/docs/output.md @@ -72,8 +72,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d {outdir} ├── arriba ├── arriba_visualisation -├── cram_arriba -├── cram_starfusion ├── fastp ├── fastqc ├── fusioncatcher @@ -85,8 +83,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ├── picard ├── pipeline_info ├── samtools_sort_for_arriba -├── star_for_arriba -├── star_for_starfusion +├── star ├── starfusion └── work .nextflow.log @@ -348,112 +345,32 @@ Picard CollectRnaMetrics and picard MarkDuplicates share the same output directo
    -### Samtools - -#### Samtools sort - -Samtools sort is used to sort BAM files from STAR_FOR_STARFUSION (for arriba visualisation) - -
    -Output files - -- `samtools_sort_for_` - - `(_chimeric)_sorted.bam` - sorted BAM file - -
    - -#### Samtools index - -Samtools index is used to index BAM files from STAR_FOR_ARRIBA (for arriba visualisation) and STAR_FOR_STARFUSION (for QC) - -
    -Output files - -- `samtools_for_` - - `.(Aligned.sortedByCoord).out.bam.bai` - - -
    - ### STAR -STAR is used to align to genome reference - -STAR is run for 3 tools: - -For `arriba` with the parameters: - -```bash ---readFilesCommand zcat \ ---outSAMtype BAM Unsorted \ ---outSAMunmapped Within \ ---outBAMcompression 0 \ ---outFilterMultimapNmax 50 \ ---peOverlapNbasesMin 10 \ ---alignSplicedMateMapLminOverLmate 0.5 \ ---alignSJstitchMismatchNmax 5 -1 5 5 \ ---chimSegmentMin 10 \ ---chimOutType WithinBAM HardClip \ ---chimJunctionOverhangMin 10 \ ---chimScoreDropMax 30 \ ---chimScoreJunctionNonGTAG 0 \ ---chimScoreSeparation 1 \ ---chimSegmentReadGapMax 3 \ ---chimMultimapNmax 50 -``` - -For `STAR-fusion` with the parameters: - -```bash ---twopassMode Basic \ ---outReadsUnmapped None \ ---readFilesCommand zcat \ ---outSAMstrandField intronMotif \ ---outSAMunmapped Within \ ---chimSegmentMin 12 \ ---chimJunctionOverhangMin 8 \ ---chimOutJunctionFormat 1 \ ---alignSJDBoverhangMin 10 \ ---alignMatesGapMax 100000 \ ---alignIntronMax 100000 \ ---alignSJstitchMismatchNmax 5 -1 5 5 \ ---chimMultimapScoreRange 3 \ ---chimScoreJunctionNonGTAG -4 \ ---chimMultimapNmax 20 \ ---chimNonchimScoreDropMin 10 \ ---peOverlapNbasesMin 12 \ ---peOverlapMMp 0.1 \ ---alignInsertionFlush Right \ ---alignSplicedMateMapLminOverLmate 0 \ ---alignSplicedMateMapLmin 30 \ ---chimOutType Junctions \ ---quantMode GeneCounts -``` +STAR is used to align FASTQ files to the genome reference. -> STAR_FOR_STARFUSION uses `${params.ensembl}/Homo_sapiens.GRCh38.${params.ensembl_version}.chr.gtf` whereas STAR_FOR_ARRIBA uses `${params.ensembl_ref}/Homo_sapiens.GRCh38.${params.ensembl_version}.gtf` +Additionally, CRAM files can also be created when passing the `--cram` option. The CRAM conversion is done with a combination of `samtools view` and `samtools index`.
    Output files **Common** -- `star_for_` -- `.Log.final.out` -- `.Log.progress.out` -- `.SJ.out.tab` - -**For arriba:** - -- `.Aligned.out.bam` - - **For starfusion:** - -- `.Aligned.sortedByCoord.out.bam` -- `.Chimeric.out.junction` -- `.ReadsPerGene.out.tab` +- `star` + - `.Aligned.sortedByCoord.out.bam` + - `.Aligned.sortedByCoord.out.bam.bai` + - `.Aligned.sortedByCoord.out.cram` - when `--cram` is used + - `.Aligned.sortedByCoord.out.cram.crai` - when `--cram` is used + - `.Chimeric.out.junction` + - `.Log.final.out` + - `.Log.out` + - `.Log.progress.out` + - `.ReadsPerGene.out.tab` + - `.SJ.out.tab`
    -The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, params.read_length default is 100. +The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, `params.read_length` default is 100. ### STAR-fusion From 0ec782cd8a92ffd67b6b2c56433105e148d81291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20An?= Date: Tue, 25 Mar 2025 12:28:40 +0800 Subject: [PATCH 355/887] Fixed HGNC download link Fixes https://github.com/nf-core/rnafusion/issues/638 --- modules/local/hgnc/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 1b3808f6d..8783bb179 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -18,7 +18,7 @@ process HGNC_DOWNLOAD { script: """ - wget https://ftp.ebi.ac.uk/pub/databases/genenames/hgnc/tsv/hgnc_complete_set.txt + wget https://storage.googleapis.com/public-download-files/hgnc/tsv/tsv/hgnc_complete_set.txt date +%Y-%m-%d/%H:%M > HGNC-DB-timestamp.txt cat <<-END_VERSIONS > versions.yml From 9c14acdcebdb89c1f3bdf806a615684b2bb6fbd4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:23:34 +0100 Subject: [PATCH 356/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6b2f6496..ab925dbd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix error message when parameter outdir is missing [#611](https://github.com/nf-core/rnafusion/pull/611) - Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) - Update htslib and samtools version in `star/align` to 1.21 [#634](https://github.com/nf-core/rnafusion/pull/634) +- Updated Zenodo DOI in badge [#639](https://github.com/nf-core/rnafusion/pull/639) ### Fixed From 321135e034ff48aa82cfba611f17882c6acb760f Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 25 Mar 2025 09:56:25 +0000 Subject: [PATCH 357/887] bump parameters schema --- nextflow.config | 1 - nextflow_schema.json | 95 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 18 deletions(-) diff --git a/nextflow.config b/nextflow.config index c14bba0ca..aac49eecb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -78,7 +78,6 @@ params { gtf = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}.gtf" refflat = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}.gtf.refflat" rrna_intervals = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}.interval_list" - gencode_ref = "${params.genomes_base}/gencode" no_cosmic = false arriba_ref_blacklist = "${params.genomes_base}/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz" arriba_ref_cytobands = "${params.genomes_base}/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv" diff --git a/nextflow_schema.json b/nextflow_schema.json index aaf8a64ab..8ef4a0948 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -42,9 +42,9 @@ "type": "string", "format": "file-path", "schema": "assets/schema_input.json", - "mimetype": "text/csv", - "pattern": "^\\S+\\.csv$", - "description": "Path to comma-separated file containing information about the samples in the experiment.", + "exists": true, + "pattern": "^\\S+\\.(csv|yaml|yml|json)$", + "description": "Path to samplesheet file containing information about the samples in the experiment.", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/rnafusion/usage#samplesheet-input).", "fa_icon": "fas fa-file-csv" }, @@ -94,8 +94,9 @@ "read_length": { "type": "integer", "fa_icon": "far fa-file-code", - "description": "Read length", - "default": 100 + "description": "The length of the reads provided to the pipeline. This is used for the '--sjdbOverhang' option of STAR as read_length - 1. Providing 1 to this option will disable overhang handling.", + "default": 100, + "minimum": 1 }, "all": { "type": "boolean", @@ -109,26 +110,41 @@ }, "arriba_ref_blacklist": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.tsv\\.gz$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference blacklist" }, "arriba_ref_cytobands": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.tsv$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference cytobands" }, "arriba_ref_known_fusions": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.tsv\\.gz$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference known fusions" }, "arriba_ref_protein_domains": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.gff3$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference protein domain" }, "arriba_fusions": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.tsv$", "fa_icon": "far fa-file-code", "description": "Path to arriba output" }, @@ -142,11 +158,6 @@ "fa_icon": "far fa-file-code", "description": "Run CTAT-splicing to detect abberant cancer splicing introns. Needs --arriba and/or --starfusion to run." }, - "gencode_ref": { - "type": "string", - "fa_icon": "far fa-file-code", - "description": "Path to gencode references" - }, "fusioncatcher": { "type": "boolean", "fa_icon": "far fa-file-code", @@ -154,28 +165,38 @@ }, "fusioncatcher_fusions": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.txt$", "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher output" }, "fusioncatcher_limitSjdbInsertNsj": { "type": "integer", "fa_icon": "far fa-file-code", - "description": "Use limitSjdbInsertNsj with int for fusioncatcher" + "description": "Use limitSjdbInsertNsj with int for fusioncatcher", + "default": 2000000, + "minimum": 1 }, "fusioncatcher_ref": { "type": "string", + "format": "directory-path", + "exists": true, "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, "fusioncatcher_ref_stub_check": { "type": "string", + "hidden": true, "fa_icon": "far fa-file-code", "description": "Path to file in fusioncatcher references" }, "fusioninspector_limitSjdbInsertNsj": { "type": "integer", "fa_icon": "far fa-file-code", - "description": "Use limitSjdbInsertNsj with int for fusioninspector STAR process" + "description": "Use limitSjdbInsertNsj with int for fusioninspector STAR process", + "default": 1000000, + "minimum": 1 }, "fusioninspector_only": { "type": "boolean", @@ -184,6 +205,9 @@ }, "fusioninspector_fusions": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.tsv$", "fa_icon": "far fa-file-code", "description": "Path to a fusion list file built with format GENE1--GENE2" }, @@ -194,21 +218,30 @@ }, "fusionreport_ref": { "type": "string", + "format": "directory-path", + "exists": true, "fa_icon": "far fa-file-code", "description": "Path to fusionreport references" }, "fusionreport_ref_stub_check": { "type": "string", + "hidden": true, "fa_icon": "far fa-file-code", "description": "Path to file in fusionreport references" }, "hgnc_ref": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.txt$", "fa_icon": "far fa-file-code", "description": "Path to HGNC database file" }, "hgnc_date": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.txt$", "fa_icon": "far fa-file-code", "description": "Path to HGNC timestamp file for database retrieval" }, @@ -219,11 +252,14 @@ }, "salmon_index": { "type": "string", + "format": "directory-path", + "exists": true, "fa_icon": "far fa-file-code", "description": "Path to salmon index" }, "salmon_index_stub_check": { "type": "string", + "hidden": true, "fa_icon": "far fa-file-code", "description": "Path to file in salmon index" }, @@ -234,22 +270,29 @@ }, "starfusion_fusions": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.tsv$", "fa_icon": "far fa-file-code", "description": "Path to starfusion output" }, "starfusion_ref": { "type": "string", + "format": "directory-path", + "exists": true, "fa_icon": "far fa-file-code", "description": "Path to starfusion references" }, "starfusion_ref_stub_check": { "type": "string", + "hidden": true, "fa_icon": "far fa-file-code", "description": "Path to file in starfusion references" }, "ctatsplicing_cancer_introns": { "type": "string", "format": "file-path", + "pattern": "\\S+\\.tsv\\.gz$", "exists": true, "description": "Path to the cancer introns CSV file to create the CTAT-SPLICING reference with", "default": "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz" @@ -261,11 +304,14 @@ }, "starindex_ref": { "type": "string", + "format": "directory-path", + "exists": true, "fa_icon": "far fa-file-code", "description": "Path to starindex references" }, "starindex_ref_stub_check": { "type": "string", + "hidden": true, "fa_icon": "far fa-file-code", "description": "Path to file in starindex references" }, @@ -276,11 +322,16 @@ }, "tools_cutoff": { "type": "integer", + "minimum": 1, + "default": 1, "fa_icon": "far fa-file-code", "description": "Discard fusions identified by less than INT tools" }, "whitelist": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.tsv$", "fa_icon": "far fa-file-code", "description": "Path to fusions to add to the input of fusioninspector" } @@ -299,11 +350,15 @@ }, "trim_tail": { "type": "integer", - "description": "Preform tail trimming of reads, default: null", + "description": "The amount of bases to trim at the tail of each read, none will be trimmed by default", + "minimum": 1, "fa_icon": "fas fa-cut" }, "adapter_fasta": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.f(n|ast)?a$", "description": "Path to adapter fasta file: default: []", "fa_icon": "fas fa-cut" } @@ -336,6 +391,7 @@ "fasta": { "type": "string", "format": "file-path", + "exists": true, "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", @@ -345,6 +401,7 @@ "type": "string", "format": "file-path", "mimetype": "text/plain", + "exists": true, "pattern": "^\\S+\\.fn?ai(\\.gz)?$", "description": "Path to FASTA genome index file.", "fa_icon": "far fa-file-code" @@ -357,7 +414,7 @@ "gtf": { "type": "string", "format": "file-path", - "mimetype": "text/plain", + "exists": true, "pattern": "^\\S+\\.gtf?(\\.gz)?$", "description": "Path to GTF genome file.", "fa_icon": "far fa-file-code" @@ -365,7 +422,7 @@ "refflat": { "type": "string", "format": "file-path", - "mimetype": "text/plain", + "exists": true, "pattern": "^\\S+\\.refflat?$", "description": "Path to GTF genome file.", "fa_icon": "far fa-file-code" @@ -373,7 +430,7 @@ "rrna_intervals": { "type": "string", "format": "file-path", - "mimetype": "text/plain", + "exists": true, "pattern": "^\\S+\\.interval_list?$", "description": "Path to ribosomal interval list.", "fa_icon": "far fa-file-code" @@ -385,13 +442,17 @@ }, "fusion_annot_lib": { "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\S+\\.dat\\.gz$", "description": "Path to Fusion Annotation Library to be used in STARFUSION_BUILD.", "fa_icon": "far fa-file-code" }, "species": { "type": "string", "description": "Which species dfam should automatically download, default: human.", - "fa_icon": "far fa-file-code" + "fa_icon": "far fa-file-code", + "default": "human" } } }, From 23c5da43cebc3b857eb0ef6d03e32cabfc303099 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 25 Mar 2025 09:58:43 +0000 Subject: [PATCH 358/887] bump samplesheet schema --- assets/schema_input.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index a55008106..f38d29c48 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -10,7 +10,7 @@ "sample": { "type": "string", "pattern": "^\\S+$", - "errorMessage": "Sample name must be provided and cannot contain spaces", + "errorMessage": "Sample name must be provided, has to be a string and cannot contain spaces", "meta": ["id"] }, "fastq_1": { @@ -18,19 +18,19 @@ "format": "file-path", "exists": true, "pattern": "^\\S+f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces, has to exist and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { "type": "string", "format": "file-path", "exists": true, "pattern": "^\\S+f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "errorMessage": "FastQ file for reads 2 cannot contain spaces, has to exist and must have extension '.fq.gz' or '.fastq.gz'" }, "strandedness": { "type": "string", "enum": ["forward", "reverse", "unstranded", "unknown"], - "errorMessage": "Strandedness has to be forward, reverse, unstranded or unknown" + "errorMessage": "Strandedness has to be 'forward', 'reverse', 'unstranded' or 'unknown'" } }, "required": ["sample", "fastq_1", "fastq_2", "strandedness"] From 1d92db882f9204bb62851ccc4dd83f7ba087f7cb Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 25 Mar 2025 10:25:52 +0000 Subject: [PATCH 359/887] remove some exists checks --- nextflow_schema.json | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 8ef4a0948..7f8ed19ae 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -111,7 +111,6 @@ "arriba_ref_blacklist": { "type": "string", "format": "file-path", - "exists": true, "pattern": "\\S+\\.tsv\\.gz$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference blacklist" @@ -119,7 +118,6 @@ "arriba_ref_cytobands": { "type": "string", "format": "file-path", - "exists": true, "pattern": "\\S+\\.tsv$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference cytobands" @@ -127,7 +125,6 @@ "arriba_ref_known_fusions": { "type": "string", "format": "file-path", - "exists": true, "pattern": "\\S+\\.tsv\\.gz$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference known fusions" @@ -135,7 +132,6 @@ "arriba_ref_protein_domains": { "type": "string", "format": "file-path", - "exists": true, "pattern": "\\S+\\.gff3$", "fa_icon": "far fa-file-code", "description": "Path to arriba reference protein domain" @@ -181,7 +177,6 @@ "fusioncatcher_ref": { "type": "string", "format": "directory-path", - "exists": true, "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, @@ -219,7 +214,6 @@ "fusionreport_ref": { "type": "string", "format": "directory-path", - "exists": true, "fa_icon": "far fa-file-code", "description": "Path to fusionreport references" }, @@ -232,7 +226,6 @@ "hgnc_ref": { "type": "string", "format": "file-path", - "exists": true, "pattern": "\\S+\\.txt$", "fa_icon": "far fa-file-code", "description": "Path to HGNC database file" @@ -240,7 +233,6 @@ "hgnc_date": { "type": "string", "format": "file-path", - "exists": true, "pattern": "\\S+\\.txt$", "fa_icon": "far fa-file-code", "description": "Path to HGNC timestamp file for database retrieval" @@ -253,7 +245,6 @@ "salmon_index": { "type": "string", "format": "directory-path", - "exists": true, "fa_icon": "far fa-file-code", "description": "Path to salmon index" }, @@ -279,7 +270,6 @@ "starfusion_ref": { "type": "string", "format": "directory-path", - "exists": true, "fa_icon": "far fa-file-code", "description": "Path to starfusion references" }, @@ -305,7 +295,6 @@ "starindex_ref": { "type": "string", "format": "directory-path", - "exists": true, "fa_icon": "far fa-file-code", "description": "Path to starindex references" }, @@ -391,7 +380,6 @@ "fasta": { "type": "string", "format": "file-path", - "exists": true, "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", @@ -401,7 +389,6 @@ "type": "string", "format": "file-path", "mimetype": "text/plain", - "exists": true, "pattern": "^\\S+\\.fn?ai(\\.gz)?$", "description": "Path to FASTA genome index file.", "fa_icon": "far fa-file-code" @@ -414,7 +401,6 @@ "gtf": { "type": "string", "format": "file-path", - "exists": true, "pattern": "^\\S+\\.gtf?(\\.gz)?$", "description": "Path to GTF genome file.", "fa_icon": "far fa-file-code" @@ -422,7 +408,6 @@ "refflat": { "type": "string", "format": "file-path", - "exists": true, "pattern": "^\\S+\\.refflat?$", "description": "Path to GTF genome file.", "fa_icon": "far fa-file-code" @@ -430,7 +415,6 @@ "rrna_intervals": { "type": "string", "format": "file-path", - "exists": true, "pattern": "^\\S+\\.interval_list?$", "description": "Path to ribosomal interval list.", "fa_icon": "far fa-file-code" From f8903fd628bb2bba9036e5b7d9cb82eef41baad2 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 25 Mar 2025 10:27:19 +0000 Subject: [PATCH 360/887] bump changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6b2f6496..765511db7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed bug in `FUSIONCATCHER_DOWNLOAD` that caused an error when running with singularity profile [#573](https://github.com/nf-core/rnafusion/issues/573) - Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) - Fixed the codebase to be compatible with the Nextflow language server [#634](https://github.com/nf-core/rnafusion/pull/634) +- Updated the input validation to be more strict. This will prevent more errors down the line in the pipeline [#640](https://github.com/nf-core/rnafusion/pull/640) ### Removed From 4692a4aaba1b6bdac6592aea0cb8e7354aafd377 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:12:22 +0100 Subject: [PATCH 361/887] fix spelling --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab925dbd0..5821e8550 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add nf-test to local subworkflow: `ARRIBA_WORKFLOW` [#578](https://github.com/nf-core/rnafusion/pull/578) - Add nf-test to local module: `STARFUSION_BUILD`. [#585](https://github.com/nf-core/rnafusion/pull/585) - Add nf-test to local module: `STARFUSION_DETECT`. [#586](https://github.com/nf-core/rnafusion/pull/586) -- Added a new module `CTATSPLICING_STARTOCANCERINTRONS` and a new parameter `--ctatsplicing`. This options creates reports on cancer splicing abberations and requires one or both of `--arriba` and `--starfusion` to be given. [#587](https://github.com/nf-core/rnafusion/pull/587) +- Added a new module `CTATSPLICING_STARTOCANCERINTRONS` and a new parameter `--ctatsplicing`. This options creates reports on cancer splicing aberrations and requires one or both of `--arriba` and `--starfusion` to be given. [#587](https://github.com/nf-core/rnafusion/pull/587) - Add parameter `--references_only` when no data should be analysed, but only the references should be built [#505](https://github.com/nf-core/rnafusion/pull/505) - Add nf-test to local subworkflow: `FUSIONCATCHER_WORKFLOW` [#591](https://github.com/nf-core/rnafusion/pull/591) - Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597) From 8a7b54d126a48a0024a174207166ab3bd84881a1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:15:56 +0100 Subject: [PATCH 362/887] run_fusioncatcher back to fusioncatcher --- subworkflows/local/fusioncatcher_workflow/main.nf | 6 +++--- workflows/rnafusion.nf | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf index b03908e35..35e74030c 100644 --- a/subworkflows/local/fusioncatcher_workflow/main.nf +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -3,13 +3,13 @@ include { FUSIONCATCHER_DETECT } from '../../../modules/local/fusioncatcher/dete // TODO: Remove fusioncatcher_fusions as parameter. // TODO: remove dummy file. Work with Channel.empty() // TODO: if the files were already produced and the user want to skip the module because of this, they should be taken them from the sample sheet -// TODO: harmonize `run_fusioncatcher` and `fusioncatcher_only` parameters at main workflow level to activate/skip this one. +// TODO: harmonize `fusioncatcher` and `fusioncatcher_only` parameters at main workflow level to activate/skip this one. workflow FUSIONCATCHER_WORKFLOW { take: reads // channel [ meta, [ fastqs ] ] fusioncatcher_ref // channel [ meta, path ] - run_fusioncatcher // boolean + fusioncatcher // boolean all // boolean fusioninspector_only // boolean fusioncatcher_fusions // path, string @@ -18,7 +18,7 @@ workflow FUSIONCATCHER_WORKFLOW { ch_versions = Channel.empty() ch_dummy_file = file("$baseDir/assets/dummy_file_fusioncatcher.txt", checkIfExists: true) - if (( run_fusioncatcher || all) && !fusioninspector_only ) { + if (( fusioncatcher || all) && !fusioninspector_only ) { if (fusioncatcher_fusions){ ch_fusioncatcher_fusions = reads.combine(Channel.value(file(fusioncatcher_fusions, checkIfExists:true))) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index ddd006ba3..1cfa6cba3 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -122,7 +122,7 @@ workflow RNAFUSION { FUSIONCATCHER_WORKFLOW ( ch_reads, BUILD_REFERENCES.out.ch_fusioncatcher_ref, // channel [ meta, path ] - params.run_fusioncatcher, + params.fusioncatcher, params.all, params.fusioninspector_only, params.fusioncatcher_fusions From c416e1b85e741e2506f911ad1127b2ab47ee22cc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:17:36 +0100 Subject: [PATCH 363/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6b2f6496..d2c13b9bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix error message when parameter outdir is missing [#611](https://github.com/nf-core/rnafusion/pull/611) - Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) - Update htslib and samtools version in `star/align` to 1.21 [#634](https://github.com/nf-core/rnafusion/pull/634) +- `--run_fusioncatcher` back to `fusioncatcher` [#641](https://github.com/nf-core/rnafusion/pull/641) ### Fixed From 73946e6fd23ba103d0d5b33ea805d67fb1faf117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20An?= Date: Wed, 26 Mar 2025 11:51:11 +0800 Subject: [PATCH 364/887] Fixed typo --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index fe370b363..8c2da3989 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -47,7 +47,7 @@ nextflow run nf-core/rnafusion \ --outdir ``` -### Downloading the cosmic database with SANGER or QUIAGEN +### Downloading the cosmic database with SANGER or QIAGEN #### For academic users From 17cfa8f817d1589bb7a0b5a7d8f3ceccf6dd5544 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Thu, 27 Mar 2025 10:24:02 +0000 Subject: [PATCH 365/887] fix test_stub --- tests/test_stub.nf.test.snap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index a2bb8a80d..4e1cf6bb2 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,7 +1,7 @@ { "stub test no fastp trim": { "content": [ - 32, + 30, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -330,11 +330,11 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-17T17:40:40.562156411" + "timestamp": "2025-03-27T10:23:24.571345349" }, "stub test with fastp trim": { "content": [ - 34, + 32, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -678,6 +678,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-17T17:38:45.56378377" + "timestamp": "2025-03-27T10:22:34.410397222" } } \ No newline at end of file From e33d8fd153745a8a41140cd42539a9881cad377e Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 15:48:05 +0200 Subject: [PATCH 366/887] simplify build_references --- main.nf | 58 +++++++++---------------- subworkflows/local/build_references.nf | 60 +++++++++++++------------- workflows/rnafusion.nf | 3 +- 3 files changed, 54 insertions(+), 67 deletions(-) diff --git a/main.nf b/main.nf index 96e564d3d..710845900 100644 --- a/main.nf +++ b/main.nf @@ -20,41 +20,6 @@ include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_rnaf include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_rnafusion_pipeline' include { RNAFUSION } from './workflows/rnafusion' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - GENOME PARAMETER VALUES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - - - - - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - NAMED WORKFLOWS FOR PIPELINE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// WORKFLOW: Run main analysis pipeline depending on type of input -// -workflow NFCORE_RNAFUSION { - take: - samplesheet - - main: - - // - // WORKFLOW: Run pipeline - // - - RNAFUSION(samplesheet) - - emit: - multiqc_report = RNAFUSION.out.multiqc_report -} /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -74,10 +39,29 @@ workflow { params.outdir, ) + // A list of all tools available in the pipeline. Add tools here when a new tool has been added + def all_tools = [ + "arriba", + "ctatsplicing", + "fusioncatcher", + "starindex", + "starfusion", + "stringtie", + "fusion_report", + "fusioninspector_only" + ] + + def tools = params.all ? all_tools : all_tools.findAll { tool -> + params.get(tool) + } + // // WORKFLOW: Run main workflow // - NFCORE_RNAFUSION (PIPELINE_INITIALISATION.out.samplesheet) + RNAFUSION( + PIPELINE_INITIALISATION.out.samplesheet, + tools + ) // // SUBWORKFLOW: Run completion tasks @@ -89,7 +73,7 @@ workflow { params.outdir, params.monochrome_logs, params.hook_url, - NFCORE_RNAFUSION.out.multiqc_report + RNAFUSION.out.multiqc_report ) } diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 6ad2c1906..0e2963bc5 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -34,11 +34,13 @@ include { GFFREAD } from '../../modules/nf-core/gffread/ workflow BUILD_REFERENCES { + take: + tools // list of all the tools to create references from + main: ch_versions = Channel.empty() - if (!file(params.fasta).exists() || file(params.fasta).isEmpty() || - !file(params.gtf).exists() || file(params.gtf).isEmpty()){ + if (!exists_not_empty(params.fasta) || !exists_not_empty(params.gtf)){ GENCODE_DOWNLOAD(params.genome_gencode_version, params.genome) ch_versions = ch_versions.mix(GENCODE_DOWNLOAD.out.versions) ch_fasta = GENCODE_DOWNLOAD.out.fasta.map { that -> [[id:that.Name], that] } @@ -48,7 +50,7 @@ workflow BUILD_REFERENCES { ch_gtf = Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] } } - if (!file(params.fai).exists() || file(params.fai).isEmpty()){ + if (!exists_not_empty(params.fai)){ SAMTOOLS_FAIDX(ch_fasta, [[],[]]) ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) ch_fai = SAMTOOLS_FAIDX.out.fai @@ -56,8 +58,7 @@ workflow BUILD_REFERENCES { ch_fai = Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } } - if ((!file(params.hgnc_ref).exists() || file(params.hgnc_ref).isEmpty() || - !file(params.hgnc_date).exists() || file(params.hgnc_date).isEmpty()) && !params.skip_vcf){ + if ((!exists_not_empty(params.hgnc_ref) || !exists_not_empty(params.hgnc_date)) && !params.skip_vcf){ HGNC_DOWNLOAD( ) ch_versions = ch_versions.mix(HGNC_DOWNLOAD.out.versions) ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref @@ -67,7 +68,7 @@ workflow BUILD_REFERENCES { ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } } - if (!file(params.rrna_intervals).exists() || file(params.rrna_intervals).isEmpty()){ + if (!exists_not_empty(params.rrna_intervals)){ GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) ch_versions = ch_versions.mix(GATK4_CREATESEQUENCEDICTIONARY.out.versions) GET_RRNA_TRANSCRIPTS(ch_gtf) @@ -79,7 +80,7 @@ workflow BUILD_REFERENCES { ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } } - if (!file(params.refflat).exists() || file(params.refflat).isEmpty()){ + if (!exists_not_empty(params.refflat)){ GTF_TO_REFFLAT(ch_gtf) ch_versions = ch_versions.mix(GTF_TO_REFFLAT.out.versions) ch_refflat = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } @@ -87,8 +88,7 @@ workflow BUILD_REFERENCES { ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } } - if (!file(params.salmon_index).exists() || file(params.salmon_index).isEmpty() || - !file(params.salmon_index_stub_check).exists() || file(params.salmon_index_stub_check).isEmpty()){ // add condition for qc + if (!exists_not_empty(params.salmon_index) || !exists_not_empty(params.salmon_index_stub_check)){ // add condition for qc GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(GFFREAD.out.versions) SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) @@ -98,9 +98,8 @@ workflow BUILD_REFERENCES { ch_salmon_index = Channel.fromPath({params.salmon_index}) } - if ((params.starindex || params.all || params.starfusion || params.arriba) && - (!file(params.starindex_ref).exists() || file(params.starindex_ref).isEmpty() || - !file(params.starindex_ref_stub_check).exists() || file(params.starindex_ref_stub_check).isEmpty() )) { + def star_index_tools = tools.intersect(["starindex", "starfusion", "arriba", "ctatsplicing"]) + if (star_index_tools.size() > 0 && (!exists_not_empty(params.starindex_ref) || !exists_not_empty(params.starindex_ref_stub_check))) { STAR_GENOMEGENERATE(ch_fasta, ch_gtf) ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions) ch_starindex_ref = STAR_GENOMEGENERATE.out.index @@ -108,10 +107,12 @@ workflow BUILD_REFERENCES { ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } } - if ((params.arriba || params.all) && - (!file(params.arriba_ref_blacklist).exists() || file(params.arriba_ref_blacklist).isEmpty() || - !file(params.arriba_ref_known_fusions).exists() || file(params.arriba_ref_known_fusions).isEmpty() || - !file(params.arriba_ref_protein_domains).exists() || file(params.arriba_ref_protein_domains).isEmpty())) { + if (tools.contains("arriba") && ( + !exists_not_empty(params.arriba_ref_blacklist) || + !exists_not_empty(params.arriba_ref_known_fusions) || + !exists_not_empty(params.arriba_ref_protein_domains) + ) + ) { ARRIBA_DOWNLOAD(params.genome) ch_versions = ch_versions.mix(ARRIBA_DOWNLOAD.out.versions) ch_arriba_ref_blacklist = ARRIBA_DOWNLOAD.out.blacklist @@ -126,9 +127,7 @@ workflow BUILD_REFERENCES { } - if ((params.fusioncatcher || params.all) && - (!file(params.fusioncatcher_ref).exists() || file(params.fusioncatcher_ref).isEmpty() || - !file(params.fusioncatcher_ref_stub_check).exists() || file(params.fusioncatcher_ref_stub_check).isEmpty() )) { + if (tools.contains("fusioncatcher") && (!exists_not_empty(params.fusioncatcher_ref) || !exists_not_empty(params.fusioncatcher_ref_stub_check))) { FUSIONCATCHER_BUILD(params.genome_gencode_version) ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference @@ -137,13 +136,11 @@ workflow BUILD_REFERENCES { ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref) } - - if ((params.starfusion || params.all) && - (!file(params.starfusion_ref).exists() || file(params.starfusion_ref).isEmpty() || - !file(params.starfusion_ref_stub_check).exists() || file(params.starfusion_ref_stub_check).isEmpty() )) { + def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing"]) + if (starfusion_tools.size() > 0 && (!exists_not_empty(params.starfusion_ref) || !exists_not_empty(params.starfusion_ref_stub_check))) { STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) - if (params.ctatsplicing || params.all) { + if (tools.contains("ctatsplicing")) { CTATSPLICING_PREPGENOMELIB( STARFUSION_BUILD.out.reference, params.ctatsplicing_cancer_introns @@ -159,10 +156,10 @@ workflow BUILD_REFERENCES { } - if ((params.fusionreport || params.all) && - (!file(params.fusionreport_ref).exists() || file(params.fusionreport_ref).isEmpty() || - !file(params.fusionreport_ref_stub_check).exists() || file(params.fusionreport_ref_stub_check).isEmpty())) { - if (!params.no_cosmic && (!params.cosmic_username || !params.cosmic_passwd)) { exit 1, 'COSMIC username and/or password missing' } + if (tools.contains("fusionreport") && (!exists_not_empty(params.fusionreport_ref) || !exists_not_empty(params.fusionreport_ref_stub_check))) { + if (!params.no_cosmic && (!params.cosmic_username || !params.cosmic_passwd)) { + error('COSMIC username and/or password missing, this is needed to download the fusionreport reference') + } FUSIONREPORT_DOWNLOAD() ch_versions = ch_versions.mix(FUSIONREPORT_DOWNLOAD.out.versions) ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref @@ -192,6 +189,11 @@ workflow BUILD_REFERENCES { /* ======================================================================================== - THE END + FUNCTIONS ======================================================================================== */ + +def exists_not_empty(path) { + def path_to_check = file(path) + return path_to_check.exists() && !path_to_check.isEmpty() +} diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 1cfa6cba3..48bb147f0 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -35,6 +35,7 @@ workflow RNAFUSION { take: ch_samplesheet // channel: samplesheet read in from --input + tools // list: a list of tools to run main: @@ -45,7 +46,7 @@ workflow RNAFUSION { // Create references if necessary // - BUILD_REFERENCES() + BUILD_REFERENCES(tools) ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) if (!params.references_only) { // TODO: Remove this temporary parameter when we have a full-working GitHub nf-test From a062c9bb83c4371cf4e1de154897c5f912e01776 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 16:12:05 +0200 Subject: [PATCH 367/887] arriba workflow --- main.nf | 2 +- nextflow.config | 1 + nextflow_schema.json | 5 + subworkflows/local/arriba_workflow/main.nf | 106 +++++++++------------ workflows/rnafusion.nf | 40 ++++---- 5 files changed, 72 insertions(+), 82 deletions(-) diff --git a/main.nf b/main.nf index 710845900..c2f826aff 100644 --- a/main.nf +++ b/main.nf @@ -48,7 +48,7 @@ workflow { "starfusion", "stringtie", "fusion_report", - "fusioninspector_only" + "fusioninspector" ] def tools = params.all ? all_tools : all_tools.findAll { tool -> diff --git a/nextflow.config b/nextflow.config index aac49eecb..e8067f759 100644 --- a/nextflow.config +++ b/nextflow.config @@ -62,6 +62,7 @@ params { stringtie = false fusionreport = false fusioninspector_only = false + fusioninspector = false // Skip steps skip_qc = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 7f8ed19ae..297f64055 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -198,6 +198,11 @@ "fa_icon": "far fa-file-code", "description": "Skip fusion-report. --fusioninspector_fusions PATH needed to provide a fusion list as input" }, + "fusioninspector": { + "type": "boolean", + "fa_icon": "far fa-file-code", + "description": "Run fusioninspector" + }, "fusioninspector_fusions": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 84ba3604f..0c46608f7 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -17,11 +17,8 @@ workflow ARRIBA_WORKFLOW { ch_arriba_ref_known_fusions // channel [ meta, path_known_fusions ] ch_arriba_ref_protein_domains // channel [ meta, path_proteins ] ch_starfusion_ref // channel [ meta, path_starfusion_ref ] - arriba // boolean - all // boolean - fusioninspector_only // boolean + tools // list A list of all tools to run star_ignore_sjdbgtf // boolean - ctatsplicing // boolean seq_center // string arriba_fusions // path cram // array @@ -32,74 +29,63 @@ workflow ARRIBA_WORKFLOW { def ch_cram_index = Channel.empty() def ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) - if (( arriba || all ) && !fusioninspector_only) { - - STAR_FOR_ARRIBA( - reads, - ch_starindex_ref, - ch_gtf, - star_ignore_sjdbgtf, - '', - seq_center + STAR_FOR_ARRIBA( + reads, + ch_starindex_ref, + ch_gtf, + star_ignore_sjdbgtf, + '', + seq_center + ) + ch_versions = ch_versions.mix(STAR_FOR_ARRIBA.out.versions) + + if ( tools.contains("ctatsplicing") ) { + CTATSPLICING_WORKFLOW( + STAR_FOR_ARRIBA.out.spl_junc_tab, + STAR_FOR_ARRIBA.out.junction, + STAR_FOR_ARRIBA.out.bam, + ch_starfusion_ref ) - ch_versions = ch_versions.mix(STAR_FOR_ARRIBA.out.versions) - - if ( ctatsplicing || all ) { - CTATSPLICING_WORKFLOW( - STAR_FOR_ARRIBA.out.spl_junc_tab, - STAR_FOR_ARRIBA.out.junction, - STAR_FOR_ARRIBA.out.bam, - ch_starfusion_ref - ) - ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) - } - - if ( arriba_fusions ) { - - ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) - .map { it -> [ it[0], it[2] ] } - ch_arriba_fusion_fail = ch_dummy_file - - } else { + ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) + } - ARRIBA_ARRIBA ( - STAR_FOR_ARRIBA.out.bam, - ch_fasta, - ch_gtf, - ch_arriba_ref_blacklist, - ch_arriba_ref_known_fusions, - ch_arriba_ref_cytobands, - ch_arriba_ref_protein_domains - ) + if ( arriba_fusions ) { - ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) + ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) + .map { it -> [ it[0], it[2] ] } + ch_arriba_fusion_fail = ch_dummy_file - ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions - ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ it -> return it[1] } - } + } else { - if ( cram.contains('arriba') ) { + ARRIBA_ARRIBA ( + STAR_FOR_ARRIBA.out.bam, + ch_fasta, + ch_gtf, + ch_arriba_ref_blacklist, + ch_arriba_ref_known_fusions, + ch_arriba_ref_cytobands, + ch_arriba_ref_protein_domains + ) - SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam, ch_fasta) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions ) + ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) - SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) - ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) + ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions + ch_arriba_fusion_fail = ARRIBA_ARRIBA.out.fusions_fail.map{ it -> return it[1] } + } - SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_VIEW_FOR_ARRIBA.out.cram) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions ) + if ( cram.contains('arriba') ) { - // Join cram and index files - ch_cram_index = SAMTOOLS_VIEW_FOR_ARRIBA.out.cram.join(SAMTOOLS_INDEX_FOR_ARRIBA.out.crai) - } + SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam, ch_fasta) + ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions ) - } else { + SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) + ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) - ch_arriba_fusions = reads - .combine(Channel.value( file(ch_dummy_file, checkIfExists: true ) ) ) - .map { it -> [ it[0], it[2] ] } + SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_VIEW_FOR_ARRIBA.out.cram) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions ) - ch_arriba_fusion_fail = ch_dummy_file + // Join cram and index files + ch_cram_index = SAMTOOLS_VIEW_FOR_ARRIBA.out.cram.join(SAMTOOLS_INDEX_FOR_ARRIBA.out.crai) } emit: diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 48bb147f0..e827b9851 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -85,27 +85,25 @@ workflow RNAFUSION { // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file - ARRIBA_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_arriba_ref_blacklist, - BUILD_REFERENCES.out.ch_arriba_ref_cytobands, - BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, - BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, - BUILD_REFERENCES.out.ch_starfusion_ref, - params.arriba, // boolean - params.all, // boolean - params.fusioninspector_only, // boolean - params.star_ignore_sjdbgtf, // boolean - params.ctatsplicing, // boolean - params.seq_center ?: '', // string - params.arriba_fusions, // path - params.cram // array - ) - ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) - + if(tools.intersect(["arriba", "ctatsplicing"])) { + ARRIBA_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_starindex_ref, + BUILD_REFERENCES.out.ch_arriba_ref_blacklist, + BUILD_REFERENCES.out.ch_arriba_ref_cytobands, + BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, + BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, + BUILD_REFERENCES.out.ch_starfusion_ref, + tools, + params.star_ignore_sjdbgtf, // boolean + params.seq_center ?: '', // string + params.arriba_fusions, // path + params.cram // array + ) + ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) + } //Run STAR fusion STARFUSION_WORKFLOW ( From 4b15bf0b5810240788512d41a4e51a50de3d00a7 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 16:49:11 +0200 Subject: [PATCH 368/887] fusioncatcher and starfusion --- subworkflows/local/arriba_workflow/main.nf | 2 - .../local/fusioncatcher_workflow/main.nf | 34 +++----- .../local/starfusion_workflow/main.nf | 79 +++++++++---------- subworkflows/local/stringtie_workflow.nf | 30 ++++--- workflows/rnafusion.nf | 66 +++++++++------- 5 files changed, 101 insertions(+), 110 deletions(-) diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 0c46608f7..447b57c1a 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -27,7 +27,6 @@ workflow ARRIBA_WORKFLOW { def ch_versions = Channel.empty() def ch_cram_index = Channel.empty() - def ch_dummy_file = file("$projectDir/assets/dummy_file_arriba.txt", checkIfExists: true) STAR_FOR_ARRIBA( reads, @@ -53,7 +52,6 @@ workflow ARRIBA_WORKFLOW { ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) .map { it -> [ it[0], it[2] ] } - ch_arriba_fusion_fail = ch_dummy_file } else { diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf index 35e74030c..f500bc333 100644 --- a/subworkflows/local/fusioncatcher_workflow/main.nf +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -9,33 +9,23 @@ workflow FUSIONCATCHER_WORKFLOW { take: reads // channel [ meta, [ fastqs ] ] fusioncatcher_ref // channel [ meta, path ] - fusioncatcher // boolean - all // boolean - fusioninspector_only // boolean fusioncatcher_fusions // path, string main: ch_versions = Channel.empty() - ch_dummy_file = file("$baseDir/assets/dummy_file_fusioncatcher.txt", checkIfExists: true) - - if (( fusioncatcher || all) && !fusioninspector_only ) { - if (fusioncatcher_fusions){ - - ch_fusioncatcher_fusions = reads.combine(Channel.value(file(fusioncatcher_fusions, checkIfExists:true))) - .map { meta, _reads, fusions -> [ meta, fusions ] } - } else { - - FUSIONCATCHER_DETECT ( - reads, - fusioncatcher_ref - ) - ch_fusioncatcher_fusions = FUSIONCATCHER_DETECT.out.fusions - ch_versions = ch_versions.mix(FUSIONCATCHER_DETECT.out.versions) - } - } - else { - ch_fusioncatcher_fusions = reads.combine(Channel.value(file(ch_dummy_file, checkIfExists:true))) + + if (fusioncatcher_fusions){ + + ch_fusioncatcher_fusions = reads.combine(Channel.value(file(fusioncatcher_fusions, checkIfExists:true))) .map { meta, _reads, fusions -> [ meta, fusions ] } + } else { + + FUSIONCATCHER_DETECT ( + reads, + fusioncatcher_ref + ) + ch_fusioncatcher_fusions = FUSIONCATCHER_DETECT.out.fusions + ch_versions = ch_versions.mix(FUSIONCATCHER_DETECT.out.versions) } emit: diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index 938832c96..d4bee449b 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -12,6 +12,7 @@ workflow STARFUSION_WORKFLOW { ch_starindex_ref ch_fasta ch_starfusion_ref + tools main: def ch_versions = Channel.empty() @@ -19,56 +20,48 @@ workflow STARFUSION_WORKFLOW { def ch_starfusion_fusions = Channel.empty() def bam_sorted_indexed = Channel.empty() - ch_dummy_file = file("$baseDir/assets/dummy_file_starfusion.txt", checkIfExists: true) - - if ((params.starfusion || params.all || params.stringtie) && !params.fusioninspector_only) { - if (params.starfusion_fusions){ - ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) - .map { it -> [ it[0], it[2] ] } - } else { - STAR_FOR_STARFUSION( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') - ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) - ch_align = STAR_FOR_STARFUSION.out.bam_sorted // TODO: This does not seem to be captured and used as the output is bam_sorted_aligned and not bam_sorted - + if (params.starfusion_fusions){ + ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) + .map { it -> [ it[0], it[2] ] } + } else { + STAR_FOR_STARFUSION( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') + ch_versions = ch_versions.mix(STAR_FOR_STARFUSION.out.versions) + ch_align = STAR_FOR_STARFUSION.out.bam_sorted // TODO: This does not seem to be captured and used as the output is bam_sorted_aligned and not bam_sorted - SAMTOOLS_INDEX_FOR_STARFUSION(STAR_FOR_STARFUSION.out.bam_sorted) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION.out.versions) - bam_sorted_indexed = STAR_FOR_STARFUSION.out.bam_sorted.join(SAMTOOLS_INDEX_FOR_STARFUSION.out.bai) - reads_junction = reads.join(STAR_FOR_STARFUSION.out.junction ) // TODO: This join is not needed as STARFUSION can simply read from the junction file: https://github.com/STAR-Fusion/STAR-Fusion/wiki#alternatively-kickstart-mode-running-star-yourself-and-then-running-star-fusion-using-the-existing-outputs - if (params.ctatsplicing || params.all) { - CTATSPLICING_WORKFLOW( - STAR_FOR_STARFUSION.out.spl_junc_tab, - STAR_FOR_STARFUSION.out.junction, - STAR_FOR_STARFUSION.out.bam, - ch_starfusion_ref - ) - ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) - } + SAMTOOLS_INDEX_FOR_STARFUSION(STAR_FOR_STARFUSION.out.bam_sorted) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION.out.versions) + bam_sorted_indexed = STAR_FOR_STARFUSION.out.bam_sorted.join(SAMTOOLS_INDEX_FOR_STARFUSION.out.bai) + reads_junction = reads.join(STAR_FOR_STARFUSION.out.junction ) // TODO: This join is not needed as STARFUSION can simply read from the junction file: https://github.com/STAR-Fusion/STAR-Fusion/wiki#alternatively-kickstart-mode-running-star-yourself-and-then-running-star-fusion-using-the-existing-outputs - if (params.cram.contains('starfusion')){ - SAMTOOLS_VIEW_FOR_STARFUSION (bam_sorted_indexed, ch_fasta, [] ) - ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_STARFUSION.out.versions) + if (tools.contains("ctatsplicing")) { + CTATSPLICING_WORKFLOW( + STAR_FOR_STARFUSION.out.spl_junc_tab, + STAR_FOR_STARFUSION.out.junction, + STAR_FOR_STARFUSION.out.bam, + ch_starfusion_ref + ) + ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) + } - SAMTOOLS_INDEX_FOR_STARFUSION_CRAM (SAMTOOLS_VIEW_FOR_STARFUSION.out.cram) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION_CRAM.out.versions) - } - if (params.starfusion || params.all){ - STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) - ch_versions = ch_versions.mix(STARFUSION.out.versions) - ch_starfusion_fusions = STARFUSION.out.fusions - } + if (params.cram.contains('starfusion')){ + SAMTOOLS_VIEW_FOR_STARFUSION (bam_sorted_indexed, ch_fasta, [] ) + ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_STARFUSION.out.versions) - ch_star_stats = STAR_FOR_STARFUSION.out.log_final - ch_star_gene_count = STAR_FOR_STARFUSION.out.read_per_gene_tab + SAMTOOLS_INDEX_FOR_STARFUSION_CRAM (SAMTOOLS_VIEW_FOR_STARFUSION.out.cram) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION_CRAM.out.versions) } + if (params.starfusion || params.all){ + STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) + ch_versions = ch_versions.mix(STARFUSION.out.versions) + ch_starfusion_fusions = STARFUSION.out.fusions + } + + ch_star_stats = STAR_FOR_STARFUSION.out.log_final + ch_star_gene_count = STAR_FOR_STARFUSION.out.read_per_gene_tab } - else { - ch_starfusion_fusions = reads.combine(Channel.value(file(ch_dummy_file, checkIfExists:true))) - .map { it -> [ it[0], it[2] ] } - ch_star_stats = Channel.empty() - ch_star_gene_count = Channel.empty() - } + + emit: fusions = ch_starfusion_fusions star_stats = ch_star_stats diff --git a/subworkflows/local/stringtie_workflow.nf b/subworkflows/local/stringtie_workflow.nf index d66ec0ee4..a9e05f304 100644 --- a/subworkflows/local/stringtie_workflow.nf +++ b/subworkflows/local/stringtie_workflow.nf @@ -11,22 +11,20 @@ workflow STRINGTIE_WORKFLOW { ch_versions = Channel.empty() ch_stringtie_gtf = Channel.empty() - if ((params.stringtie || params.all) && !params.fusioninspector_only) { - STRINGTIE_STRINGTIE(bam_sorted, ch_gtf.map { meta, gtf -> [ gtf ]}) - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - STRINGTIE_STRINGTIE - .out - .transcript_gtf - .map { it -> it[1] } - .set { stringtie_gtf } - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - - STRINGTIE_MERGE (stringtie_gtf, ch_gtf.map { meta, gtf -> [ gtf ]}) - ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) - ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf - } + STRINGTIE_STRINGTIE(bam_sorted, ch_gtf.map { _meta, gtf -> [ gtf ]}) + ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) + + STRINGTIE_STRINGTIE + .out + .transcript_gtf + .map { it -> it[1] } + .set { stringtie_gtf } + ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) + + + STRINGTIE_MERGE (stringtie_gtf, ch_gtf.map { _meta, gtf -> [ gtf ]}) + ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) + ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf emit: stringtie_gtf = ch_stringtie_gtf.ifEmpty(null) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index e827b9851..db20d3695 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -78,7 +78,7 @@ workflow RNAFUSION { // - // SUBWORKFLOW: Run STAR alignment and Arriba + // SUBWORKFLOW: Run STAR alignment and Arriba // // TODO: add params.seq_platform and pass it as argument to arriba_workflow @@ -105,39 +105,51 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) } - //Run STAR fusion - STARFUSION_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_starfusion_ref - ) - ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + // + // SUBWORKFLOW: Run STAR alignment and StarFusion + // + if(tools.intersect(["starfusion", "ctatsplicing", "stringtie"])) { + STARFUSION_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_gtf, + BUILD_REFERENCES.out.ch_starindex_ref, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_starfusion_ref, + tools + ) + ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + } + // + // SUBWORKFLOW: Run FusionCatcher + // - //Run fusioncatcher - FUSIONCATCHER_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_fusioncatcher_ref, // channel [ meta, path ] - params.fusioncatcher, - params.all, - params.fusioninspector_only, - params.fusioncatcher_fusions - ) - ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + if(tools.contains("fusioncatcher")) { + FUSIONCATCHER_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_fusioncatcher_ref, // channel [ meta, path ] + params.fusioncatcher_fusions + ) + ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + } + // + // SUBWORKFLOW: Run Stringtie + // - //Run stringtie - STRINGTIE_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, - BUILD_REFERENCES.out.ch_gtf - ) - ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) + if(tools.contains("stringtie")) { + STRINGTIE_WORKFLOW ( + STARFUSION_WORKFLOW.out.ch_bam_sorted, + BUILD_REFERENCES.out.ch_gtf + ) + ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) + } + // + // SUBWORKFLOW: Run FusionReport + // - //Run fusion-report FUSIONREPORT_WORKFLOW ( ch_reads, BUILD_REFERENCES.out.ch_fusionreport_ref, From 1e505f79004ae4e87d96f6882311bc73f3f77256 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 17:21:39 +0200 Subject: [PATCH 369/887] fusioninspector flow --- main.nf | 3 +- nextflow.config | 1 - nextflow_schema.json | 5 -- .../local/fusioninspector_workflow.nf | 3 +- .../local/fusionreport_workflow/main.nf | 25 +++----- workflows/rnafusion.nf | 61 +++++++++++++------ 6 files changed, 56 insertions(+), 42 deletions(-) diff --git a/main.nf b/main.nf index c2f826aff..29708e5a4 100644 --- a/main.nf +++ b/main.nf @@ -47,8 +47,7 @@ workflow { "starindex", "starfusion", "stringtie", - "fusion_report", - "fusioninspector" + "fusion_report" ] def tools = params.all ? all_tools : all_tools.findAll { tool -> diff --git a/nextflow.config b/nextflow.config index e8067f759..aac49eecb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -62,7 +62,6 @@ params { stringtie = false fusionreport = false fusioninspector_only = false - fusioninspector = false // Skip steps skip_qc = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 297f64055..7f8ed19ae 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -198,11 +198,6 @@ "fa_icon": "far fa-file-code", "description": "Skip fusion-report. --fusioninspector_fusions PATH needed to provide a fusion list as input" }, - "fusioninspector": { - "type": "boolean", - "fa_icon": "far fa-file-code", - "description": "Run fusioninspector" - }, "fusioninspector_fusions": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow.nf index f521ae8cb..a2c207ca0 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow.nf @@ -17,6 +17,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_arriba_ref_cytobands ch_hgnc_ref ch_hgnc_date + skip_vis main: ch_versions = Channel.empty() @@ -51,7 +52,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) - if ((params.starfusion || params.all || params.stringtie) && !params.fusioninspector_only && !params.skip_vis) { + if (!skip_vis) { ch_bam_sorted_indexed_fusions = bam_sorted_indexed.join(FUSIONINSPECTOR.out.tsv) ARRIBA_VISUALISATION(ch_bam_sorted_indexed_fusions, ch_gtf, ch_arriba_ref_protein_domains, ch_arriba_ref_cytobands) ch_versions = ch_versions.mix(ARRIBA_VISUALISATION.out.versions) diff --git a/subworkflows/local/fusionreport_workflow/main.nf b/subworkflows/local/fusionreport_workflow/main.nf index eac40e328..bbbc909fb 100644 --- a/subworkflows/local/fusionreport_workflow/main.nf +++ b/subworkflows/local/fusionreport_workflow/main.nf @@ -14,31 +14,24 @@ workflow FUSIONREPORT_WORKFLOW { ch_report = Channel.empty() ch_csv = Channel.empty() - if (!params.fusioninspector_only) { - reads_fusions = reads + reads_fusions = reads .join(arriba_fusions, failOnMismatch:true, failOnDuplicate:true) .join(starfusion_fusions, failOnMismatch:true, failOnDuplicate:true) .join(fusioncatcher_fusions, failOnMismatch:true, failOnDuplicate:true) - FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) - ch_fusion_list = FUSIONREPORT.out.fusion_list - ch_fusion_list_filtered = FUSIONREPORT.out.fusion_list_filtered - ch_versions = ch_versions.mix(FUSIONREPORT.out.versions) - ch_report = FUSIONREPORT.out.report - ch_csv = FUSIONREPORT.out.csv - } else { - ch_fusion_list = reads.combine(Channel.value(file(params.fusioninspector_fusions, checkIfExists:true))) - .map { it -> [ it[0], it[1] ] } - - ch_fusion_list_filtered = ch_fusion_list - } + FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) + ch_fusion_list = FUSIONREPORT.out.fusion_list + ch_fusion_list_filtered = FUSIONREPORT.out.fusion_list_filtered + ch_versions = ch_versions.mix(FUSIONREPORT.out.versions) + ch_report = FUSIONREPORT.out.report + ch_csv = FUSIONREPORT.out.csv emit: versions = ch_versions fusion_list = ch_fusion_list fusion_list_filtered = ch_fusion_list_filtered - report = ch_report.ifEmpty(null) - csv = ch_csv.ifEmpty(null) + report = ch_report + csv = ch_csv } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index db20d3695..61ec12dcd 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -22,6 +22,8 @@ include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_ include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' +include { ARRIBA_ARRIBA } from '../modules/nf-core/arriba/arriba/main.nf' +include { FUSIONREPORT } from '../modules/local/fusionreport/detect/main.nf' /* @@ -69,7 +71,7 @@ workflow RNAFUSION { Channel.value(params.adapter_fasta), params.fastp_trim ) - ch_reads = TRIM_WORKFLOW.out.ch_reads_all + def ch_reads = TRIM_WORKFLOW.out.ch_reads_all ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') @@ -85,6 +87,7 @@ workflow RNAFUSION { // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file + def ch_arriba_fusions = ch_reads.map { it -> [it[0], []] } // Set arriba fusions to empty by default if(tools.intersect(["arriba", "ctatsplicing"])) { ARRIBA_WORKFLOW ( ch_reads, @@ -103,12 +106,15 @@ workflow RNAFUSION { params.cram // array ) ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) + ch_arriba_fusions = ARRIBA_WORKFLOW.out.fusions } // // SUBWORKFLOW: Run STAR alignment and StarFusion // + def ch_starfusion_fusions = ch_reads.map { it -> [it[0], []] } // Set starfusion fusions to empty by default + def ch_starfusion_bams = Channel.empty() if(tools.intersect(["starfusion", "ctatsplicing", "stringtie"])) { STARFUSION_WORKFLOW ( ch_reads, @@ -119,12 +125,15 @@ workflow RNAFUSION { tools ) ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + ch_starfusion_fusions = STARFUSION_WORKFLOW.out.fusions + ch_starfusion_bams = STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed } // // SUBWORKFLOW: Run FusionCatcher // + def ch_fusioncatcher_fusions = ch_reads.map { it -> [it[0], []] } // Set fusioncatcher fusions to empty by default if(tools.contains("fusioncatcher")) { FUSIONCATCHER_WORKFLOW ( ch_reads, @@ -150,32 +159,50 @@ workflow RNAFUSION { // SUBWORKFLOW: Run FusionReport // - FUSIONREPORT_WORKFLOW ( - ch_reads, - BUILD_REFERENCES.out.ch_fusionreport_ref, - ARRIBA_WORKFLOW.out.fusions, - STARFUSION_WORKFLOW.out.fusions, - FUSIONCATCHER_WORKFLOW.out.fusions - ) - ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) + def ch_fusion_list = Channel.empty() + def ch_fusion_list_filtered = Channel.empty() + def ch_fusionreport_report = Channel.empty() + def ch_fusionreport_csv = Channel.empty() + if(tools.intersect(["arriba", "starfusion", "fusioncatcher"])) { + FUSIONREPORT_WORKFLOW ( + ch_reads, + BUILD_REFERENCES.out.ch_fusionreport_ref, + ch_arriba_fusions, + ch_starfusion_fusions, + ch_fusioncatcher_fusions + ) + ch_versions = ch_versions.mix(FUSIONREPORT_WORKFLOW.out.versions) + ch_fusion_list = FUSIONREPORT_WORKFLOW.out.fusion_list + ch_fusion_list_filtered = FUSIONREPORT_WORKFLOW.out.fusion_list_filtered + ch_fusionreport_report = FUSIONREPORT_WORKFLOW.out.report + ch_fusionreport_csv = FUSIONREPORT_WORKFLOW.out.csv + } else if(params.fusioninspector_fusions) { + def input_fusions = file(params.fusioninspector_fusions, checkIfExists:true) + ch_fusion_list = ch_reads.map { it -> [ it[0], input_fusions ] } + } else { + error("Could not find any valid fusions for fusioninspector input. Please provide some via --fusioninspector_fusions or generate them with --arriba, --starfusion and/or --fusioncatcher") + } + + // + // SUBWORKFLOW: Run FusionInspector + // - //Run fusionInpector FUSIONINSPECTOR_WORKFLOW ( ch_reads, - FUSIONREPORT_WORKFLOW.out.fusion_list, - FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, - FUSIONREPORT_WORKFLOW.out.report, - FUSIONREPORT_WORKFLOW.out.csv, - STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, + ch_fusion_list, + ch_fusion_list_filtered, + ch_fusionreport_report, + ch_fusionreport_csv, + ch_starfusion_bams, BUILD_REFERENCES.out.ch_gtf, BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, BUILD_REFERENCES.out.ch_arriba_ref_cytobands, BUILD_REFERENCES.out.ch_hgnc_ref, - BUILD_REFERENCES.out.ch_hgnc_date + BUILD_REFERENCES.out.ch_hgnc_date, + params.skip_vis ) ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - //QC QC_WORKFLOW ( STARFUSION_WORKFLOW.out.ch_bam_sorted, From 69ba70d04b64fb75bb8353489bf2958cdddd460d Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 17:28:12 +0200 Subject: [PATCH 370/887] qc logic --- workflows/rnafusion.nf | 62 ++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 61ec12dcd..eb9fa0bd1 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -71,8 +71,11 @@ workflow RNAFUSION { Channel.value(params.adapter_fasta), params.fastp_trim ) - def ch_reads = TRIM_WORKFLOW.out.ch_reads_all - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + def ch_reads = TRIM_WORKFLOW.out.ch_reads_all + ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}) SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) @@ -124,9 +127,11 @@ workflow RNAFUSION { BUILD_REFERENCES.out.ch_starfusion_ref, tools ) - ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) - ch_starfusion_fusions = STARFUSION_WORKFLOW.out.fusions - ch_starfusion_bams = STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed + ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) + ch_starfusion_fusions = STARFUSION_WORKFLOW.out.fusions + ch_starfusion_bams = STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}) } // @@ -178,7 +183,7 @@ workflow RNAFUSION { ch_fusionreport_csv = FUSIONREPORT_WORKFLOW.out.csv } else if(params.fusioninspector_fusions) { def input_fusions = file(params.fusioninspector_fusions, checkIfExists:true) - ch_fusion_list = ch_reads.map { it -> [ it[0], input_fusions ] } + ch_fusion_list = ch_reads.map { it -> [ it[0], input_fusions ] } } else { error("Could not find any valid fusions for fusioninspector input. Please provide some via --fusioninspector_fusions or generate them with --arriba, --starfusion and/or --fusioncatcher") } @@ -201,18 +206,26 @@ workflow RNAFUSION { BUILD_REFERENCES.out.ch_hgnc_date, params.skip_vis ) - ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - - //QC - QC_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, - BUILD_REFERENCES.out.ch_refflat, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_fai, - BUILD_REFERENCES.out.ch_rrna_interval - ) - ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) + + // + // SUBWORKFLOW: Run QC + // + if(!params.skip_qc) { + QC_WORKFLOW ( + STARFUSION_WORKFLOW.out.ch_bam_sorted, + BUILD_REFERENCES.out.ch_refflat, + BUILD_REFERENCES.out.ch_fasta, + BUILD_REFERENCES.out.ch_fai, + BUILD_REFERENCES.out.ch_rrna_interval + ) + ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}) + } } // // Collate and save software versions @@ -257,19 +270,6 @@ workflow RNAFUSION { ) ) - if (!params.references_only) { // TODO: Remove this temporary parameter when we have a full-working GitHub nf-test - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.insertsize_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) - } - MULTIQC ( ch_multiqc_files.collect(), ch_multiqc_config.toList(), @@ -279,8 +279,6 @@ workflow RNAFUSION { [] ) - - emit: multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] From 0fa91fcf0d85c56eb1fcc6f86201e39640f37893 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 17:36:52 +0200 Subject: [PATCH 371/887] trim workflow + first batch of ext.when removals --- conf/modules.config | 2 -- main.nf | 3 +- nextflow.config | 5 ++- nextflow_schema.json | 7 +---- subworkflows/local/trim_workflow/main.nf | 27 +++++++--------- workflows/rnafusion.nf | 39 ++++++++++++++---------- 6 files changed, 39 insertions(+), 44 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 0fc0be935..f3d619d16 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -36,7 +36,6 @@ process { } withName: 'ARRIBA_VISUALISATION' { - ext.when = { {!params.fusioninspector_only} && ({params.starfusion} || {params.all}) } ext.prefix = { "${meta.id}_combined_fusions_arriba_visualisation" } publishDir = [ path: { "${params.outdir}/arriba_visualisation" }, @@ -83,7 +82,6 @@ process { withName: 'FASTQC' { ext.args = '--quiet' - ext.when = {!params.skip_qc} publishDir = [ path: { "${params.outdir}/fastqc" }, mode: params.publish_dir_mode, diff --git a/main.nf b/main.nf index 29708e5a4..63870ba33 100644 --- a/main.nf +++ b/main.nf @@ -47,7 +47,8 @@ workflow { "starindex", "starfusion", "stringtie", - "fusion_report" + "fusion_report", + "fastp" ] def tools = params.all ? all_tools : all_tools.findAll { tool -> diff --git a/nextflow.config b/nextflow.config index aac49eecb..5d45390f1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -38,7 +38,6 @@ params { tools_cutoff = 1 // Trimming - fastp_trim = false trim_tail = null adapter_fasta = [] @@ -52,7 +51,7 @@ params { fusioncatcher_limitSjdbInsertNsj = 2000000 fusioninspector_limitSjdbInsertNsj = 1000000 - // Enable or disable tools + // Enable tools all = false arriba = false ctatsplicing = false @@ -61,7 +60,7 @@ params { starfusion = false stringtie = false fusionreport = false - fusioninspector_only = false + fastp = false // Skip steps skip_qc = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 7f8ed19ae..26585381f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -193,11 +193,6 @@ "default": 1000000, "minimum": 1 }, - "fusioninspector_only": { - "type": "boolean", - "fa_icon": "far fa-file-code", - "description": "Skip fusion-report. --fusioninspector_fusions PATH needed to provide a fusion list as input" - }, "fusioninspector_fusions": { "type": "string", "format": "file-path", @@ -332,7 +327,7 @@ "fa_icon": "fas fa-cut", "description": "Options to adjust read trimming criteria.", "properties": { - "fastp_trim": { + "fastp": { "type": "boolean", "description": "Preform fastp trimming of reads, default: false", "fa_icon": "fas fa-cut" diff --git a/subworkflows/local/trim_workflow/main.nf b/subworkflows/local/trim_workflow/main.nf index d548c8aec..d4d559f79 100644 --- a/subworkflows/local/trim_workflow/main.nf +++ b/subworkflows/local/trim_workflow/main.nf @@ -8,7 +8,7 @@ workflow TRIM_WORKFLOW { take: reads // channel [ meta, [ fastq files ] ] adapter_fasta // channel [ path ] - fastp_trim // boolean + skip_qc // boolean main: ch_versions = Channel.empty() @@ -16,25 +16,20 @@ workflow TRIM_WORKFLOW { ch_fastp_json = Channel.empty() ch_fastqc_trimmed = Channel.empty() - if ( fastp_trim ) { - FASTP(reads, adapter_fasta.ifEmpty( [] ), false, false, false) - ch_versions = ch_versions.mix(FASTP.out.versions) + FASTP(reads, adapter_fasta, false, false, false) + ch_versions = ch_versions.mix(FASTP.out.versions) + if(!skip_qc) { FASTQC_FOR_FASTP(FASTP.out.reads) - ch_versions = ch_versions.mix(FASTQC_FOR_FASTP.out.versions) - - ch_reads_all = FASTP.out.reads - ch_reads_fusioncatcher = ch_reads_all - ch_fastp_html = FASTP.out.html - ch_fastp_json = FASTP.out.json - ch_fastqc_trimmed = FASTQC_FOR_FASTP.out.zip - - } - else { - ch_reads_all = reads - ch_reads_fusioncatcher = reads + ch_versions = ch_versions.mix(FASTQC_FOR_FASTP.out.versions) + ch_fastqc_trimmed = FASTQC_FOR_FASTP.out.zip } + ch_reads_all = FASTP.out.reads + ch_reads_fusioncatcher = ch_reads_all + ch_fastp_html = FASTP.out.html + ch_fastp_json = FASTP.out.json + emit: ch_reads_all // Channel [ meta, [reads] ] ch_reads_fusioncatcher // Channel [ meta, [reads] ] diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index eb9fa0bd1..9ecb45c83 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -56,26 +56,33 @@ workflow RNAFUSION { // // QC from FASTQ files // - FASTQC ( - ch_samplesheet - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions) + if(!params.skip_qc) { + FASTQC ( + ch_samplesheet + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions) + } // - // Trimming + // SUBWORKFLOW: Trimming // - TRIM_WORKFLOW ( - ch_samplesheet, - Channel.value(params.adapter_fasta), - params.fastp_trim - ) - def ch_reads = TRIM_WORKFLOW.out.ch_reads_all - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}) + + def ch_reads = ch_samplesheet // Use non-trimmed reads by default + if(tools.contains("fastp")) { + def ch_adapter_fasta = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta).collect() : [] + TRIM_WORKFLOW ( + ch_samplesheet, + ch_adapter_fasta, + params.skip_qc + ) + ch_reads = TRIM_WORKFLOW.out.ch_reads_all + ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}) + } SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) From 76b329e6bb5334fafd08fd8957fa77374a3668ad Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 17:45:30 +0200 Subject: [PATCH 372/887] update changelog + add salmon param --- CHANGELOG.md | 3 +++ conf/modules.config | 1 - main.nf | 3 ++- nextflow_schema.json | 5 +++++ subworkflows/local/build_references.nf | 3 ++- workflows/rnafusion.nf | 13 ++++++++----- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41fc439ff..687ec63d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `CTATSPLICING_PREPGENOMELIB` to update the starfusion genome library directory with a cancer splicing index. [#610](https://github.com/nf-core/rnafusion/pull/610) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) - Add nf-test to local module: `ARRIBA_VISUALISATION`. [#625](https://github.com/nf-core/rnafusion/pull/625) +- Added a new parameter `salmon` to enable the Salmon tool (default is `false`) [#]() ### Changed @@ -51,6 +52,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) - Update htslib and samtools version in `star/align` to 1.21 [#634](https://github.com/nf-core/rnafusion/pull/634) - `--run_fusioncatcher` back to `fusioncatcher` [#641](https://github.com/nf-core/rnafusion/pull/641) +- Removed the `--fusioninspector_only` parameter, this is now the default behaviour of the pipeline [#]() +- Renamed `--fastp_trim` to `--fastp` to be more uniform across with other tool parameters [#]() ### Fixed diff --git a/conf/modules.config b/conf/modules.config index f3d619d16..3bac9ba6b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -91,7 +91,6 @@ process { withName: 'FASTQC_FOR_FASTP' { ext.args = '--quiet' - ext.when = { !params.skip_qc } ext.prefix = { "${meta.id}_trimmed" } publishDir = [ path: { "${params.outdir}/fastqc_for_fastp" }, diff --git a/main.nf b/main.nf index 63870ba33..2c3045f45 100644 --- a/main.nf +++ b/main.nf @@ -48,7 +48,8 @@ workflow { "starfusion", "stringtie", "fusion_report", - "fastp" + "fastp", + "salmon" ] def tools = params.all ? all_tools : all_tools.findAll { tool -> diff --git a/nextflow_schema.json b/nextflow_schema.json index 26585381f..f64cf478c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -237,6 +237,11 @@ "fa_icon": "far fa-file-code", "description": "Use QIAGEN instead of SANGER to download COSMIC database" }, + "salmon": { + "type": "boolean", + "fa_icon": "far fa-file-code", + "description": "Run Salmon" + }, "salmon_index": { "type": "string", "format": "directory-path", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 0e2963bc5..5d3be6277 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -88,7 +88,8 @@ workflow BUILD_REFERENCES { ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } } - if (!exists_not_empty(params.salmon_index) || !exists_not_empty(params.salmon_index_stub_check)){ // add condition for qc + def run_salmon = tools.contains("salmon") + if (run_salmon && (!exists_not_empty(params.salmon_index) || !exists_not_empty(params.salmon_index_stub_check))){ // add condition for qc GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(GFFREAD.out.versions) SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 9ecb45c83..a2e609515 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -69,7 +69,7 @@ workflow RNAFUSION { // SUBWORKFLOW: Trimming // - def ch_reads = ch_samplesheet // Use non-trimmed reads by default + def ch_reads = Channel.empty() if(tools.contains("fastp")) { def ch_adapter_fasta = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta).collect() : [] TRIM_WORKFLOW ( @@ -82,12 +82,15 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}) + } else { + ch_reads = ch_samplesheet } - SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') - ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) - ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) - + if(tools.contains("salmon")) { + SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') + ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) + ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) + } // // SUBWORKFLOW: Run STAR alignment and Arriba From ceb1eb8526a5f4c8f16482e49f0e454aa92dc400 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 17:52:34 +0200 Subject: [PATCH 373/887] remove ext.when --- conf/modules.config | 18 ---- .../local/fusioninspector_workflow.nf | 7 +- workflows/rnafusion.nf | 89 ++++++++++--------- 3 files changed, 54 insertions(+), 60 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 3bac9ba6b..d69aa7577 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -112,13 +112,11 @@ process { } withName: '.*FUSIONINSPECTOR_WORKFLOW:.*:FUSIONINSPECTOR' { - ext.when = { !params.skip_vis } ext.args = { ${params.fusioninspector_limitSjdbInsertNsj} != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' } ext.args2 = '--annotate --examine_coding_effect' } withName: 'FUSIONREPORT' { - ext.when = { !params.skip_vis } ext.args = { {params.no_cosmic} ? "--no-cosmic" : "" } ext.args2 = "--export csv" publishDir = [ @@ -147,7 +145,6 @@ process { } withName: 'GATK4_MARKDUPLICATES' { - ext.when = { {!params.skip_qc} && {!params.fusioninspector_only} && ( {params.starfusion}|| {params.all}) } publishDir = [ path: { "${params.outdir}/picard" }, mode: params.publish_dir_mode, @@ -182,7 +179,6 @@ process { } withName: 'MULTIQC' { - ext.when = { !params.skip_qc } ext.args = {params.multiqc_title} ? "--title \"$params.multiqc_title\"" : '' publishDir = [ path: { "${params.outdir}/multiqc" }, @@ -191,13 +187,7 @@ process { ] } - withName: 'PICARD_COLLECTRNASEQMETRICS' { - ext.when = { {!params.skip_qc} && {!params.fusioninspector_only} && ( {params.starfusion} || {params.all}) } - - } - withName: 'PICARD_COLLECTINSERTSIZEMETRICS' { - ext.when = { ${!params.skip_qc} && ${!params.fusioninspector_only} && (${params.starfusion} || ${params.all}) } ext.prefix = { "${meta.id}_collectinsertsize"} publishDir = [ path: { "${params.outdir}/picard" }, @@ -388,12 +378,4 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - - withName: 'VCF_COLLECT' { - ext.when = { {!params.fusioninspector_only} && {!params.skip_vcf} } - } - - withName: '.*' { - ext.when = { !params.references_only || task.process.contains('BUILD_REFERENCES') } - } } diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow.nf index a2c207ca0..e17b58974 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow.nf @@ -18,6 +18,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_hgnc_ref ch_hgnc_date skip_vis + skip_vcf main: ch_versions = Channel.empty() @@ -49,8 +50,10 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) fusion_data = FUSIONINSPECTOR.out.tsv_coding_effect.join(AGAT_CONVERTSPGFF2TSV.out.tsv).join(fusionreport_out).join(fusionreport_csv) - VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) - ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) + if(!skip_vcf) { + VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) + ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) + } if (!skip_vis) { ch_bam_sorted_indexed_fusions = bam_sorted_indexed.join(FUSIONINSPECTOR.out.tsv) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index a2e609515..b8fa3874f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -178,7 +178,7 @@ workflow RNAFUSION { def ch_fusion_list_filtered = Channel.empty() def ch_fusionreport_report = Channel.empty() def ch_fusionreport_csv = Channel.empty() - if(tools.intersect(["arriba", "starfusion", "fusioncatcher"])) { + if(tools.intersect(["arriba", "starfusion", "fusioncatcher"]) && !params.skip_vis) { FUSIONREPORT_WORKFLOW ( ch_reads, BUILD_REFERENCES.out.ch_fusionreport_ref, @@ -192,10 +192,13 @@ workflow RNAFUSION { ch_fusionreport_report = FUSIONREPORT_WORKFLOW.out.report ch_fusionreport_csv = FUSIONREPORT_WORKFLOW.out.csv } else if(params.fusioninspector_fusions) { - def input_fusions = file(params.fusioninspector_fusions, checkIfExists:true) - ch_fusion_list = ch_reads.map { it -> [ it[0], input_fusions ] } + def input_fusions = file(params.fusioninspector_fusions, checkIfExists:true) + ch_fusion_list = ch_reads.map { it -> [ it[0], input_fusions ] } + ch_fusion_list_filtered = ch_fusion_list + ch_fusionreport_csv = null + ch_fusionreport_report = null } else { - error("Could not find any valid fusions for fusioninspector input. Please provide some via --fusioninspector_fusions or generate them with --arriba, --starfusion and/or --fusioncatcher") + error("Could not find any valid fusions for fusioninspector input. Please provide some via --fusioninspector_fusions or generate them with --arriba, --starfusion and/or --fusioncatcher with --skip_vis disabled") } // @@ -252,46 +255,52 @@ workflow RNAFUSION { // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() - - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? - file(params.multiqc_methods_description, checkIfExists: true) : - file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( - methodsDescriptionText(ch_multiqc_custom_methods_description)) - - ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - ch_multiqc_files = ch_multiqc_files.mix( - ch_methods_description.collectFile( - name: 'methods_description_mqc.yaml', - sort: true + + def ch_multiqc_output = Channel.empty() + if(!params.skip_qc) { + ch_multiqc_config = Channel.fromPath( + "$projectDir/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? + Channel.fromPath(params.multiqc_config, checkIfExists: true) : + Channel.empty() + ch_multiqc_logo = params.multiqc_logo ? + Channel.fromPath(params.multiqc_logo, checkIfExists: true) : + Channel.empty() + + summary_params = paramsSummaryMap( + workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + ch_multiqc_files = ch_multiqc_files.mix( + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? + file(params.multiqc_methods_description, checkIfExists: true) : + file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description)) + + ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) + ch_multiqc_files = ch_multiqc_files.mix( + ch_methods_description.collectFile( + name: 'methods_description_mqc.yaml', + sort: true + ) ) - ) - MULTIQC ( - ch_multiqc_files.collect(), - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList(), - [], - [] - ) + MULTIQC ( + ch_multiqc_files.collect(), + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList(), + [], + [] + ) + ch_multiqc_output = MULTIQC.out.report.toList() + } + emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] + multiqc_report = ch_multiqc_output // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] } From ad1558733bbde379978426a50a763551237ca68b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 31 Mar 2025 17:53:55 +0200 Subject: [PATCH 374/887] fix subwf input issue --- workflows/rnafusion.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index b8fa3874f..fdaf4ce75 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -217,7 +217,8 @@ workflow RNAFUSION { BUILD_REFERENCES.out.ch_arriba_ref_cytobands, BUILD_REFERENCES.out.ch_hgnc_ref, BUILD_REFERENCES.out.ch_hgnc_date, - params.skip_vis + params.skip_vis, + params.skip_vcf ) ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) From ea2d6efc2dd263c28b669d9c5c04973d2191a7bb Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 10:25:48 +0200 Subject: [PATCH 375/887] remove unused files --- assets/dummy_file_arriba.txt | 0 assets/dummy_file_fusioncatcher.txt | 0 assets/dummy_file_pizzly.txt | 0 assets/dummy_file_squid.txt | 0 assets/dummy_file_starfusion.txt | 0 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 assets/dummy_file_arriba.txt delete mode 100644 assets/dummy_file_fusioncatcher.txt delete mode 100644 assets/dummy_file_pizzly.txt delete mode 100644 assets/dummy_file_squid.txt delete mode 100644 assets/dummy_file_starfusion.txt diff --git a/assets/dummy_file_arriba.txt b/assets/dummy_file_arriba.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/assets/dummy_file_fusioncatcher.txt b/assets/dummy_file_fusioncatcher.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/assets/dummy_file_pizzly.txt b/assets/dummy_file_pizzly.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/assets/dummy_file_squid.txt b/assets/dummy_file_squid.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/assets/dummy_file_starfusion.txt b/assets/dummy_file_starfusion.txt deleted file mode 100644 index e69de29bb..000000000 From 86828281228feafaf8024c2f94d6cc6cce5b528b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 10:25:56 +0200 Subject: [PATCH 376/887] fix param name --- main.nf | 2 +- nextflow.config | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/main.nf b/main.nf index 2c3045f45..6280ac6dd 100644 --- a/main.nf +++ b/main.nf @@ -47,7 +47,7 @@ workflow { "starindex", "starfusion", "stringtie", - "fusion_report", + "fusionreport", "fastp", "salmon" ] diff --git a/nextflow.config b/nextflow.config index 5d45390f1..bdb6cc8e4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -61,6 +61,7 @@ params { stringtie = false fusionreport = false fastp = false + salmon = false // Skip steps skip_qc = false From 2e4faec52ef093e4bcd98e4a600be56fe03e5638 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 10:26:03 +0200 Subject: [PATCH 377/887] fix build references --- subworkflows/local/build_references.nf | 163 ++++++++++++++----------- workflows/rnafusion.nf | 56 +++++---- 2 files changed, 122 insertions(+), 97 deletions(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 5d3be6277..cd2d73f76 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -38,8 +38,10 @@ workflow BUILD_REFERENCES { tools // list of all the tools to create references from main: - ch_versions = Channel.empty() + def ch_versions = Channel.empty() + def ch_fasta = Channel.empty() + def ch_gtf = Channel.empty() if (!exists_not_empty(params.fasta) || !exists_not_empty(params.gtf)){ GENCODE_DOWNLOAD(params.genome_gencode_version, params.genome) ch_versions = ch_versions.mix(GENCODE_DOWNLOAD.out.versions) @@ -50,6 +52,7 @@ workflow BUILD_REFERENCES { ch_gtf = Channel.fromPath(params.gtf).map { that -> [[id:that.Name], that] } } + def ch_fai = Channel.empty() if (!exists_not_empty(params.fai)){ SAMTOOLS_FAIDX(ch_fasta, [[],[]]) ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) @@ -58,6 +61,8 @@ workflow BUILD_REFERENCES { ch_fai = Channel.fromPath(params.fai).map { that -> [[id:that.Name], that] } } + def ch_hgnc_date = Channel.empty() + def ch_hgnc_ref = Channel.empty() if ((!exists_not_empty(params.hgnc_ref) || !exists_not_empty(params.hgnc_date)) && !params.skip_vcf){ HGNC_DOWNLOAD( ) ch_versions = ch_versions.mix(HGNC_DOWNLOAD.out.versions) @@ -68,6 +73,7 @@ workflow BUILD_REFERENCES { ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } } + def ch_rrna_interval = Channel.empty() if (!exists_not_empty(params.rrna_intervals)){ GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) ch_versions = ch_versions.mix(GATK4_CREATESEQUENCEDICTIONARY.out.versions) @@ -80,6 +86,7 @@ workflow BUILD_REFERENCES { ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } } + def ch_refflat = Channel.empty() if (!exists_not_empty(params.refflat)){ GTF_TO_REFFLAT(ch_gtf) ch_versions = ch_versions.mix(GTF_TO_REFFLAT.out.versions) @@ -89,56 +96,67 @@ workflow BUILD_REFERENCES { } def run_salmon = tools.contains("salmon") - if (run_salmon && (!exists_not_empty(params.salmon_index) || !exists_not_empty(params.salmon_index_stub_check))){ // add condition for qc - GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) - ch_versions = ch_versions.mix(GFFREAD.out.versions) - SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) - ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) - ch_salmon_index = SALMON_INDEX.out.index - } else { - ch_salmon_index = Channel.fromPath({params.salmon_index}) + def ch_salmon_index = Channel.empty() + if (run_salmon) { + if (!exists_not_empty(params.salmon_index) || !exists_not_empty(params.salmon_index_stub_check)){ // add condition for qc + GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) + ch_versions = ch_versions.mix(GFFREAD.out.versions) + SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) + ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) + ch_salmon_index = SALMON_INDEX.out.index + } else { + ch_salmon_index = Channel.fromPath({params.salmon_index}) + } } + def ch_starindex_ref = Channel.empty() def star_index_tools = tools.intersect(["starindex", "starfusion", "arriba", "ctatsplicing"]) - if (star_index_tools.size() > 0 && (!exists_not_empty(params.starindex_ref) || !exists_not_empty(params.starindex_ref_stub_check))) { - STAR_GENOMEGENERATE(ch_fasta, ch_gtf) - ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions) - ch_starindex_ref = STAR_GENOMEGENERATE.out.index - } else { - ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } + if (star_index_tools) { + if (!exists_not_empty(params.starindex_ref) || !exists_not_empty(params.starindex_ref_stub_check)) { + STAR_GENOMEGENERATE(ch_fasta, ch_gtf) + ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions) + ch_starindex_ref = STAR_GENOMEGENERATE.out.index + } else { + ch_starindex_ref = Channel.fromPath(params.starindex_ref).map { that -> [[id:that.Name], that] } + } } - if (tools.contains("arriba") && ( - !exists_not_empty(params.arriba_ref_blacklist) || - !exists_not_empty(params.arriba_ref_known_fusions) || - !exists_not_empty(params.arriba_ref_protein_domains) - ) - ) { - ARRIBA_DOWNLOAD(params.genome) - ch_versions = ch_versions.mix(ARRIBA_DOWNLOAD.out.versions) - ch_arriba_ref_blacklist = ARRIBA_DOWNLOAD.out.blacklist - ch_arriba_ref_cytobands = ARRIBA_DOWNLOAD.out.cytobands - ch_arriba_ref_known_fusions = ARRIBA_DOWNLOAD.out.known_fusions - ch_arriba_ref_protein_domains = ARRIBA_DOWNLOAD.out.protein_domains - } else { - ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist) - ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands) - ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions) - ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains) + def ch_arriba_ref_blacklist = Channel.empty() + def ch_arriba_ref_cytobands = Channel.empty() + def ch_arriba_ref_known_fusions = Channel.empty() + def ch_arriba_ref_protein_domains = Channel.empty() + if (tools.contains("arriba")) { + if (!exists_not_empty(params.arriba_ref_blacklist) || !exists_not_empty(params.arriba_ref_known_fusions) || !exists_not_empty(params.arriba_ref_protein_domains)) { + ARRIBA_DOWNLOAD(params.genome) + ch_versions = ch_versions.mix(ARRIBA_DOWNLOAD.out.versions) + ch_arriba_ref_blacklist = ARRIBA_DOWNLOAD.out.blacklist + ch_arriba_ref_cytobands = ARRIBA_DOWNLOAD.out.cytobands + ch_arriba_ref_known_fusions = ARRIBA_DOWNLOAD.out.known_fusions + ch_arriba_ref_protein_domains = ARRIBA_DOWNLOAD.out.protein_domains + } else { + ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist) + ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands) + ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions) + ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains) + } } - - if (tools.contains("fusioncatcher") && (!exists_not_empty(params.fusioncatcher_ref) || !exists_not_empty(params.fusioncatcher_ref_stub_check))) { - FUSIONCATCHER_BUILD(params.genome_gencode_version) - ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) - ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference - } - else { - ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref) + def ch_fusioncatcher_ref = Channel.empty() + if (tools.contains("fusioncatcher")) { + if (!exists_not_empty(params.fusioncatcher_ref) || !exists_not_empty(params.fusioncatcher_ref_stub_check)) { + FUSIONCATCHER_BUILD(params.genome_gencode_version) + ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) + ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference + } + else { + ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref) + } } + def ch_starfusion_ref = Channel.empty() def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing"]) - if (starfusion_tools.size() > 0 && (!exists_not_empty(params.starfusion_ref) || !exists_not_empty(params.starfusion_ref_stub_check))) { + if (starfusion_tools) { + if (!exists_not_empty(params.starfusion_ref) || !exists_not_empty(params.starfusion_ref_stub_check)) { STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) if (tools.contains("ctatsplicing")) { @@ -151,41 +169,44 @@ workflow BUILD_REFERENCES { } else { ch_starfusion_ref = STARFUSION_BUILD.out.reference } + } + else { + ch_starfusion_ref = Channel.fromPath(params.starfusion_ref) + } } - else { - ch_starfusion_ref = Channel.fromPath(params.starfusion_ref) - } - - if (tools.contains("fusionreport") && (!exists_not_empty(params.fusionreport_ref) || !exists_not_empty(params.fusionreport_ref_stub_check))) { - if (!params.no_cosmic && (!params.cosmic_username || !params.cosmic_passwd)) { - error('COSMIC username and/or password missing, this is needed to download the fusionreport reference') + def ch_fusionreport_ref = Channel.empty() + if (tools.contains("fusionreport")) { + if (!exists_not_empty(params.fusionreport_ref) || !exists_not_empty(params.fusionreport_ref_stub_check)) { + if (!params.no_cosmic && (!params.cosmic_username || !params.cosmic_passwd)) { + error('COSMIC username and/or password missing, this is needed to download the fusionreport reference') + } + FUSIONREPORT_DOWNLOAD() + ch_versions = ch_versions.mix(FUSIONREPORT_DOWNLOAD.out.versions) + ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref + } else { + ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } } - FUSIONREPORT_DOWNLOAD() - ch_versions = ch_versions.mix(FUSIONREPORT_DOWNLOAD.out.versions) - ch_fusionreport_ref = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref - } else { - ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { that -> [[id:that.Name], that] } } emit: - ch_fasta - ch_gtf - ch_fai - ch_hgnc_ref - ch_hgnc_date - ch_rrna_interval - ch_refflat - ch_salmon_index - ch_starindex_ref - ch_arriba_ref_blacklist - ch_arriba_ref_cytobands - ch_arriba_ref_known_fusions - ch_arriba_ref_protein_domains - ch_fusioncatcher_ref - ch_starfusion_ref - ch_fusionreport_ref - versions = ch_versions + fasta = ch_fasta + gtf = ch_gtf + fai = ch_fai + hgnc_ref = ch_hgnc_ref + hgnc_date = ch_hgnc_date + rrna_interval = ch_rrna_interval + refflat = ch_refflat + salmon_index = ch_salmon_index + starindex_ref = ch_starindex_ref + arriba_ref_blacklist = ch_arriba_ref_blacklist + arriba_ref_cytobands = ch_arriba_ref_cytobands + arriba_ref_known_fusions = ch_arriba_ref_known_fusions + arriba_ref_protein_domains = ch_arriba_ref_protein_domains + fusioncatcher_ref = ch_fusioncatcher_ref + starfusion_ref = ch_starfusion_ref + fusionreport_ref = ch_fusionreport_ref + versions = ch_versions } /* @@ -195,6 +216,6 @@ workflow BUILD_REFERENCES { */ def exists_not_empty(path) { - def path_to_check = file(path) + def path_to_check = file(path as String) return path_to_check.exists() && !path_to_check.isEmpty() } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index fdaf4ce75..37d484c61 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -87,7 +87,7 @@ workflow RNAFUSION { } if(tools.contains("salmon")) { - SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.ch_salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.ch_gtf.map{ it -> it[1] }, [], false, 'A') + SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.gtf.map{ it -> it[1] }, [], false, 'A') ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) } @@ -100,18 +100,20 @@ workflow RNAFUSION { // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file + def fusions_created = false def ch_arriba_fusions = ch_reads.map { it -> [it[0], []] } // Set arriba fusions to empty by default if(tools.intersect(["arriba", "ctatsplicing"])) { + fusions_created = true ARRIBA_WORKFLOW ( ch_reads, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_arriba_ref_blacklist, - BUILD_REFERENCES.out.ch_arriba_ref_cytobands, - BUILD_REFERENCES.out.ch_arriba_ref_known_fusions, - BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, - BUILD_REFERENCES.out.ch_starfusion_ref, + BUILD_REFERENCES.out.gtf, + BUILD_REFERENCES.out.fasta, + BUILD_REFERENCES.out.starindex_ref, + BUILD_REFERENCES.out.arriba_ref_blacklist, + BUILD_REFERENCES.out.arriba_ref_cytobands, + BUILD_REFERENCES.out.arriba_ref_known_fusions, + BUILD_REFERENCES.out.arriba_ref_protein_domains, + BUILD_REFERENCES.out.starfusion_ref, tools, params.star_ignore_sjdbgtf, // boolean params.seq_center ?: '', // string @@ -129,12 +131,13 @@ workflow RNAFUSION { def ch_starfusion_fusions = ch_reads.map { it -> [it[0], []] } // Set starfusion fusions to empty by default def ch_starfusion_bams = Channel.empty() if(tools.intersect(["starfusion", "ctatsplicing", "stringtie"])) { + fusions_created = true STARFUSION_WORKFLOW ( ch_reads, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_starfusion_ref, + BUILD_REFERENCES.out.gtf, + BUILD_REFERENCES.out.starindex_ref, + BUILD_REFERENCES.out.fasta, + BUILD_REFERENCES.out.starfusion_ref, tools ) ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) @@ -150,9 +153,10 @@ workflow RNAFUSION { def ch_fusioncatcher_fusions = ch_reads.map { it -> [it[0], []] } // Set fusioncatcher fusions to empty by default if(tools.contains("fusioncatcher")) { + fusions_created = true FUSIONCATCHER_WORKFLOW ( ch_reads, - BUILD_REFERENCES.out.ch_fusioncatcher_ref, // channel [ meta, path ] + BUILD_REFERENCES.out.fusioncatcher_ref, // channel [ meta, path ] params.fusioncatcher_fusions ) ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) @@ -165,7 +169,7 @@ workflow RNAFUSION { if(tools.contains("stringtie")) { STRINGTIE_WORKFLOW ( STARFUSION_WORKFLOW.out.ch_bam_sorted, - BUILD_REFERENCES.out.ch_gtf + BUILD_REFERENCES.out.gtf ) ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) } @@ -178,10 +182,10 @@ workflow RNAFUSION { def ch_fusion_list_filtered = Channel.empty() def ch_fusionreport_report = Channel.empty() def ch_fusionreport_csv = Channel.empty() - if(tools.intersect(["arriba", "starfusion", "fusioncatcher"]) && !params.skip_vis) { + if(fusions_created && !params.skip_vis) { FUSIONREPORT_WORKFLOW ( ch_reads, - BUILD_REFERENCES.out.ch_fusionreport_ref, + BUILD_REFERENCES.out.fusionreport_ref, ch_arriba_fusions, ch_starfusion_fusions, ch_fusioncatcher_fusions @@ -212,11 +216,11 @@ workflow RNAFUSION { ch_fusionreport_report, ch_fusionreport_csv, ch_starfusion_bams, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_arriba_ref_protein_domains, - BUILD_REFERENCES.out.ch_arriba_ref_cytobands, - BUILD_REFERENCES.out.ch_hgnc_ref, - BUILD_REFERENCES.out.ch_hgnc_date, + BUILD_REFERENCES.out.gtf, + BUILD_REFERENCES.out.arriba_ref_protein_domains, + BUILD_REFERENCES.out.arriba_ref_cytobands, + BUILD_REFERENCES.out.hgnc_ref, + BUILD_REFERENCES.out.hgnc_date, params.skip_vis, params.skip_vcf ) @@ -230,10 +234,10 @@ workflow RNAFUSION { if(!params.skip_qc) { QC_WORKFLOW ( STARFUSION_WORKFLOW.out.ch_bam_sorted, - BUILD_REFERENCES.out.ch_refflat, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_fai, - BUILD_REFERENCES.out.ch_rrna_interval + BUILD_REFERENCES.out.refflat, + BUILD_REFERENCES.out.fasta, + BUILD_REFERENCES.out.fai, + BUILD_REFERENCES.out.rrna_interval ) ch_versions = ch_versions.mix(QC_WORKFLOW.out.versions) ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}) From 3898f921e2354c7828031933be99bfa4995a26d0 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 11:33:52 +0200 Subject: [PATCH 378/887] fix some flow issues --- main.nf | 3 +- modules/local/fusioninspector/main.nf | 2 +- modules/local/fusionreport/detect/main.nf | 6 +- nextflow.config | 1 + nextflow_schema.json | 5 + subworkflows/local/build_references.nf | 97 ++++++++++--------- .../local/ctatsplicing_workflow/main.nf | 25 +++-- .../local/fusioninspector_workflow.nf | 21 ++-- subworkflows/local/qc_workflow/main.nf | 17 +++- .../local/starfusion_workflow/main.nf | 2 +- subworkflows/local/stringtie_workflow/main.nf | 30 +++--- workflows/rnafusion.nf | 59 ++++++----- 12 files changed, 149 insertions(+), 119 deletions(-) diff --git a/main.nf b/main.nf index 6280ac6dd..35d5817a7 100644 --- a/main.nf +++ b/main.nf @@ -49,7 +49,8 @@ workflow { "stringtie", "fusionreport", "fastp", - "salmon" + "salmon", + "fusioninspector" ] def tools = params.all ? all_tools : all_tools.findAll { tool -> diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 3659220b0..ae368b5e7 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -9,7 +9,7 @@ process FUSIONINSPECTOR { input: tuple val(meta), path(reads), path(fusion_list) - path reference + tuple val(meta2), path(reference) output: tuple val(meta), path("*FusionInspector.fusions.tsv") , emit: tsv diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 3670eec0b..dab70ffe4 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -28,9 +28,9 @@ process FUSIONREPORT { script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def tools = params.arriba || params.all ? "--arriba ${arriba_fusions} " : '' - tools += params.starfusion || params.all ? "--starfusion ${starfusion_fusions} " : '' - tools += params.fusioncatcher || params.all ? "--fusioncatcher ${fusioncatcher_fusions} " : '' + def tools = arriba_fusions ? "--arriba ${arriba_fusions} " : '' + tools += starfusion_fusions ? "--starfusion ${starfusion_fusions} " : '' + tools += fusioncatcher_fusions ? "--fusioncatcher ${fusioncatcher_fusions} " : '' def prefix = task.ext.prefix ?: "${meta.id}" """ fusion_report run $meta.id . $fusionreport_ref $tools --allow-multiple-gene-symbols --tool-cutoff $tools_cutoff $args $args2 diff --git a/nextflow.config b/nextflow.config index bdb6cc8e4..b82faf984 100644 --- a/nextflow.config +++ b/nextflow.config @@ -60,6 +60,7 @@ params { starfusion = false stringtie = false fusionreport = false + fusioninspector = false fastp = false salmon = false diff --git a/nextflow_schema.json b/nextflow_schema.json index f64cf478c..acd1758c9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -186,6 +186,11 @@ "fa_icon": "far fa-file-code", "description": "Path to file in fusioncatcher references" }, + "fusioninspector": { + "type": "boolean", + "fa_icon": "far fa-file-code", + "description": "Run fusioninspector" + }, "fusioninspector_limitSjdbInsertNsj": { "type": "integer", "fa_icon": "far fa-file-code", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index cd2d73f76..228dc58e0 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -63,41 +63,47 @@ workflow BUILD_REFERENCES { def ch_hgnc_date = Channel.empty() def ch_hgnc_ref = Channel.empty() - if ((!exists_not_empty(params.hgnc_ref) || !exists_not_empty(params.hgnc_date)) && !params.skip_vcf){ - HGNC_DOWNLOAD( ) - ch_versions = ch_versions.mix(HGNC_DOWNLOAD.out.versions) - ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref - ch_hgnc_date = HGNC_DOWNLOAD.out.hgnc_date - } else { - ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { that -> [[id:that.Name], that] } - ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } + def run_fusioninspector = tools.contains("fusioninspector") + if(run_fusioninspector) { + if ((!exists_not_empty(params.hgnc_ref) || !exists_not_empty(params.hgnc_date)) && !params.skip_vcf){ + HGNC_DOWNLOAD( ) + ch_versions = ch_versions.mix(HGNC_DOWNLOAD.out.versions) + ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref + ch_hgnc_date = HGNC_DOWNLOAD.out.hgnc_date + } else { + ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { that -> [[id:that.Name], that] } + ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } + } } def ch_rrna_interval = Channel.empty() - if (!exists_not_empty(params.rrna_intervals)){ - GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) - ch_versions = ch_versions.mix(GATK4_CREATESEQUENCEDICTIONARY.out.versions) - GET_RRNA_TRANSCRIPTS(ch_gtf) - ch_versions = ch_versions.mix(GET_RRNA_TRANSCRIPTS.out.versions) - GATK4_BEDTOINTERVALLIST(GET_RRNA_TRANSCRIPTS.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict ) - ch_versions = ch_versions.mix(GATK4_BEDTOINTERVALLIST.out.versions) - ch_rrna_interval = GATK4_BEDTOINTERVALLIST.out.interval_list - } else { - ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } + if (!params.skip_qc) { + if (!exists_not_empty(params.rrna_intervals)){ + GATK4_CREATESEQUENCEDICTIONARY(ch_fasta) + ch_versions = ch_versions.mix(GATK4_CREATESEQUENCEDICTIONARY.out.versions) + GET_RRNA_TRANSCRIPTS(ch_gtf) + ch_versions = ch_versions.mix(GET_RRNA_TRANSCRIPTS.out.versions) + GATK4_BEDTOINTERVALLIST(GET_RRNA_TRANSCRIPTS.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict ) + ch_versions = ch_versions.mix(GATK4_BEDTOINTERVALLIST.out.versions) + ch_rrna_interval = GATK4_BEDTOINTERVALLIST.out.interval_list + } else { + ch_rrna_interval = Channel.fromPath(params.rrna_intervals).map { that -> [[id:that.Name], that] } + } } def ch_refflat = Channel.empty() - if (!exists_not_empty(params.refflat)){ - GTF_TO_REFFLAT(ch_gtf) - ch_versions = ch_versions.mix(GTF_TO_REFFLAT.out.versions) - ch_refflat = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } - } else { - ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } + if (!params.skip_qc) { + if (!exists_not_empty(params.refflat)){ + GTF_TO_REFFLAT(ch_gtf) + ch_versions = ch_versions.mix(GTF_TO_REFFLAT.out.versions) + ch_refflat = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } + } else { + ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } + } } - def run_salmon = tools.contains("salmon") def ch_salmon_index = Channel.empty() - if (run_salmon) { + if (tools.contains("salmon")) { if (!exists_not_empty(params.salmon_index) || !exists_not_empty(params.salmon_index_stub_check)){ // add condition for qc GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(GFFREAD.out.versions) @@ -110,7 +116,7 @@ workflow BUILD_REFERENCES { } def ch_starindex_ref = Channel.empty() - def star_index_tools = tools.intersect(["starindex", "starfusion", "arriba", "ctatsplicing"]) + def star_index_tools = tools.intersect(["starindex", "starfusion", "arriba", "ctatsplicing", "stringtie"]) if (star_index_tools) { if (!exists_not_empty(params.starindex_ref) || !exists_not_empty(params.starindex_ref_stub_check)) { STAR_GENOMEGENERATE(ch_fasta, ch_gtf) @@ -125,7 +131,8 @@ workflow BUILD_REFERENCES { def ch_arriba_ref_cytobands = Channel.empty() def ch_arriba_ref_known_fusions = Channel.empty() def ch_arriba_ref_protein_domains = Channel.empty() - if (tools.contains("arriba")) { + def arriba_tools = tools.intersect(["arriba", "fusioninspector"]) + if (arriba_tools) { if (!exists_not_empty(params.arriba_ref_blacklist) || !exists_not_empty(params.arriba_ref_known_fusions) || !exists_not_empty(params.arriba_ref_protein_domains)) { ARRIBA_DOWNLOAD(params.genome) ch_versions = ch_versions.mix(ARRIBA_DOWNLOAD.out.versions) @@ -154,7 +161,7 @@ workflow BUILD_REFERENCES { } def ch_starfusion_ref = Channel.empty() - def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing"]) + def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing", "fusioninspector", "stringtie"]) if (starfusion_tools) { if (!exists_not_empty(params.starfusion_ref) || !exists_not_empty(params.starfusion_ref_stub_check)) { STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) @@ -190,22 +197,22 @@ workflow BUILD_REFERENCES { } emit: - fasta = ch_fasta - gtf = ch_gtf - fai = ch_fai - hgnc_ref = ch_hgnc_ref - hgnc_date = ch_hgnc_date - rrna_interval = ch_rrna_interval - refflat = ch_refflat - salmon_index = ch_salmon_index - starindex_ref = ch_starindex_ref - arriba_ref_blacklist = ch_arriba_ref_blacklist - arriba_ref_cytobands = ch_arriba_ref_cytobands - arriba_ref_known_fusions = ch_arriba_ref_known_fusions - arriba_ref_protein_domains = ch_arriba_ref_protein_domains - fusioncatcher_ref = ch_fusioncatcher_ref - starfusion_ref = ch_starfusion_ref - fusionreport_ref = ch_fusionreport_ref + fasta = ch_fasta.collect() + gtf = ch_gtf.collect() + fai = ch_fai.collect() + hgnc_ref = ch_hgnc_ref.collect() + hgnc_date = ch_hgnc_date.collect() + rrna_interval = ch_rrna_interval.collect() + refflat = ch_refflat.collect() + salmon_index = ch_salmon_index.collect() + starindex_ref = ch_starindex_ref.collect() + arriba_ref_blacklist = ch_arriba_ref_blacklist.collect() + arriba_ref_cytobands = ch_arriba_ref_cytobands.collect() + arriba_ref_known_fusions = ch_arriba_ref_known_fusions.collect() + arriba_ref_protein_domains = ch_arriba_ref_protein_domains.collect() + fusioncatcher_ref = ch_fusioncatcher_ref.collect() + starfusion_ref = ch_starfusion_ref.collect() + fusionreport_ref = ch_fusionreport_ref.collect() versions = ch_versions } diff --git a/subworkflows/local/ctatsplicing_workflow/main.nf b/subworkflows/local/ctatsplicing_workflow/main.nf index 8b279033d..f8b2d3592 100644 --- a/subworkflows/local/ctatsplicing_workflow/main.nf +++ b/subworkflows/local/ctatsplicing_workflow/main.nf @@ -10,21 +10,18 @@ workflow CTATSPLICING_WORKFLOW { main: def ch_versions = Channel.empty() - if (params.ctatsplicing || params.all) { - def ch_ctatsplicing_input = split_junctions - .join(junctions, failOnMismatch:true, failOnDuplicate:true) - .join(aligned_bams, failOnMismatch:true, failOnDuplicate:true) - .map { meta, split_junction, junction, bam -> - [ meta, split_junction, junction, bam, [] ] - } + def ch_ctatsplicing_input = split_junctions + .join(junctions, failOnMismatch:true, failOnDuplicate:true) + .join(aligned_bams, failOnMismatch:true, failOnDuplicate:true) + .map { meta, split_junction, junction, bam -> + [ meta, split_junction, junction, bam, [] ] + } - CTATSPLICING_STARTOCANCERINTRONS( - ch_ctatsplicing_input, - ctat_genome_lib - ) - ch_versions = ch_versions.mix(CTATSPLICING_STARTOCANCERINTRONS.out.versions.first()) - - } + CTATSPLICING_STARTOCANCERINTRONS( + ch_ctatsplicing_input, + ctat_genome_lib + ) + ch_versions = ch_versions.mix(CTATSPLICING_STARTOCANCERINTRONS.out.versions.first()) emit: versions = ch_versions diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow.nf index e17b58974..56fd67321 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow.nf @@ -17,22 +17,18 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_arriba_ref_cytobands ch_hgnc_ref ch_hgnc_date + ch_starfusion_ref skip_vis skip_vcf main: ch_versions = Channel.empty() ch_arriba_visualisation = Channel.empty() - index ="${params.starfusion_ref}" ch_fusion_list = ( params.tools_cutoff > 1 ? fusion_list_filtered : fusion_list ) - .branch{ - no_fusions: it[1].size() == 0 - fusions: it[1].size() > 0 - } if (params.whitelist) { - ch_whitelist = ch_fusion_list.fusions.combine(Channel.value(file(params.whitelist, checkIfExists:true))) + ch_whitelist = ch_fusion_list.combine(Channel.value(file(params.whitelist, checkIfExists:true))) .map { meta, fusions, whitelist -> [ meta, [fusions, whitelist] ] } CAT_CAT(ch_whitelist) // fusioninspector takes care of possible duplicates @@ -40,17 +36,18 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_reads_fusion = reads.join(CAT_CAT.out.file_out ) } else { - ch_reads_fusion = reads.join(ch_fusion_list.fusions ) + ch_reads_fusion = reads.join(ch_fusion_list) } - FUSIONINSPECTOR( ch_reads_fusion, index) + FUSIONINSPECTOR( ch_reads_fusion, ch_starfusion_ref) ch_versions = ch_versions.mix(FUSIONINSPECTOR.out.versions) - AGAT_CONVERTSPGFF2TSV(FUSIONINSPECTOR.out.out_gtf) - ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) - - fusion_data = FUSIONINSPECTOR.out.tsv_coding_effect.join(AGAT_CONVERTSPGFF2TSV.out.tsv).join(fusionreport_out).join(fusionreport_csv) if(!skip_vcf) { + AGAT_CONVERTSPGFF2TSV(FUSIONINSPECTOR.out.out_gtf) + ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) + + fusion_data = FUSIONINSPECTOR.out.tsv_coding_effect.join(AGAT_CONVERTSPGFF2TSV.out.tsv).join(fusionreport_out).join(fusionreport_csv) + VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) } diff --git a/subworkflows/local/qc_workflow/main.nf b/subworkflows/local/qc_workflow/main.nf index 4b6352420..4924b633b 100644 --- a/subworkflows/local/qc_workflow/main.nf +++ b/subworkflows/local/qc_workflow/main.nf @@ -17,15 +17,26 @@ workflow QC_WORKFLOW { main: ch_versions = Channel.empty() - PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted, ch_refflat.map{ meta, refflat -> [ refflat ] }, ch_fasta.map{ meta, fasta -> [ fasta ] }, ch_rrna_interval.map{ meta, intervals -> [ intervals ] }.ifEmpty([]) ) // Some chromosome or annotation may not have rRNA genes + PICARD_COLLECTRNASEQMETRICS( + ch_bam_sorted.map { meta, bam, _bai -> [ meta, bam ]}, + ch_refflat.map{ _meta, refflat -> [ refflat ] }, + ch_fasta.map{ _meta, fasta -> [ fasta ] }, + ch_rrna_interval.map{ _meta, intervals -> [ intervals ] }.ifEmpty([]) + ) // Some chromosome or annotation may not have rRNA genes ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = PICARD_COLLECTRNASEQMETRICS.out.metrics - GATK4_MARKDUPLICATES(ch_bam_sorted, ch_fasta.map { meta, fasta -> [ fasta ]}, ch_fai.map { meta, fasta_fai -> [ fasta_fai ]}) + GATK4_MARKDUPLICATES( + ch_bam_sorted.map { meta, bam, _bai -> [ meta, bam ]}, + ch_fasta.map { _meta, fasta -> [ fasta ]}, + ch_fai.map { _meta, fasta_fai -> [ fasta_fai ]} + ) ch_versions = ch_versions.mix(GATK4_MARKDUPLICATES.out.versions) ch_duplicate_metrics = GATK4_MARKDUPLICATES.out.metrics - PICARD_COLLECTINSERTSIZEMETRICS(ch_bam_sorted) + PICARD_COLLECTINSERTSIZEMETRICS( + ch_bam_sorted.map { meta, bam, _bai -> [ meta, bam ]} + ) ch_versions = ch_versions.mix(PICARD_COLLECTINSERTSIZEMETRICS.out.versions) ch_insertsize_metrics = PICARD_COLLECTINSERTSIZEMETRICS.out.metrics diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index d4bee449b..ba39fe33c 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -51,7 +51,7 @@ workflow STARFUSION_WORKFLOW { SAMTOOLS_INDEX_FOR_STARFUSION_CRAM (SAMTOOLS_VIEW_FOR_STARFUSION.out.cram) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_STARFUSION_CRAM.out.versions) } - if (params.starfusion || params.all){ + if (tools.contains("starfusion")){ STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) ch_versions = ch_versions.mix(STARFUSION.out.versions) ch_starfusion_fusions = STARFUSION.out.fusions diff --git a/subworkflows/local/stringtie_workflow/main.nf b/subworkflows/local/stringtie_workflow/main.nf index 25ff26ee8..3b27688c7 100644 --- a/subworkflows/local/stringtie_workflow/main.nf +++ b/subworkflows/local/stringtie_workflow/main.nf @@ -11,22 +11,20 @@ workflow STRINGTIE_WORKFLOW { ch_versions = Channel.empty() ch_stringtie_gtf = Channel.empty() - if ((params.stringtie || params.all) && !params.fusioninspector_only) { - STRINGTIE_STRINGTIE(bam_sorted, ch_chrgtf.map { meta, gtf -> [ gtf ]}) - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - STRINGTIE_STRINGTIE - .out - .transcript_gtf - .map { it -> it[1] } - .set { stringtie_gtf } - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - - STRINGTIE_MERGE (stringtie_gtf, ch_chrgtf.map { meta, gtf -> [ gtf ]}) - ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) - ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf - } + STRINGTIE_STRINGTIE(bam_sorted, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) + + STRINGTIE_STRINGTIE + .out + .transcript_gtf + .map { it -> it[1] } + .set { stringtie_gtf } + ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) + + + STRINGTIE_MERGE (stringtie_gtf, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) + ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf emit: stringtie_gtf = ch_stringtie_gtf.ifEmpty(null) // channel: [meta, gtf] diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 37d484c61..857de11e4 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -87,7 +87,14 @@ workflow RNAFUSION { } if(tools.contains("salmon")) { - SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.salmon_index.map{ it -> it[1] }, BUILD_REFERENCES.out.gtf.map{ it -> it[1] }, [], false, 'A') + SALMON_QUANT( + ch_reads.view(), + BUILD_REFERENCES.out.salmon_index, + BUILD_REFERENCES.out.gtf.map{ it -> it[1] }, + [], + false, + 'A' + ) ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) } @@ -168,7 +175,7 @@ workflow RNAFUSION { if(tools.contains("stringtie")) { STRINGTIE_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, + ch_starfusion_bams, BUILD_REFERENCES.out.gtf ) ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) @@ -182,7 +189,10 @@ workflow RNAFUSION { def ch_fusion_list_filtered = Channel.empty() def ch_fusionreport_report = Channel.empty() def ch_fusionreport_csv = Channel.empty() - if(fusions_created && !params.skip_vis) { + if(!params.skip_vis && tools.contains("fusionreport")) { + if (!fusions_created) { + error("Could not find any fusion files. Please generate some with --arriba, --starfusion and/or --fusioncatcher") + } FUSIONREPORT_WORKFLOW ( ch_reads, BUILD_REFERENCES.out.fusionreport_ref, @@ -201,31 +211,34 @@ workflow RNAFUSION { ch_fusion_list_filtered = ch_fusion_list ch_fusionreport_csv = null ch_fusionreport_report = null - } else { - error("Could not find any valid fusions for fusioninspector input. Please provide some via --fusioninspector_fusions or generate them with --arriba, --starfusion and/or --fusioncatcher with --skip_vis disabled") + } else if(tools.contains("fusioninspector")) { + error("Could not find any valid fusions for fusioninspector input. Please provide some via --fusioninspector_fusions or generate them with --arriba, --starfusion and/or --fusioncatcher with --skip_vis disabled and --fusionreport enabled") } // // SUBWORKFLOW: Run FusionInspector // - FUSIONINSPECTOR_WORKFLOW ( - ch_reads, - ch_fusion_list, - ch_fusion_list_filtered, - ch_fusionreport_report, - ch_fusionreport_csv, - ch_starfusion_bams, - BUILD_REFERENCES.out.gtf, - BUILD_REFERENCES.out.arriba_ref_protein_domains, - BUILD_REFERENCES.out.arriba_ref_cytobands, - BUILD_REFERENCES.out.hgnc_ref, - BUILD_REFERENCES.out.hgnc_date, - params.skip_vis, - params.skip_vcf - ) - ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) - ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) + if (tools.contains("fusioninspector")) { + FUSIONINSPECTOR_WORKFLOW ( + ch_reads, + ch_fusion_list, + ch_fusion_list_filtered, + ch_fusionreport_report, + ch_fusionreport_csv, + ch_starfusion_bams, + BUILD_REFERENCES.out.gtf, + BUILD_REFERENCES.out.arriba_ref_protein_domains, + BUILD_REFERENCES.out.arriba_ref_cytobands, + BUILD_REFERENCES.out.hgnc_ref, + BUILD_REFERENCES.out.hgnc_date, + BUILD_REFERENCES.out.starfusion_ref, + params.skip_vis, + params.skip_vcf + ) + ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) + } // // SUBWORKFLOW: Run QC @@ -233,7 +246,7 @@ workflow RNAFUSION { if(!params.skip_qc) { QC_WORKFLOW ( - STARFUSION_WORKFLOW.out.ch_bam_sorted, + ch_starfusion_bams, BUILD_REFERENCES.out.refflat, BUILD_REFERENCES.out.fasta, BUILD_REFERENCES.out.fai, From bf316adfaf20b23543e3a6381ace9ad699acaab7 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 11:48:15 +0200 Subject: [PATCH 379/887] small tweaks on inputs --- subworkflows/local/build_references.nf | 16 ++++----- .../local/fusioninspector_workflow.nf | 7 +++- subworkflows/local/stringtie_workflow.nf | 34 ------------------- subworkflows/local/stringtie_workflow/main.nf | 7 ++-- workflows/rnafusion.nf | 2 +- 5 files changed, 20 insertions(+), 46 deletions(-) delete mode 100644 subworkflows/local/stringtie_workflow.nf diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 228dc58e0..ccccc547e 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -104,21 +104,21 @@ workflow BUILD_REFERENCES { def ch_salmon_index = Channel.empty() if (tools.contains("salmon")) { - if (!exists_not_empty(params.salmon_index) || !exists_not_empty(params.salmon_index_stub_check)){ // add condition for qc + if (!exists_not_empty(params.salmon_index)){ // add condition for qc GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(GFFREAD.out.versions) SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) ch_salmon_index = SALMON_INDEX.out.index } else { - ch_salmon_index = Channel.fromPath({params.salmon_index}) + ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.name], it] } } } def ch_starindex_ref = Channel.empty() def star_index_tools = tools.intersect(["starindex", "starfusion", "arriba", "ctatsplicing", "stringtie"]) if (star_index_tools) { - if (!exists_not_empty(params.starindex_ref) || !exists_not_empty(params.starindex_ref_stub_check)) { + if (!exists_not_empty(params.starindex_ref)) { STAR_GENOMEGENERATE(ch_fasta, ch_gtf) ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions) ch_starindex_ref = STAR_GENOMEGENERATE.out.index @@ -150,20 +150,20 @@ workflow BUILD_REFERENCES { def ch_fusioncatcher_ref = Channel.empty() if (tools.contains("fusioncatcher")) { - if (!exists_not_empty(params.fusioncatcher_ref) || !exists_not_empty(params.fusioncatcher_ref_stub_check)) { + if (!exists_not_empty(params.fusioncatcher_ref)) { FUSIONCATCHER_BUILD(params.genome_gencode_version) ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference } else { - ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref) + ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { it -> [[id:it.name], it] } } } def ch_starfusion_ref = Channel.empty() def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing", "fusioninspector", "stringtie"]) if (starfusion_tools) { - if (!exists_not_empty(params.starfusion_ref) || !exists_not_empty(params.starfusion_ref_stub_check)) { + if (!exists_not_empty(params.starfusion_ref)) { STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) if (tools.contains("ctatsplicing")) { @@ -178,13 +178,13 @@ workflow BUILD_REFERENCES { } } else { - ch_starfusion_ref = Channel.fromPath(params.starfusion_ref) + ch_starfusion_ref = Channel.fromPath(params.starfusion_ref).map { it -> [[id:it.name], it] } } } def ch_fusionreport_ref = Channel.empty() if (tools.contains("fusionreport")) { - if (!exists_not_empty(params.fusionreport_ref) || !exists_not_empty(params.fusionreport_ref_stub_check)) { + if (!exists_not_empty(params.fusionreport_ref)) { if (!params.no_cosmic && (!params.cosmic_username || !params.cosmic_passwd)) { error('COSMIC username and/or password missing, this is needed to download the fusionreport reference') } diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow.nf index 56fd67321..754be50cc 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow.nf @@ -54,7 +54,12 @@ workflow FUSIONINSPECTOR_WORKFLOW { if (!skip_vis) { ch_bam_sorted_indexed_fusions = bam_sorted_indexed.join(FUSIONINSPECTOR.out.tsv) - ARRIBA_VISUALISATION(ch_bam_sorted_indexed_fusions, ch_gtf, ch_arriba_ref_protein_domains, ch_arriba_ref_cytobands) + ARRIBA_VISUALISATION( + ch_bam_sorted_indexed_fusions, + ch_gtf, + ch_arriba_ref_protein_domains.map { it -> [[id:it.name], it]}, + ch_arriba_ref_cytobands.map { it -> [[id:it.name], it]} + ) ch_versions = ch_versions.mix(ARRIBA_VISUALISATION.out.versions) ch_arriba_visualisation = ARRIBA_VISUALISATION.out.pdf } diff --git a/subworkflows/local/stringtie_workflow.nf b/subworkflows/local/stringtie_workflow.nf deleted file mode 100644 index a9e05f304..000000000 --- a/subworkflows/local/stringtie_workflow.nf +++ /dev/null @@ -1,34 +0,0 @@ -include { STRINGTIE_STRINGTIE } from '../../modules/nf-core/stringtie/stringtie/main' -include { STRINGTIE_MERGE } from '../../modules/nf-core/stringtie/merge/main' - - -workflow STRINGTIE_WORKFLOW { - take: - bam_sorted - ch_gtf - - main: - ch_versions = Channel.empty() - ch_stringtie_gtf = Channel.empty() - - STRINGTIE_STRINGTIE(bam_sorted, ch_gtf.map { _meta, gtf -> [ gtf ]}) - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - STRINGTIE_STRINGTIE - .out - .transcript_gtf - .map { it -> it[1] } - .set { stringtie_gtf } - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - - STRINGTIE_MERGE (stringtie_gtf, ch_gtf.map { _meta, gtf -> [ gtf ]}) - ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) - ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf - - emit: - stringtie_gtf = ch_stringtie_gtf.ifEmpty(null) - versions = ch_versions - - } - diff --git a/subworkflows/local/stringtie_workflow/main.nf b/subworkflows/local/stringtie_workflow/main.nf index 3b27688c7..d9e65fd11 100644 --- a/subworkflows/local/stringtie_workflow/main.nf +++ b/subworkflows/local/stringtie_workflow/main.nf @@ -11,7 +11,10 @@ workflow STRINGTIE_WORKFLOW { ch_versions = Channel.empty() ch_stringtie_gtf = Channel.empty() - STRINGTIE_STRINGTIE(bam_sorted, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + STRINGTIE_STRINGTIE( + bam_sorted.map { meta, bam, _bai -> [ meta, bam ]}, + ch_chrgtf.map { _meta, gtf -> [ gtf ]} + ) ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) STRINGTIE_STRINGTIE @@ -22,7 +25,7 @@ workflow STRINGTIE_WORKFLOW { ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - STRINGTIE_MERGE (stringtie_gtf, ch_chrgtf.map { meta, gtf -> [ gtf ]}) + STRINGTIE_MERGE (stringtie_gtf, ch_chrgtf.map { _meta, gtf -> [ gtf ]}) ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 857de11e4..f8bbde603 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -88,7 +88,7 @@ workflow RNAFUSION { if(tools.contains("salmon")) { SALMON_QUANT( - ch_reads.view(), + ch_reads, BUILD_REFERENCES.out.salmon_index, BUILD_REFERENCES.out.gtf.map{ it -> it[1] }, [], From 8875f8cc7a6d96b48861fa460634eb457377833f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 11:56:18 +0200 Subject: [PATCH 380/887] update changelog --- CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 687ec63d3..98185d06a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,7 +31,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `CTATSPLICING_PREPGENOMELIB` to update the starfusion genome library directory with a cancer splicing index. [#610](https://github.com/nf-core/rnafusion/pull/610) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) - Add nf-test to local module: `ARRIBA_VISUALISATION`. [#625](https://github.com/nf-core/rnafusion/pull/625) -- Added a new parameter `salmon` to enable the Salmon tool (default is `false`) [#]() +- Added a new parameter `salmon` to enable the Salmon tool (default is `false`) [#645](https://github.com/nf-core/rnafusion/pull/645) +- Added a new parameter `fusioninspector` to enable the Fusioninspector tool (default is `false`) [#645](https://github.com/nf-core/rnafusion/pull/645) ### Changed @@ -52,8 +53,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) - Update htslib and samtools version in `star/align` to 1.21 [#634](https://github.com/nf-core/rnafusion/pull/634) - `--run_fusioncatcher` back to `fusioncatcher` [#641](https://github.com/nf-core/rnafusion/pull/641) -- Removed the `--fusioninspector_only` parameter, this is now the default behaviour of the pipeline [#]() -- Renamed `--fastp_trim` to `--fastp` to be more uniform across with other tool parameters [#]() +- Removed the `--fusioninspector_only` parameter, this is now the case when only `--fusionreport` is used together with `--skip_qc`, `--skip_vis` and `--skip_vcf` [#645](https://github.com/nf-core/rnafusion/pull/645) +- Renamed `--fastp_trim` to `--fastp` to be more uniform across with other tool parameters [#645](https://github.com/nf-core/rnafusion/pull/645) ### Fixed From b7f86364b44f1426048d3a472842bf5db9f0108f Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 1 Apr 2025 11:52:08 +0000 Subject: [PATCH 381/887] fix some tests --- tests/test_build.nf.test | 4 +++- tests/test_cosmic.nf.test | 2 +- tests/test_stub.nf.test | 10 +++++----- workflows/rnafusion.nf | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test index f6665777b..cd1977fd9 100644 --- a/tests/test_build.nf.test +++ b/tests/test_build.nf.test @@ -11,7 +11,9 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" + outdir = "$outputDir" + salmon = true + fusioninspector = true } } diff --git a/tests/test_cosmic.nf.test b/tests/test_cosmic.nf.test index b4f2a3639..03370734a 100644 --- a/tests/test_cosmic.nf.test +++ b/tests/test_cosmic.nf.test @@ -12,7 +12,7 @@ nextflow_pipeline { when { params { outdir = "$outputDir" - fastp_trim = true + fastp = true } } diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index 065723e2f..1dfd79f97 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -12,9 +12,9 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" - fastp_trim = true - fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + outdir = "$outputDir" + fastp = true + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' } } @@ -44,8 +44,8 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" - fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + outdir = "$outputDir" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' } } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index f8bbde603..c147b4ff4 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -275,7 +275,7 @@ workflow RNAFUSION { // def ch_multiqc_output = Channel.empty() - if(!params.skip_qc) { + if(!params.skip_qc && !params.references_only) { ch_multiqc_config = Channel.fromPath( "$projectDir/assets/multiqc_config.yml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? From c4484465ea58126cf7871215e322e0048b9451eb Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 1 Apr 2025 12:38:28 +0000 Subject: [PATCH 382/887] fix stub test snap --- tests/test_stub.nf.test.snap | 277 ++++++++++++++++++++++++++++++++++- 1 file changed, 273 insertions(+), 4 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 206bc371e..076eed9df 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,7 +1,7 @@ { "stub test no fastp trim": { "content": [ - 32, + 36, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -9,21 +9,33 @@ "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, + "ARRIBA_VISUALISATION": { + "arriba": "2.4.0" + }, "CTATSPLICING_PREPGENOMELIB": { "ctat-splicing": "0.0.2" }, "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" }, + "FASTP": { + "fastp": "0.23.4" + }, "FASTQC": { "fastqc": "0.12.1" }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, "FUSIONCATCHER_BUILD": { "fusioncatcher": "1.33" }, "FUSIONCATCHER_DETECT": { "fusioncatcher": "1.33" }, + "FUSIONINSPECTOR": { + "STAR-Fusion": null + }, "FUSIONREPORT": { "fusion_report": "2.1.5" }, @@ -108,6 +120,8 @@ "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", + "arriba_visualisation", + "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "ctatsplicing", "ctatsplicing/arriba", "ctatsplicing/arriba/test.cancer.introns", @@ -133,15 +147,143 @@ "ctatsplicing/starfusion/test.igv.tracks", "ctatsplicing/starfusion/test.introns", "ctatsplicing/starfusion/test.introns.for_IGV.bed", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", "fusioncatcher/human_v46", "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "fusioncatcher/test.fusioncatcher.fusion-genes.txt", "fusioncatcher/test.fusioncatcher.log", "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioninspector", + "fusioninspector/IGV_inputs", + "fusioninspector/IGV_inputs/TrinityFusion.bed", + "fusioninspector/IGV_inputs/cytoBand.txt", + "fusioninspector/IGV_inputs/test.ROI.bed", + "fusioninspector/IGV_inputs/test.bed", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", + "fusioninspector/IGV_inputs/test.consolidated.bam", + "fusioninspector/IGV_inputs/test.consolidated.bam.bai", + "fusioninspector/IGV_inputs/test.fa", + "fusioninspector/IGV_inputs/test.fa.fai", + "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", + "fusioninspector/IGV_inputs/test.gtf", + "fusioninspector/IGV_inputs/test.igv.Pfam.bed", + "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", + "fusioninspector/IGV_inputs/test.junction_reads.bam", + "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", + "fusioninspector/IGV_inputs/test.spanning_reads.bam", + "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", + "fusioninspector/IGV_inputs/tracks.json", + "fusioninspector/chckpts_dir", + "fusioninspector/chckpts_dir/EM_adj_counts.ok", + "fusioninspector/chckpts_dir/add_FFPM.ok", + "fusioninspector/chckpts_dir/add_splice_info.ok", + "fusioninspector/chckpts_dir/append_microH_info.ok", + "fusioninspector/chckpts_dir/blast_filter.ok", + "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", + "fusioninspector/chckpts_dir/cp_consol_bam.ok", + "fusioninspector/chckpts_dir/cp_contigs_file_workdir", + "fusioninspector/chckpts_dir/cp_final.ok", + "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", + "fusioninspector/chckpts_dir/cp_tracks_json.ok", + "fusioninspector/chckpts_dir/create_fi_igvjs.ok", + "fusioninspector/chckpts_dir/cytoband.ok", + "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", + "fusioninspector/chckpts_dir/final.abridged.ok", + "fusioninspector/chckpts_dir/fusion_annotator.ok", + "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", + "fusioninspector/chckpts_dir/fusion_contigs.ok", + "fusioninspector/chckpts_dir/fusion_reports_html.ok", + "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", + "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", + "fusioninspector/chckpts_dir/index_consol_bam.ok", + "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", + "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", + "fusioninspector/chckpts_dir/mark_dup_reads.ok", + "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", + "fusioninspector/chckpts_dir/merged_contig_fai.ok", + "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", + "fusioninspector/chckpts_dir/microH.dat.ok", + "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", + "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", + "fusioninspector/chckpts_dir/prep_spanning_reads.ok", + "fusioninspector/chckpts_dir/run_STAR.ok", + "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", + "fusioninspector/chckpts_dir/span_reads_acc.ok", + "fusioninspector/chckpts_dir/test.bed.bedsort.ok", + "fusioninspector/chckpts_dir/test.bed.bgzip.ok", + "fusioninspector/chckpts_dir/test.bed.tabix.ok", + "fusioninspector/fi_workdir", + "fusioninspector/fi_workdir/Log.final.out", + "fusioninspector/fi_workdir/Log.out", + "fusioninspector/fi_workdir/Log.progress.out", + "fusioninspector/fi_workdir/SJ.out.tab", + "fusioninspector/fi_workdir/_STARgenome", + "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", + "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", + "fusioninspector/fi_workdir/microH.dat", + "fusioninspector/fi_workdir/pipeliner.456.cmds", + "fusioninspector/fi_workdir/star_align.ok", + "fusioninspector/fi_workdir/test.fa", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", + "fusioninspector/fi_workdir/test.gtf", + "fusioninspector/fi_workdir/test.igv.Pfam.gff3", + "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", + "fusioninspector/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test.FusionInspector.fusions.tsv", + "fusioninspector/test.FusionInspector.log", + "fusioninspector/test.fusion_inspector_web.html", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -366,11 +508,11 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-19T09:52:40.993862676" + "timestamp": "2025-04-01T12:36:03.444372944" }, "stub test with fastp trim": { "content": [ - 34, + 36, { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -378,6 +520,9 @@ "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, + "ARRIBA_VISUALISATION": { + "arriba": "2.4.0" + }, "CTATSPLICING_PREPGENOMELIB": { "ctat-splicing": "0.0.2" }, @@ -399,6 +544,9 @@ "FUSIONCATCHER_DETECT": { "fusioncatcher": "1.33" }, + "FUSIONINSPECTOR": { + "STAR-Fusion": null + }, "FUSIONREPORT": { "fusion_report": "2.1.5" }, @@ -483,6 +631,8 @@ "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", + "arriba_visualisation", + "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "ctatsplicing", "ctatsplicing/arriba", "ctatsplicing/arriba/test.cancer.introns", @@ -526,6 +676,125 @@ "fusioncatcher/test.fusioncatcher.fusion-genes.txt", "fusioncatcher/test.fusioncatcher.log", "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioninspector", + "fusioninspector/IGV_inputs", + "fusioninspector/IGV_inputs/TrinityFusion.bed", + "fusioninspector/IGV_inputs/cytoBand.txt", + "fusioninspector/IGV_inputs/test.ROI.bed", + "fusioninspector/IGV_inputs/test.bed", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", + "fusioninspector/IGV_inputs/test.consolidated.bam", + "fusioninspector/IGV_inputs/test.consolidated.bam.bai", + "fusioninspector/IGV_inputs/test.fa", + "fusioninspector/IGV_inputs/test.fa.fai", + "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", + "fusioninspector/IGV_inputs/test.gtf", + "fusioninspector/IGV_inputs/test.igv.Pfam.bed", + "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", + "fusioninspector/IGV_inputs/test.junction_reads.bam", + "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", + "fusioninspector/IGV_inputs/test.spanning_reads.bam", + "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", + "fusioninspector/IGV_inputs/tracks.json", + "fusioninspector/chckpts_dir", + "fusioninspector/chckpts_dir/EM_adj_counts.ok", + "fusioninspector/chckpts_dir/add_FFPM.ok", + "fusioninspector/chckpts_dir/add_splice_info.ok", + "fusioninspector/chckpts_dir/append_microH_info.ok", + "fusioninspector/chckpts_dir/blast_filter.ok", + "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", + "fusioninspector/chckpts_dir/cp_consol_bam.ok", + "fusioninspector/chckpts_dir/cp_contigs_file_workdir", + "fusioninspector/chckpts_dir/cp_final.ok", + "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", + "fusioninspector/chckpts_dir/cp_tracks_json.ok", + "fusioninspector/chckpts_dir/create_fi_igvjs.ok", + "fusioninspector/chckpts_dir/cytoband.ok", + "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", + "fusioninspector/chckpts_dir/final.abridged.ok", + "fusioninspector/chckpts_dir/fusion_annotator.ok", + "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", + "fusioninspector/chckpts_dir/fusion_contigs.ok", + "fusioninspector/chckpts_dir/fusion_reports_html.ok", + "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", + "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", + "fusioninspector/chckpts_dir/index_consol_bam.ok", + "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", + "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", + "fusioninspector/chckpts_dir/mark_dup_reads.ok", + "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", + "fusioninspector/chckpts_dir/merged_contig_fai.ok", + "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", + "fusioninspector/chckpts_dir/microH.dat.ok", + "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", + "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", + "fusioninspector/chckpts_dir/prep_spanning_reads.ok", + "fusioninspector/chckpts_dir/run_STAR.ok", + "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", + "fusioninspector/chckpts_dir/span_reads_acc.ok", + "fusioninspector/chckpts_dir/test.bed.bedsort.ok", + "fusioninspector/chckpts_dir/test.bed.bgzip.ok", + "fusioninspector/chckpts_dir/test.bed.tabix.ok", + "fusioninspector/fi_workdir", + "fusioninspector/fi_workdir/Log.final.out", + "fusioninspector/fi_workdir/Log.out", + "fusioninspector/fi_workdir/Log.progress.out", + "fusioninspector/fi_workdir/SJ.out.tab", + "fusioninspector/fi_workdir/_STARgenome", + "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", + "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", + "fusioninspector/fi_workdir/microH.dat", + "fusioninspector/fi_workdir/pipeliner.456.cmds", + "fusioninspector/fi_workdir/star_align.ok", + "fusioninspector/fi_workdir/test.fa", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", + "fusioninspector/fi_workdir/test.gtf", + "fusioninspector/fi_workdir/test.igv.Pfam.gff3", + "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", + "fusioninspector/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test.FusionInspector.fusions.tsv", + "fusioninspector/test.FusionInspector.log", + "fusioninspector/test.fusion_inspector_web.html", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -750,6 +1019,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-19T09:51:49.095272949" + "timestamp": "2025-04-01T12:34:41.601673161" } } \ No newline at end of file From 59275b72e1906dec8dbc0a447721d556f1a0a097 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 15:37:24 +0200 Subject: [PATCH 383/887] remove missed stub check params --- nextflow.config | 7 ------- nextflow_schema.json | 30 ------------------------------ 2 files changed, 37 deletions(-) diff --git a/nextflow.config b/nextflow.config index b82faf984..140ec507f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -93,13 +93,6 @@ params { fusionreport_ref = "${params.genomes_base}/fusion_report_db" ctatsplicing_cancer_introns = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz" - // Internal file presence checks - salmon_index_stub_check = "${params.genomes_base}/salmon/salmon/complete_ref_lens.bin" - starindex_ref_stub_check = "${params.genomes_base}/star/star/Genome" - fusionreport_ref_stub_check = "${params.genomes_base}/fusion_report_db/mitelman.db" - fusioncatcher_ref_stub_check = "${params.genomes_base}/fusioncatcher/human_v${params.genome_gencode_version}/ensembl_fully_overlapping_genes.txt" - starfusion_ref_stub_check = "${params.genomes_base}/starfusion/Pfam-A.hmm" - // Path to fusion outputs arriba_fusions = null starfusion_fusions = null diff --git a/nextflow_schema.json b/nextflow_schema.json index acd1758c9..c22cfe5b4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -180,12 +180,6 @@ "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, - "fusioncatcher_ref_stub_check": { - "type": "string", - "hidden": true, - "fa_icon": "far fa-file-code", - "description": "Path to file in fusioncatcher references" - }, "fusioninspector": { "type": "boolean", "fa_icon": "far fa-file-code", @@ -217,12 +211,6 @@ "fa_icon": "far fa-file-code", "description": "Path to fusionreport references" }, - "fusionreport_ref_stub_check": { - "type": "string", - "hidden": true, - "fa_icon": "far fa-file-code", - "description": "Path to file in fusionreport references" - }, "hgnc_ref": { "type": "string", "format": "file-path", @@ -253,12 +241,6 @@ "fa_icon": "far fa-file-code", "description": "Path to salmon index" }, - "salmon_index_stub_check": { - "type": "string", - "hidden": true, - "fa_icon": "far fa-file-code", - "description": "Path to file in salmon index" - }, "starfusion": { "type": "boolean", "fa_icon": "far fa-file-code", @@ -278,12 +260,6 @@ "fa_icon": "far fa-file-code", "description": "Path to starfusion references" }, - "starfusion_ref_stub_check": { - "type": "string", - "hidden": true, - "fa_icon": "far fa-file-code", - "description": "Path to file in starfusion references" - }, "ctatsplicing_cancer_introns": { "type": "string", "format": "file-path", @@ -303,12 +279,6 @@ "fa_icon": "far fa-file-code", "description": "Path to starindex references" }, - "starindex_ref_stub_check": { - "type": "string", - "hidden": true, - "fa_icon": "far fa-file-code", - "description": "Path to file in starindex references" - }, "stringtie": { "type": "boolean", "fa_icon": "far fa-file-code", From a756c4be680e5d41f50846362d3119c8913c9b4a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 16:09:50 +0200 Subject: [PATCH 384/887] remove tool specific params and consolidate them in --tools --- conf/modules.config | 1 - main.nf | 27 ++++---- nextflow.config | 12 +--- nextflow_schema.json | 64 ++----------------- subworkflows/local/build_references.nf | 2 +- .../utils_nfcore_rnafusion_pipeline/main.nf | 11 +--- tests/test_build.nf.test | 3 +- tests/test_cosmic.nf.test | 2 +- tests/test_stub.nf.test | 2 +- 9 files changed, 23 insertions(+), 101 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d69aa7577..54489acbb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -352,7 +352,6 @@ process { memory = { 100.GB * task.attempt } time = { 2.d * task.attempt } publishDir = [ - enabled: !params.ctatsplicing && !params.all, path: { "${params.genomes_base}/starfusion" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, diff --git a/main.nf b/main.nf index 35d5817a7..3161d45a2 100644 --- a/main.nf +++ b/main.nf @@ -39,22 +39,19 @@ workflow { params.outdir, ) - // A list of all tools available in the pipeline. Add tools here when a new tool has been added - def all_tools = [ - "arriba", - "ctatsplicing", - "fusioncatcher", - "starindex", - "starfusion", - "stringtie", - "fusionreport", - "fastp", - "salmon", - "fusioninspector" - ] + def tools = params.tools.tokenize(",") + if (tools.contains("all")) { + def json = new groovy.json.JsonSlurper().parseText(file("${projectDir}/nextflow_schema.json").text) + def pattern = json.get('$defs')?.get('input_output_options')?.get('properties')?.get('tools')?.get('pattern') + if (!pattern) { + error("Could not fetch the allowed tools from the JSON schema, please check the code. If you see this as a pipeline user, please contact the developers instead.") + } + tools = pattern.replace('^((', "").replace(')?,?)*(? - params.get(tool) + def profiles = workflow.profile + if ((profiles.contains("conda") || profiles.contains("mamba")) && (tools.contains("ctatsplicing"))) { + error("Conda or Mamba runs are not supported when ctatsplicing is in `--tools`") } // diff --git a/nextflow.config b/nextflow.config index 140ec507f..2fc31d3a9 100644 --- a/nextflow.config +++ b/nextflow.config @@ -52,17 +52,7 @@ params { fusioninspector_limitSjdbInsertNsj = 1000000 // Enable tools - all = false - arriba = false - ctatsplicing = false - fusioncatcher = false - starindex = false - starfusion = false - stringtie = false - fusionreport = false - fusioninspector = false - fastp = false - salmon = false + tools = null // Skip steps skip_qc = false diff --git a/nextflow_schema.json b/nextflow_schema.json index c22cfe5b4..ed9760755 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -36,7 +36,7 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": ["genomes_base", "outdir"], + "required": ["genomes_base", "outdir", "tools"], "properties": { "input": { "type": "string", @@ -86,10 +86,11 @@ "fa_icon": "far fa-file-code", "description": "gencode version" }, - "starfusion_build": { - "type": "boolean", + "tools": { + "type": "string", + "description": "Comma-delimited list of tools to run", "fa_icon": "far fa-file-code", - "description": "If set, starfusion references are built from scratch instead of downloaded (default)" + "pattern": "^((arriba|ctatsplicing|fusioncatcher|starfusion|stringtie|fusionreport|fastp|salmon|fusioninspector|all)?,?)*(? Date: Tue, 1 Apr 2025 16:15:00 +0200 Subject: [PATCH 385/887] update changelog --- CHANGELOG.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98185d06a..750826263 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,8 +31,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `CTATSPLICING_PREPGENOMELIB` to update the starfusion genome library directory with a cancer splicing index. [#610](https://github.com/nf-core/rnafusion/pull/610) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) - Add nf-test to local module: `ARRIBA_VISUALISATION`. [#625](https://github.com/nf-core/rnafusion/pull/625) -- Added a new parameter `salmon` to enable the Salmon tool (default is `false`) [#645](https://github.com/nf-core/rnafusion/pull/645) -- Added a new parameter `fusioninspector` to enable the Fusioninspector tool (default is `false`) [#645](https://github.com/nf-core/rnafusion/pull/645) ### Changed @@ -53,8 +51,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated documentation for fusion-report score calculation to reflect 80/20 weight distribution between tool detection and database hits [#620](https://github.com/nf-core/rnafusion/pull/620) - Update htslib and samtools version in `star/align` to 1.21 [#634](https://github.com/nf-core/rnafusion/pull/634) - `--run_fusioncatcher` back to `fusioncatcher` [#641](https://github.com/nf-core/rnafusion/pull/641) -- Removed the `--fusioninspector_only` parameter, this is now the case when only `--fusionreport` is used together with `--skip_qc`, `--skip_vis` and `--skip_vcf` [#645](https://github.com/nf-core/rnafusion/pull/645) -- Renamed `--fastp_trim` to `--fastp` to be more uniform across with other tool parameters [#645](https://github.com/nf-core/rnafusion/pull/645) +- Removed `--fastp_trim`, `--arriba`, `--ctatsplicing`, `--fusioncatcher`, `--starfusion`, `--stringtie` and `--all` and replaced these parameters with the `--tools` parameter. This parameter takes a comma-delimited list of tool names to run for the pipeline and is a required parameter. Following tools are supported by this parameter [#645](https://github.com/nf-core/rnafusion/pull/645): + - `arriba` + - `ctatsplicing` + - `fusioncatcher` + - `starfusion` + - `stringtie` + - `fusionreport` + - `fastp` + - `salmon` + - `fusioninspector` + - `all` => This will automatically run all of the above tools ### Fixed From 38018cd38bf587ecc2b5eb48d3abe15026e8f492 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 16:19:13 +0200 Subject: [PATCH 386/887] fix nf-core lint --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 2fc31d3a9..1e7e33e61 100644 --- a/nextflow.config +++ b/nextflow.config @@ -29,7 +29,6 @@ params { genomes_base = "${params.outdir}/references" genome_gencode_version = 46 read_length = 100 - starfusion_build = true genomes = [:] fusion_annot_lib = "https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz" // path to dat.gz CTAT genome lib // TODO: Update to latest with s3 link when available species = "human" From 4f2ec253a67066c552d922d179589b4aac50e1e2 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 16:27:37 +0200 Subject: [PATCH 387/887] fix tests --- conf/test.config | 2 +- tests/test_stub.nf.test | 34 +-- tests/test_stub.nf.test.snap | 515 +---------------------------------- 3 files changed, 4 insertions(+), 547 deletions(-) diff --git a/conf/test.config b/conf/test.config index ba937e857..e29dc54af 100644 --- a/conf/test.config +++ b/conf/test.config @@ -16,7 +16,7 @@ params { // Input data input = params.pipelines_testdata_base_path +'rnafusion/testdata/human/samplesheet_valid.csv' - all = true + tools = "all" no_cosmic = true } diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index 2311d989e..8b5a0f569 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -8,39 +8,7 @@ nextflow_pipeline { tag "pipeline_rnafusion" tag "test_stub" - test("stub test with fastp trim") { - - when { - params { - outdir = "$outputDir" - tools = "fastp" - fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' - } - } - - then { - // stable_name: All files + folders in ${params.outdir}/ with a stable name - // Ignore files with timestamps in their names - def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - // stable_path: All files in ${params.outdir}/ with stable content - // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed - assertAll( - { assert workflow.success}, - { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - // stable_path // TODO uncomment once -stub is removed - ).match() } - ) - } - } - - test("stub test no fastp trim") { + test("stub test all") { when { params { diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 076eed9df..33c923597 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,5 +1,5 @@ { - "stub test no fastp trim": { + "stub test all": { "content": [ 36, { @@ -508,517 +508,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-01T12:36:03.444372944" - }, - "stub test with fastp trim": { - "content": [ - 36, - { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, - "ARRIBA_VISUALISATION": { - "arriba": "2.4.0" - }, - "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" - }, - "CTATSPLICING_STARTOCANCERINTRONS": { - "ctat-splicing": "0.0.2" - }, - "FASTP": { - "fastp": "0.23.4" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FASTQC_FOR_FASTP": { - "fastqc": "0.12.1" - }, - "FUSIONCATCHER_BUILD": { - "fusioncatcher": "1.33" - }, - "FUSIONCATCHER_DETECT": { - "fusioncatcher": "1.33" - }, - "FUSIONINSPECTOR": { - "STAR-Fusion": null - }, - "FUSIONREPORT": { - "fusion_report": "2.1.5" - }, - "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" - }, - "GENCODE_DOWNLOAD": { - "wget": null - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GFFREAD": { - "gffread": "0.12.7" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "HGNC_DOWNLOAD": { - "wget": null - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SALMON_INDEX": { - "salmon": "1.10.3" - }, - "SALMON_QUANT": { - "salmon": "1.10.3" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX_FOR_STARFUSION": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.14.0" - }, - "STARFUSION_BUILD": { - "STAR-Fusion": "1.14.0" - }, - "STAR_FOR_ARRIBA": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_FOR_STARFUSION": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.2, - "gawk": "5.1.0" - }, - "STRINGTIE_MERGE": { - "stringtie": "2.2.1" - }, - "STRINGTIE_STRINGTIE": { - "stringtie": "2.2.3" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, - [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", - "ctatsplicing", - "ctatsplicing/arriba", - "ctatsplicing/arriba/test.cancer.introns", - "ctatsplicing/arriba/test.cancer.introns.prelim", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/arriba/test.chckpts", - "ctatsplicing/arriba/test.ctat-splicing.igv.html", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/arriba/test.igv.tracks", - "ctatsplicing/arriba/test.introns", - "ctatsplicing/arriba/test.introns.for_IGV.bed", - "ctatsplicing/starfusion", - "ctatsplicing/starfusion/test.cancer.introns", - "ctatsplicing/starfusion/test.cancer.introns.prelim", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/starfusion/test.chckpts", - "ctatsplicing/starfusion/test.ctat-splicing.igv.html", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/starfusion/test.igv.tracks", - "ctatsplicing/starfusion/test.introns", - "ctatsplicing/starfusion/test.introns.for_IGV.bed", - "fastp", - "fastp/test.fastp.html", - "fastp/test.fastp.json", - "fastp/test.fastp.log", - "fastp/test_1.fastp.fastq.gz", - "fastp/test_2.fastp.fastq.gz", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", - "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", - "fusioninspector", - "fusioninspector/IGV_inputs", - "fusioninspector/IGV_inputs/TrinityFusion.bed", - "fusioninspector/IGV_inputs/cytoBand.txt", - "fusioninspector/IGV_inputs/test.ROI.bed", - "fusioninspector/IGV_inputs/test.bed", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/IGV_inputs/test.consolidated.bam", - "fusioninspector/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/IGV_inputs/test.fa", - "fusioninspector/IGV_inputs/test.fa.fai", - "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/IGV_inputs/test.gtf", - "fusioninspector/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/IGV_inputs/test.junction_reads.bam", - "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/IGV_inputs/tracks.json", - "fusioninspector/chckpts_dir", - "fusioninspector/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/chckpts_dir/add_FFPM.ok", - "fusioninspector/chckpts_dir/add_splice_info.ok", - "fusioninspector/chckpts_dir/append_microH_info.ok", - "fusioninspector/chckpts_dir/blast_filter.ok", - "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/chckpts_dir/cp_final.ok", - "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/chckpts_dir/cytoband.ok", - "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/chckpts_dir/final.abridged.ok", - "fusioninspector/chckpts_dir/fusion_annotator.ok", - "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/chckpts_dir/fusion_contigs.ok", - "fusioninspector/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/chckpts_dir/index_consol_bam.ok", - "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/chckpts_dir/microH.dat.ok", - "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/chckpts_dir/run_STAR.ok", - "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/chckpts_dir/span_reads_acc.ok", - "fusioninspector/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/chckpts_dir/test.bed.tabix.ok", - "fusioninspector/fi_workdir", - "fusioninspector/fi_workdir/Log.final.out", - "fusioninspector/fi_workdir/Log.out", - "fusioninspector/fi_workdir/Log.progress.out", - "fusioninspector/fi_workdir/SJ.out.tab", - "fusioninspector/fi_workdir/_STARgenome", - "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/fi_workdir/microH.dat", - "fusioninspector/fi_workdir/pipeliner.456.cmds", - "fusioninspector/fi_workdir/star_align.ok", - "fusioninspector/fi_workdir/test.fa", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", - "fusioninspector/fi_workdir/test.gtf", - "fusioninspector/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", - "fusioninspector/test.FusionInspector.fusions.abridged.tsv", - "fusioninspector/test.FusionInspector.fusions.tsv", - "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.fusion_inspector_web.html", - "fusionreport", - "fusionreport/test", - "fusionreport/test/AAA_BBB.html", - "fusionreport/test/test.fusionreport.tsv", - "fusionreport/test/test.fusionreport_filtered.tsv", - "fusionreport/test/test.fusions.csv", - "fusionreport/test/test.fusions.json", - "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/fusion_report_db", - "references/fusion_report_db/DB-timestamp.txt", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/gffread", - "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "references/salmon", - "references/salmon/salmon", - "references/salmon/salmon/complete_ref_lens.bin", - "references/salmon/salmon/ctable.bin", - "references/salmon/salmon/ctg_offsets.bin", - "references/salmon/salmon/duplicate_clusters.tsv", - "references/salmon/salmon/info.json", - "references/salmon/salmon/mphf.bin", - "references/salmon/salmon/pos.bin", - "references/salmon/salmon/pre_indexing.log", - "references/salmon/salmon/rank.bin", - "references/salmon/salmon/refAccumLengths.bin", - "references/salmon/salmon/ref_indexing.log", - "references/salmon/salmon/reflengths.bin", - "references/salmon/salmon/refseq.bin", - "references/salmon/salmon/seq.bin", - "references/salmon/salmon/versionInfo.json", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", - "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", - "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", - "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "salmon", - "salmon/test", - "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv", - "stringtie", - "stringtie/[:]", - "stringtie/[:]/stringtie.merged.gtf", - "stringtie/test.ballgown", - "stringtie/test.coverage.gtf", - "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" - }, - "timestamp": "2025-04-01T12:34:41.601673161" + "timestamp": "2025-04-01T16:25:22.357112178" } } \ No newline at end of file From d61389eda3bacbd89598eb3d0ae5034611f4f004 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 1 Apr 2025 16:32:48 +0200 Subject: [PATCH 388/887] update test_build config --- conf/test_build.config | 8 +------- tests/test_build.nf.test | 1 - 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/conf/test_build.config b/conf/test_build.config index 971e386ae..511b83657 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -37,16 +37,10 @@ params { references_only = true input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' no_cosmic = true - all = false - arriba = true - fusioncatcher = false - starfusion = true + tools = "arriba,starfusion,fusionreport,salmon,fusioninspector" fasta = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa' gtf = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf' - fusionreport = true - skip_salmon_index = true - starfusion_build = true fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' } diff --git a/tests/test_build.nf.test b/tests/test_build.nf.test index f2ab4ea4a..6fb5cc32a 100644 --- a/tests/test_build.nf.test +++ b/tests/test_build.nf.test @@ -12,7 +12,6 @@ nextflow_pipeline { when { params { outdir = "$outputDir" - tools = "salmon,fusioninspector" } } From 78d37f3f2c83e86364cdde8d729f2795333277c4 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 13:49:48 +0200 Subject: [PATCH 389/887] add tool tests --- nextflow_schema.json | 5 - tests/test_stub.nf.test | 288 ++++++ tests/test_stub.nf.test.snap | 1678 ++++++++++++++++++++++++++++++++++ 3 files changed, 1966 insertions(+), 5 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index ed9760755..1f40b5ad5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -22,11 +22,6 @@ "skip_vis": { "type": "boolean", "description": "Skip visualisation steps" - }, - "skip_salmon_index": { - "type": "boolean", - "description": "Skip salmon index generation step", - "hidden": true } }, "fa_icon": "fas fa-fast-forward" diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index 8b5a0f569..562908322 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -38,4 +38,292 @@ nextflow_pipeline { ) } } + + test("stub test arriba") { + + when { + params { + outdir = "$outputDir" + tools = "arriba" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test ctatsplicing") { + + when { + params { + outdir = "$outputDir" + tools = "ctatsplicing" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fusioncatcher") { + + when { + params { + outdir = "$outputDir" + tools = "fusioncatcher" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test starfusion") { + + when { + params { + outdir = "$outputDir" + tools = "starfusion" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test stringtie") { + + when { + params { + outdir = "$outputDir" + tools = "stringtie" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fusionreport") { + + when { + params { + outdir = "$outputDir" + tools = "fusionreport,arriba,starfusion,fusioncatcher" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fastp") { + + when { + params { + outdir = "$outputDir" + tools = "fastp" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test salmon") { + + when { + params { + outdir = "$outputDir" + tools = "salmon" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fusioninspector") { + + when { + params { + outdir = "$outputDir" + tools = "fusioninspector,arriba,fusionreport" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } } diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 33c923597..d673b42de 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,4 +1,1682 @@ { + "stub test starfusion": { + "content": [ + 16, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_STARFUSION": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:27:31.630497119" + }, + "stub test stringtie": { + "content": [ + 17, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_STARFUSION": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:28:49.653131463" + }, + "stub test arriba": { + "content": [ + 12, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STAR_FOR_ARRIBA": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:24:01.289397616" + }, + "stub test fusioninspector": { + "content": [ + 17, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONINSPECTOR": { + "STAR-Fusion": null + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_ARRIBA": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioninspector", + "fusioninspector/IGV_inputs", + "fusioninspector/IGV_inputs/TrinityFusion.bed", + "fusioninspector/IGV_inputs/cytoBand.txt", + "fusioninspector/IGV_inputs/test.ROI.bed", + "fusioninspector/IGV_inputs/test.bed", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", + "fusioninspector/IGV_inputs/test.consolidated.bam", + "fusioninspector/IGV_inputs/test.consolidated.bam.bai", + "fusioninspector/IGV_inputs/test.fa", + "fusioninspector/IGV_inputs/test.fa.fai", + "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", + "fusioninspector/IGV_inputs/test.gtf", + "fusioninspector/IGV_inputs/test.igv.Pfam.bed", + "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", + "fusioninspector/IGV_inputs/test.junction_reads.bam", + "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", + "fusioninspector/IGV_inputs/test.spanning_reads.bam", + "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", + "fusioninspector/IGV_inputs/tracks.json", + "fusioninspector/chckpts_dir", + "fusioninspector/chckpts_dir/EM_adj_counts.ok", + "fusioninspector/chckpts_dir/add_FFPM.ok", + "fusioninspector/chckpts_dir/add_splice_info.ok", + "fusioninspector/chckpts_dir/append_microH_info.ok", + "fusioninspector/chckpts_dir/blast_filter.ok", + "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", + "fusioninspector/chckpts_dir/cp_consol_bam.ok", + "fusioninspector/chckpts_dir/cp_contigs_file_workdir", + "fusioninspector/chckpts_dir/cp_final.ok", + "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", + "fusioninspector/chckpts_dir/cp_tracks_json.ok", + "fusioninspector/chckpts_dir/create_fi_igvjs.ok", + "fusioninspector/chckpts_dir/cytoband.ok", + "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", + "fusioninspector/chckpts_dir/final.abridged.ok", + "fusioninspector/chckpts_dir/fusion_annotator.ok", + "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", + "fusioninspector/chckpts_dir/fusion_contigs.ok", + "fusioninspector/chckpts_dir/fusion_reports_html.ok", + "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", + "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", + "fusioninspector/chckpts_dir/index_consol_bam.ok", + "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", + "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", + "fusioninspector/chckpts_dir/mark_dup_reads.ok", + "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", + "fusioninspector/chckpts_dir/merged_contig_fai.ok", + "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", + "fusioninspector/chckpts_dir/microH.dat.ok", + "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", + "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", + "fusioninspector/chckpts_dir/prep_spanning_reads.ok", + "fusioninspector/chckpts_dir/run_STAR.ok", + "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", + "fusioninspector/chckpts_dir/span_reads_acc.ok", + "fusioninspector/chckpts_dir/test.bed.bedsort.ok", + "fusioninspector/chckpts_dir/test.bed.bgzip.ok", + "fusioninspector/chckpts_dir/test.bed.tabix.ok", + "fusioninspector/fi_workdir", + "fusioninspector/fi_workdir/Log.final.out", + "fusioninspector/fi_workdir/Log.out", + "fusioninspector/fi_workdir/Log.progress.out", + "fusioninspector/fi_workdir/SJ.out.tab", + "fusioninspector/fi_workdir/_STARgenome", + "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", + "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", + "fusioninspector/fi_workdir/microH.dat", + "fusioninspector/fi_workdir/pipeliner.456.cmds", + "fusioninspector/fi_workdir/star_align.ok", + "fusioninspector/fi_workdir/test.fa", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", + "fusioninspector/fi_workdir/test.gtf", + "fusioninspector/fi_workdir/test.igv.Pfam.gff3", + "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", + "fusioninspector/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test.FusionInspector.fusions.tsv", + "fusioninspector/test.FusionInspector.log", + "fusioninspector/test.fusion_inspector_web.html", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:47:39.929302498" + }, + "stub test salmon": { + "content": [ + 11, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:32:18.882484433" + }, + "stub test ctatsplicing": { + "content": [ + 19, + { + "CTATSPLICING_PREPGENOMELIB": { + "ctat-splicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_ARRIBA": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "ctatsplicing", + "ctatsplicing/arriba", + "ctatsplicing/arriba/test.cancer.introns", + "ctatsplicing/arriba/test.cancer.introns.prelim", + "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/arriba/test.chckpts", + "ctatsplicing/arriba/test.ctat-splicing.igv.html", + "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/arriba/test.igv.tracks", + "ctatsplicing/arriba/test.introns", + "ctatsplicing/arriba/test.introns.for_IGV.bed", + "ctatsplicing/starfusion", + "ctatsplicing/starfusion/test.cancer.introns", + "ctatsplicing/starfusion/test.cancer.introns.prelim", + "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/starfusion/test.chckpts", + "ctatsplicing/starfusion/test.ctat-splicing.igv.html", + "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/starfusion/test.igv.tracks", + "ctatsplicing/starfusion/test.introns", + "ctatsplicing/starfusion/test.introns.for_IGV.bed", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:25:23.294470556" + }, + "stub test fusionreport": { + "content": [ + 23, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX_FOR_STARFUSION": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_FOR_ARRIBA": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_FOR_STARFUSION": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star_for_arriba", + "star_for_arriba/test.Aligned.sortedByCoord.out.bam", + "star_for_arriba/test.Aligned.unsort.out.bam", + "star_for_arriba/test.Chimeric.out.junction", + "star_for_arriba/test.Log.final.out", + "star_for_arriba/test.Log.out", + "star_for_arriba/test.Log.progress.out", + "star_for_arriba/test.ReadsPerGene.out.tab", + "star_for_arriba/test.SJ.out.tab", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_arriba/test.out.sam", + "star_for_arriba/test.sortedByCoord.out.bam", + "star_for_arriba/test.tab", + "star_for_arriba/test.toTranscriptome.out.bam", + "star_for_arriba/test.unmapped_1.fastq.gz", + "star_for_arriba/test.unmapped_2.fastq.gz", + "star_for_arriba/testXd.out.bam", + "star_for_starfusion", + "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", + "star_for_starfusion/test.Aligned.unsort.out.bam", + "star_for_starfusion/test.Chimeric.out.junction", + "star_for_starfusion/test.Log.final.out", + "star_for_starfusion/test.Log.out", + "star_for_starfusion/test.Log.progress.out", + "star_for_starfusion/test.ReadsPerGene.out.tab", + "star_for_starfusion/test.SJ.out.tab", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", + "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", + "star_for_starfusion/test.out.sam", + "star_for_starfusion/test.sortedByCoord.out.bam", + "star_for_starfusion/test.sortedByCoord.out.bam.bai", + "star_for_starfusion/test.tab", + "star_for_starfusion/test.toTranscriptome.out.bam", + "star_for_starfusion/test.unmapped_1.fastq.gz", + "star_for_starfusion/test.unmapped_2.fastq.gz", + "star_for_starfusion/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:30:26.192389023" + }, + "stub test fastp": { + "content": [ + 10, + { + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:31:22.055312226" + }, + "stub test fusioncatcher": { + "content": [ + 10, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-02T13:26:15.002394926" + }, "stub test all": { "content": [ 36, From f038c0b61f31112a6a34e23fb1cdd36b532c043b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 13:52:00 +0200 Subject: [PATCH 390/887] fix lint --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 1e7e33e61..bf778cac9 100644 --- a/nextflow.config +++ b/nextflow.config @@ -57,7 +57,6 @@ params { skip_qc = false skip_vis = false skip_vcf = false - skip_salmon_index = false // Download references option download_refs = false From 9460cd6edda1949f002e666f5b179078c2b25901 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:38:40 +0200 Subject: [PATCH 391/887] Update subworkflows/local/build_references.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- subworkflows/local/build_references.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 2f93ef08f..0fd01eab3 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -35,7 +35,7 @@ include { GFFREAD } from '../../modules/nf-core/gffread/ workflow BUILD_REFERENCES { take: - tools // list of all the tools to create references from + tools // list of all the tools to create references for main: def ch_versions = Channel.empty() From f92a30ed8707f2b69a1f30d1a7bedea3389813fa Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:39:21 +0200 Subject: [PATCH 392/887] Update subworkflows/local/build_references.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- subworkflows/local/build_references.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 0fd01eab3..97a0e172b 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -63,6 +63,7 @@ workflow BUILD_REFERENCES { def ch_hgnc_date = Channel.empty() def ch_hgnc_ref = Channel.empty() +//TODO: unify as if(tools.contains("fusioninspector")) once nextflow bug fixed def run_fusioninspector = tools.contains("fusioninspector") if(run_fusioninspector) { if ((!exists_not_empty(params.hgnc_ref) || !exists_not_empty(params.hgnc_date)) && !params.skip_vcf){ From afeea03c79f32797803fdac0b6a288575eb33050 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:40:04 +0200 Subject: [PATCH 393/887] Update subworkflows/local/build_references.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- subworkflows/local/build_references.nf | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 97a0e172b..01aa1cba2 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -105,14 +105,17 @@ workflow BUILD_REFERENCES { def ch_salmon_index = Channel.empty() if (tools.contains("salmon")) { - if (!exists_not_empty(params.salmon_index)){ // add condition for qc - GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) - ch_versions = ch_versions.mix(GFFREAD.out.versions) - SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) - ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) - ch_salmon_index = SALMON_INDEX.out.index - } else { - ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.name], it] } + if (!params.skip_qc) { + if (!exists_not_empty(params.salmon_index)){ + GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) + ch_versions = ch_versions.mix(GFFREAD.out.versions) + + SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) + ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) + ch_salmon_index = SALMON_INDEX.out.index + } else { + ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.name], it] } + } } } From 584f0009841e10ca46a2c001e72ca9aaeb0210f1 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 14:42:21 +0200 Subject: [PATCH 394/887] remove fusioninspector from arriba tools --- subworkflows/local/build_references.nf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 01aa1cba2..18c16c93a 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -109,7 +109,7 @@ workflow BUILD_REFERENCES { if (!exists_not_empty(params.salmon_index)){ GFFREAD(ch_gtf, ch_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(GFFREAD.out.versions) - + SALMON_INDEX(ch_fasta.map{ it -> it[1] }, GFFREAD.out.gffread_fasta.map{ it -> it[1] }) ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) ch_salmon_index = SALMON_INDEX.out.index @@ -135,8 +135,7 @@ workflow BUILD_REFERENCES { def ch_arriba_ref_cytobands = Channel.empty() def ch_arriba_ref_known_fusions = Channel.empty() def ch_arriba_ref_protein_domains = Channel.empty() - def arriba_tools = tools.intersect(["arriba", "fusioninspector"]) - if (arriba_tools) { + if (tools.contains("arriba")) { if (!exists_not_empty(params.arriba_ref_blacklist) || !exists_not_empty(params.arriba_ref_known_fusions) || !exists_not_empty(params.arriba_ref_protein_domains)) { ARRIBA_DOWNLOAD(params.genome) ch_versions = ch_versions.mix(ARRIBA_DOWNLOAD.out.versions) From 8ead7fd7f52c1c72a9bfb1fe3cd2b802b8effc84 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:45:02 +0200 Subject: [PATCH 395/887] Update subworkflows/local/build_references.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- subworkflows/local/build_references.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 18c16c93a..626e6aa55 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -164,6 +164,7 @@ workflow BUILD_REFERENCES { } def ch_starfusion_ref = Channel.empty() + //TODO update list once alignment is done in a single step def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing", "fusioninspector", "stringtie"]) if (starfusion_tools) { if (!exists_not_empty(params.starfusion_ref)) { From ee0df1789a0ffb542d4abb68919a3f914ea111e1 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 14:57:18 +0200 Subject: [PATCH 396/887] add cytobands to arriba check --- subworkflows/local/build_references.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 18c16c93a..21ed75c93 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -136,7 +136,7 @@ workflow BUILD_REFERENCES { def ch_arriba_ref_known_fusions = Channel.empty() def ch_arriba_ref_protein_domains = Channel.empty() if (tools.contains("arriba")) { - if (!exists_not_empty(params.arriba_ref_blacklist) || !exists_not_empty(params.arriba_ref_known_fusions) || !exists_not_empty(params.arriba_ref_protein_domains)) { + if (!exists_not_empty(params.arriba_ref_blacklist) || !exists_not_empty(params.arriba_ref_known_fusions) || !exists_not_empty(params.arriba_ref_protein_domains) || !exists_not_empty(params.arriba_ref_cytobands)) { ARRIBA_DOWNLOAD(params.genome) ch_versions = ch_versions.mix(ARRIBA_DOWNLOAD.out.versions) ch_arriba_ref_blacklist = ARRIBA_DOWNLOAD.out.blacklist From 7e2c221c6595938e59514f59d33cc3e98b1f5543 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 14:57:24 +0200 Subject: [PATCH 397/887] update usage docs --- docs/usage.md | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index f0afcebb9..4ee121b19 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -32,7 +32,7 @@ The rnafusion pipeline needs references for the fusion detection tools, so downl ```bash nextflow run nf-core/rnafusion \ -profile \ - --references_only --all \ + --references_only --tools all \ --cosmic_username --cosmic_passwd \ --genomes_base \ --outdir @@ -43,7 +43,7 @@ References for each tools can also be downloaded separately with: ```bash nextflow run nf-core/rnafusion \ -profile \ - --references_only -- -- ... \ + --references_only --tools \ --cosmic_username --cosmic_passwd \ --genomes_base \ --outdir @@ -64,15 +64,15 @@ Use credentials from QIAGEN and add `--qiagen` ```bash nextflow run nf-core/rnafusion \ -profile \ - --references_only -- -- ... \ + --references_only --tools \ --cosmic_username --cosmic_passwd \ --genomes_base \ --outdir --qiagen ``` -#### STAR-Fusion references downloaded vs built + #### Issues with building references @@ -136,23 +136,23 @@ As you can see above for multiple runs of the same sample, the `sample` name has ### Starting commands -The pipeline can either be run using all fusion detection tools or specifying individual tools. Visualisation tools will be run on all fusions detected. To run all tools (`arriba`, `fusioncatcher`, `starfusion`, `stringtie`, `ctat-splicing`) use the `--all` parameter: +The pipeline can either be run using all fusion detection tools or by specifying individual tools. Visualisation tools will be run on all fusions detected. To run all tools (`arriba`, `ctatsplicing`, `fusioncatcher`, `starfusion`, `stringtie`, `fusionreport`, `fastp`, `salmon`, `fusioninspector`) use the `all` option for the `--tools` parameter: ```bash nextflow run nf-core/rnafusion \ -profile \ - --all \ + --tools all \ --input \ --genomes_base \ --outdir ``` -To run only a specific detection tool use: `--tool`: +To run only a set of specific tools use `--tools` with a comma separated list of requested tools: ```bash nextflow run nf-core/rnafusion \ -profile \ - -- -- ... \ + --tools \ --input \ --genomes_base \ --outdir @@ -160,7 +160,7 @@ nextflow run nf-core/rnafusion \ If you are not covered by the research COSMIC license and want to avoid using COSMIC, you can provide the additional option `--no_cosmic`. -> **IMPORTANT: Either `--all` or `--`** is necessary to run detection tools +> **IMPORTANT: `--tools`** is necessary to run detection tools `--genomes_base` should be the path to the directory containing the folder `references/` that was built with `--references_only`. @@ -205,12 +205,12 @@ Supported genome is currently only GRCh38. #### Trimming -When the flag `--fastp_trim` is used, `fastp` is used to provide all tools with trimmed reads. Quality and adapter trimming by default. In addition, tail trimming and adapter_fastq specification are possible. Example usage: +When the flag `fastp` tool is used in `--tools`, `fastp` is used to provide all tools with trimmed reads. Quality and adapter trimming by default. In addition, tail trimming and adapter_fastq specification are possible. Example usage: ```bash nextflow run nf-core/rnafusion \ -profile \ --- -- ... \ +--tools fastp,... \ --input \ --genomes_base \ --outdir \ @@ -224,7 +224,7 @@ nextflow run nf-core/rnafusion \ ```bash nextflow run nf-core/rnafusion \ -profile \ - -- -- ... \ + --tools \ --input \ --genomes_base \ --outdir @@ -238,7 +238,7 @@ nextflow run nf-core/rnafusion \ ```bash nextflow run nf-core/rnafusion \ -profile \ - -- -- ... \ + --tools \ --input \ --genomes_base \ --outdir @@ -259,7 +259,10 @@ FusionInspector can be run as a standalone with: ```bash nextflow run nf-core/rnafusion \ -profile \ ---fusioninspector_only \ +--tools fusioninspector \ +--skip_qc \ +--skip_vis \ +--skip_vcf \ --fusioninspector_fusions \ --input \ --outdir @@ -278,7 +281,7 @@ GENE3--GENE4 nextflow run nf-core/rnafusion \ -profile \ --skip_qc \ ---all OR <--tool> +--tools \ --input \ --genomes_base \ --outdir @@ -292,7 +295,7 @@ This will skip all QC-related processes (picard metrics collection) nextflow run nf-core/rnafusion \ -profile \ --skip_vis \ ---all OR <--tool> +--tools \ --input \ --genomes_base \ --outdir @@ -302,7 +305,7 @@ This will skip all visualisation processes, including `fusion-report`, `FusionIn #### Optional manual feed-in of fusion files -It is possible to give the output of each tool manually using the argument: `--_fusions PATH/TO/FUSION/FILE`: this feature need more testing, don't hesitate to open an issue if you encounter problems. +It is possible to give the output of each fusion detection tool manually using the argument: `--_fusions PATH/TO/FUSION/FILE`: this feature needs more testing, don't hesitate to open an issue if you encounter problems. #### Set different `--limitSjdbInsertNsj` parameter From 02b68f1bbba12a0df34c31107e8671f391b2705c Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:58:31 +0200 Subject: [PATCH 398/887] Update workflows/rnafusion.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index c147b4ff4..c1cd21093 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -51,7 +51,7 @@ workflow RNAFUSION { BUILD_REFERENCES(tools) ch_versions = ch_versions.mix(BUILD_REFERENCES.out.versions) - if (!params.references_only) { // TODO: Remove this temporary parameter when we have a full-working GitHub nf-test + if (!params.references_only) { // // QC from FASTQ files From a021d673257f94811f026fd4c6c5b90abe2e0026 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:58:50 +0200 Subject: [PATCH 399/887] Update workflows/rnafusion.nf Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index c1cd21093..54b0b1ee5 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -86,7 +86,7 @@ workflow RNAFUSION { ch_reads = ch_samplesheet } - if(tools.contains("salmon")) { + if(tools.contains("salmon") && !params.skip_qc) { SALMON_QUANT( ch_reads, BUILD_REFERENCES.out.salmon_index, From 8a04a6f0dab12e4cf3cf1ce0ba1d0c310d9dee9a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 15:02:47 +0200 Subject: [PATCH 400/887] fix pre-commit --- subworkflows/local/build_references.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 399b7c3d0..1e4577c16 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -164,7 +164,7 @@ workflow BUILD_REFERENCES { } def ch_starfusion_ref = Channel.empty() - //TODO update list once alignment is done in a single step + //TODO update list once alignment is done in a single step def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing", "fusioninspector", "stringtie"]) if (starfusion_tools) { if (!exists_not_empty(params.starfusion_ref)) { From 9d6a5f690a32074264b8ad41a7c4330cd4f87af5 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 15:49:55 +0200 Subject: [PATCH 401/887] improve exists_not_empty to also work for directories --- subworkflows/local/build_references.nf | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 1e4577c16..cf1965d8c 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -25,6 +25,7 @@ include { GATK4_CREATESEQUENCEDICTIONARY } from '../../modules/nf-core/gatk4/cr include { GATK4_BEDTOINTERVALLIST } from '../../modules/nf-core/gatk4/bedtointervallist/main' include { SALMON_INDEX } from '../../modules/nf-core/salmon/index/main' include { GFFREAD } from '../../modules/nf-core/gffread/main' +include { getFileSuffix } from '../../modules/nf-core/cat/cat/main.nf' /* ======================================================================================== @@ -228,5 +229,21 @@ workflow BUILD_REFERENCES { def exists_not_empty(path) { def path_to_check = file(path as String) - return path_to_check.exists() && !path_to_check.isEmpty() + // Return false if the path does not exist + if(!path_to_check.exists()) { + return false + } + + // Check if the file is not a directory and return whether it's empty or not + if(!path_to_check.toFile().isDirectory()) { + return !path_to_check.isEmpty() + } + + // Get the first file in a directory and return whether it is empty or not + def first_file = null + path_to_check.toFile().eachFileRecurse(groovy.io.FileType.FILES) { file -> + first_file = file + return + } + return !first_file.toPath().isEmpty() } From 649b315fff5d9d9f4b62a7ac6cd758c62de66724 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 15:57:24 +0200 Subject: [PATCH 402/887] add an extra check for --fusion_annot_lib --- subworkflows/local/build_references.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index cf1965d8c..036401de7 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -169,6 +169,9 @@ workflow BUILD_REFERENCES { def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing", "fusioninspector", "stringtie"]) if (starfusion_tools) { if (!exists_not_empty(params.starfusion_ref)) { + if(!params.fusion_annot_lib) { + error("Expected --fusion_annot_lib to be specified when using StarFusion or any tools that depend on it") + } STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) if (tools.contains("ctatsplicing")) { From 1edbf08a0fa6f44edc4479c9413424005ab14319 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 16:08:00 +0200 Subject: [PATCH 403/887] https URLs can't be directories --- subworkflows/local/build_references.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 036401de7..0e3979b23 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -237,8 +237,8 @@ def exists_not_empty(path) { return false } - // Check if the file is not a directory and return whether it's empty or not - if(!path_to_check.toFile().isDirectory()) { + // Check if the file is not a directory or is a URL and return whether it's empty or not + if(path_to_check.startswith("http://") || path_to_check.startswith("https://") || !path_to_check.toFile().isDirectory()) { return !path_to_check.isEmpty() } From 1624397ed959be713dd3a8253fa30add544bd8ff Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 16:12:21 +0200 Subject: [PATCH 404/887] fix typo --- subworkflows/local/build_references.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 0e3979b23..a2b6ac4b9 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -238,7 +238,7 @@ def exists_not_empty(path) { } // Check if the file is not a directory or is a URL and return whether it's empty or not - if(path_to_check.startswith("http://") || path_to_check.startswith("https://") || !path_to_check.toFile().isDirectory()) { + if(path_to_check.startsWith("http://") || path_to_check.startsWith("https://") || !path_to_check.toFile().isDirectory()) { return !path_to_check.isEmpty() } From 1f247e5d852cf50345f6166b39d28a3cd8bb0673 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 2 Apr 2025 16:28:16 +0200 Subject: [PATCH 405/887] fix url check --- subworkflows/local/build_references.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index a2b6ac4b9..b50e04d3f 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -238,7 +238,8 @@ def exists_not_empty(path) { } // Check if the file is not a directory or is a URL and return whether it's empty or not - if(path_to_check.startsWith("http://") || path_to_check.startsWith("https://") || !path_to_check.toFile().isDirectory()) { + def is_url = ["https://", "ftp://", "http://"].findAll { it -> path.startsWith(it) }.size() > 0 + if(is_url || !path_to_check.toFile().isDirectory()) { return !path_to_check.isEmpty() } From 8ad58419f6af9794a82a3fe52179429c437d78b5 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 3 Apr 2025 14:50:42 +0200 Subject: [PATCH 406/887] fix issues introduced with the merge --- subworkflows/local/arriba_workflow/main.nf | 10 +++--- .../local/ctatsplicing_workflow/main.nf | 6 ++-- subworkflows/local/qc_workflow/main.nf | 6 ++-- .../local/starfusion_workflow/main.nf | 11 ++---- .../starfusion_workflow/tests/main.nf.test | 4 --- subworkflows/local/stringtie_workflow/main.nf | 2 +- workflows/rnafusion.nf | 34 +++++++------------ 7 files changed, 27 insertions(+), 46 deletions(-) diff --git a/subworkflows/local/arriba_workflow/main.nf b/subworkflows/local/arriba_workflow/main.nf index 14af59ba1..7580133b8 100644 --- a/subworkflows/local/arriba_workflow/main.nf +++ b/subworkflows/local/arriba_workflow/main.nf @@ -13,15 +13,14 @@ workflow ARRIBA_WORKFLOW { main: - def ch_versions = Channel.empty() - - if ( arriba_fusions ) { + def ch_versions = Channel.empty() + def ch_arriba_fusions = Channel.empty() + def ch_arriba_fusion_fail = Channel.empty() + if (arriba_fusions) { ch_arriba_fusions = reads.combine( Channel.value( file( arriba_fusions, checkIfExists: true ) ) ) .map { it -> [ it[0], it[2] ] } - } else { - ARRIBA_ARRIBA ( reads, ch_fasta, @@ -31,7 +30,6 @@ workflow ARRIBA_WORKFLOW { ch_arriba_ref_cytobands, ch_arriba_ref_protein_domains ) - ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions diff --git a/subworkflows/local/ctatsplicing_workflow/main.nf b/subworkflows/local/ctatsplicing_workflow/main.nf index f8b2d3592..7f83802e0 100644 --- a/subworkflows/local/ctatsplicing_workflow/main.nf +++ b/subworkflows/local/ctatsplicing_workflow/main.nf @@ -4,7 +4,7 @@ workflow CTATSPLICING_WORKFLOW { take: split_junctions // [ val(meta), path(split_junctions.SJ.out.tab) ] junctions // [ val(meta), path(junctions.Chimeric.out.junction) ] - aligned_bams // [ val(meta), path(aligned_bams.Aligned.sortedByCoord.out.bam) ] + aligned_bams // [ val(meta), path(aligned_bams.Aligned.sortedByCoord.out.bam), path(aligned_bams.Aligned.sortedByCoord.out.bam.bai) ] ctat_genome_lib // [ val(meta2), path(path/to/ctat_genome_lib) ] main: @@ -13,8 +13,8 @@ workflow CTATSPLICING_WORKFLOW { def ch_ctatsplicing_input = split_junctions .join(junctions, failOnMismatch:true, failOnDuplicate:true) .join(aligned_bams, failOnMismatch:true, failOnDuplicate:true) - .map { meta, split_junction, junction, bam -> - [ meta, split_junction, junction, bam, [] ] + .map { meta, split_junction, junction, bam, bai -> + [ meta, split_junction, junction, bam, bai ] } CTATSPLICING_STARTOCANCERINTRONS( diff --git a/subworkflows/local/qc_workflow/main.nf b/subworkflows/local/qc_workflow/main.nf index 4924b633b..9d9833f0a 100644 --- a/subworkflows/local/qc_workflow/main.nf +++ b/subworkflows/local/qc_workflow/main.nf @@ -18,7 +18,7 @@ workflow QC_WORKFLOW { ch_versions = Channel.empty() PICARD_COLLECTRNASEQMETRICS( - ch_bam_sorted.map { meta, bam, _bai -> [ meta, bam ]}, + ch_bam_sorted, ch_refflat.map{ _meta, refflat -> [ refflat ] }, ch_fasta.map{ _meta, fasta -> [ fasta ] }, ch_rrna_interval.map{ _meta, intervals -> [ intervals ] }.ifEmpty([]) @@ -27,7 +27,7 @@ workflow QC_WORKFLOW { ch_rnaseq_metrics = PICARD_COLLECTRNASEQMETRICS.out.metrics GATK4_MARKDUPLICATES( - ch_bam_sorted.map { meta, bam, _bai -> [ meta, bam ]}, + ch_bam_sorted, ch_fasta.map { _meta, fasta -> [ fasta ]}, ch_fai.map { _meta, fasta_fai -> [ fasta_fai ]} ) @@ -35,7 +35,7 @@ workflow QC_WORKFLOW { ch_duplicate_metrics = GATK4_MARKDUPLICATES.out.metrics PICARD_COLLECTINSERTSIZEMETRICS( - ch_bam_sorted.map { meta, bam, _bai -> [ meta, bam ]} + ch_bam_sorted ) ch_versions = ch_versions.mix(PICARD_COLLECTINSERTSIZEMETRICS.out.versions) ch_insertsize_metrics = PICARD_COLLECTINSERTSIZEMETRICS.out.metrics diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index 5fdd96d48..cda5cc1e8 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -9,21 +9,18 @@ workflow STARFUSION_WORKFLOW { reads // channel: [ meta, bam ] junctions // channel: [ meta, junctions ] ch_starfusion_ref + starfusion_fusions main: def ch_versions = Channel.empty() - def ch_align = Channel.empty() def ch_starfusion_fusions = Channel.empty() - def bam_sorted_indexed = Channel.empty() - - if (params.starfusion_fusions){ - ch_starfusion_fusions = reads.combine(Channel.value(file(params.starfusion_fusions, checkIfExists:true))) + if (starfusion_fusions){ + ch_starfusion_fusions = reads.combine(Channel.value(file(starfusion_fusions, checkIfExists:true))) .map { it -> [ it[0], it[2] ] } } else { reads_junction = reads.join(junctions) // TODO: This join is not needed as STARFUSION can simply read from the junction file: https://github.com/STAR-Fusion/STAR-Fusion/wiki#alternatively-kickstart-mode-running-star-yourself-and-then-running-star-fusion-using-the-existing-outputs - STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) ch_versions = ch_versions.mix(STARFUSION.out.versions) ch_starfusion_fusions = STARFUSION.out.fusions @@ -31,8 +28,6 @@ workflow STARFUSION_WORKFLOW { } emit: fusions = ch_starfusion_fusions - ch_bam_sorted = ch_align - ch_bam_sorted_indexed = bam_sorted_indexed versions = ch_versions } diff --git a/subworkflows/local/starfusion_workflow/tests/main.nf.test b/subworkflows/local/starfusion_workflow/tests/main.nf.test index ac0e77982..af6b117ff 100644 --- a/subworkflows/local/starfusion_workflow/tests/main.nf.test +++ b/subworkflows/local/starfusion_workflow/tests/main.nf.test @@ -99,10 +99,6 @@ nextflow_workflow { { assert workflow.success }, { assert snapshot( workflow.out.fusions, - file(workflow.out.star_stats[0][1]).name, - workflow.out.star_gene_count, - workflow.out.ch_bam_sorted, - workflow.out.ch_bam_sorted_indexed, workflow.out.versions ).match() } ) diff --git a/subworkflows/local/stringtie_workflow/main.nf b/subworkflows/local/stringtie_workflow/main.nf index d9e65fd11..28fa0547e 100644 --- a/subworkflows/local/stringtie_workflow/main.nf +++ b/subworkflows/local/stringtie_workflow/main.nf @@ -12,7 +12,7 @@ workflow STRINGTIE_WORKFLOW { ch_stringtie_gtf = Channel.empty() STRINGTIE_STRINGTIE( - bam_sorted.map { meta, bam, _bai -> [ meta, bam ]}, + bam_sorted, ch_chrgtf.map { _meta, gtf -> [ gtf ]} ) ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 1cc525704..bc95ad6fc 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -25,9 +25,6 @@ include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_ include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' include { validateInputSamplesheet } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' -include { ARRIBA_ARRIBA } from '../modules/nf-core/arriba/arriba/main.nf' -include { FUSIONREPORT } from '../modules/local/fusionreport/detect/main.nf' - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -108,13 +105,13 @@ workflow RNAFUSION { def ch_aligned_reads = Channel.empty() def ch_star_junctions = Channel.empty() def ch_star_split_junctions = Channel.empty() - if((params.arriba || params.ctatsplicing || params.starfusion || params.all) && !params.fusioninspector_only) { + if(tools.intersect(["ctatsplicing", "arriba", "starfusion", "stringtie"])) { FASTQ_ALIGN_STAR( ch_reads, - BUILD_REFERENCES.out.ch_starindex_ref, - BUILD_REFERENCES.out.ch_gtf, - BUILD_REFERENCES.out.ch_fasta, - BUILD_REFERENCES.out.ch_fai, + BUILD_REFERENCES.out.starindex_ref, + BUILD_REFERENCES.out.gtf, + BUILD_REFERENCES.out.fasta, + BUILD_REFERENCES.out.fai, params.star_ignore_sjdbgtf, params.seq_platform, params.seq_center, @@ -132,12 +129,12 @@ workflow RNAFUSION { // Run CTAT-SPLICING // - if((params.ctatsplicing || params.all)) { + if((tools.contains("ctatsplicing"))) { CTATSPLICING_WORKFLOW( ch_star_split_junctions, ch_star_junctions, - ch_aligned_reads.map { meta, bam, _bai -> [ meta, bam ]}, - BUILD_REFERENCES.out.ch_starfusion_ref + ch_aligned_reads, + BUILD_REFERENCES.out.starfusion_ref ) ch_versions = ch_versions.mix(CTATSPLICING_WORKFLOW.out.versions) } @@ -157,13 +154,11 @@ workflow RNAFUSION { ch_aligned_reads.map { meta, bam, _bai -> [ meta, bam ]}, BUILD_REFERENCES.out.gtf, BUILD_REFERENCES.out.fasta, - BUILD_REFERENCES.out.starindex_ref, BUILD_REFERENCES.out.arriba_ref_blacklist, BUILD_REFERENCES.out.arriba_ref_cytobands, BUILD_REFERENCES.out.arriba_ref_known_fusions, BUILD_REFERENCES.out.arriba_ref_protein_domains, - params.arriba_fusions, // path - params.cram // array + params.arriba_fusions ) ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions) ch_arriba_fusions = ARRIBA_WORKFLOW.out.fusions @@ -174,19 +169,16 @@ workflow RNAFUSION { // def ch_starfusion_fusions = ch_reads.map { it -> [it[0], []] } // Set starfusion fusions to empty by default - def ch_starfusion_bams = Channel.empty() - if(tools.intersect(["starfusion", "ctatsplicing", "stringtie"])) { + if(tools.contains("starfusion")) { fusions_created = true STARFUSION_WORKFLOW ( ch_aligned_reads.map { meta, bam, _bai -> [ meta, bam ]}, ch_star_junctions, - BUILD_REFERENCES.out.starfusion_ref + BUILD_REFERENCES.out.starfusion_ref, + params.starfusion_fusions ) ch_versions = ch_versions.mix(STARFUSION_WORKFLOW.out.versions) ch_starfusion_fusions = STARFUSION_WORKFLOW.out.fusions - ch_starfusion_bams = STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_gene_count.collect{it[1]}) } // @@ -261,7 +253,7 @@ workflow RNAFUSION { ch_fusion_list_filtered, ch_fusionreport_report, ch_fusionreport_csv, - ch_starfusion_bams, + ch_aligned_reads, BUILD_REFERENCES.out.gtf, BUILD_REFERENCES.out.arriba_ref_protein_domains, BUILD_REFERENCES.out.arriba_ref_cytobands, From 1b815421018e5ace5d46914be73082e7649ac9ad Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 3 Apr 2025 17:05:52 +0200 Subject: [PATCH 407/887] fix last couple of issues integrated with the dev merge --- subworkflows/local/build_references.nf | 4 +- tests/test_stub.nf.test.snap | 1409 +++++++++++++++++------- workflows/rnafusion.nf | 2 +- 3 files changed, 1012 insertions(+), 403 deletions(-) diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index b50e04d3f..8612b8f84 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -165,9 +165,7 @@ workflow BUILD_REFERENCES { } def ch_starfusion_ref = Channel.empty() - //TODO update list once alignment is done in a single step - def starfusion_tools = tools.intersect(["starfusion", "ctatsplicing", "fusioninspector", "stringtie"]) - if (starfusion_tools) { + if (tools.intersect(["starfusion", "ctatsplicing"])) { if (!exists_not_empty(params.starfusion_ref)) { if(!params.fusion_annot_lib) { error("Expected --fusion_annot_lib to be specified when using StarFusion or any tools that depend on it") diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 7895e56e3..a94c79609 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,18 +1,8 @@ { "stub test starfusion": { "content": [ -<<<<<<<<< Temporary merge branch 1 - 29, -========= - 32, ->>>>>>>>> Temporary merge branch 2 + 16, { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, "FASTQC": { "fastqc": "0.12.1" }, @@ -22,6 +12,10 @@ "GATK4_CREATESEQUENCEDICTIONARY": { "gatk4": "4.6.1.0" }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, "GENCODE_DOWNLOAD": { "wget": null }, @@ -31,10 +25,25 @@ "GTF_TO_REFFLAT": { "gtfToGenePred": 377 }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "STAR_FOR_ARRIBA": { + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, "gawk": "5.1.0" @@ -49,9 +58,6 @@ } }, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", "fastqc", "fastqc/test.html", "fastqc/test.zip", @@ -64,14 +70,18 @@ "multiqc/multiqc_data", "multiqc/multiqc_plots", "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -95,60 +105,130 @@ "references/star/sjdbList.fromGTF.out.tab", "references/star/sjdbList.out.tab", "references/star/transcriptInfo.tab", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam" + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-02T13:24:01.289397616" + "timestamp": "2025-04-03T15:41:41.407790326" }, - "stub test fusioninspector": { + "stub test stringtie": { "content": [ - 17, + 16, { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONINSPECTOR": { - "STAR-Fusion": null - }, - "FUSIONREPORT": { - "fusion_report": "2.1.5" - }, - "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" - }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" }, "GATK4_CREATESEQUENCEDICTIONARY": { "gatk4": "4.6.1.0" }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, "GENCODE_DOWNLOAD": { "wget": null }, @@ -158,16 +238,19 @@ "GTF_TO_REFFLAT": { "gtfToGenePred": 377 }, - "HGNC_DOWNLOAD": { - "wget": null + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "STARFUSION_BUILD": { - "STAR-Fusion": "1.14.0" + "SAMTOOLS_INDEX": { + "samtools": 1.21 }, - "STAR_FOR_ARRIBA": { + "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, "gawk": "5.1.0" @@ -177,136 +260,815 @@ "samtools": 1.2, "gawk": "5.1.0" }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", "fastqc", "fastqc/test.html", "fastqc/test.zip", - "fusioninspector", - "fusioninspector/IGV_inputs", - "fusioninspector/IGV_inputs/TrinityFusion.bed", - "fusioninspector/IGV_inputs/cytoBand.txt", - "fusioninspector/IGV_inputs/test.ROI.bed", - "fusioninspector/IGV_inputs/test.bed", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/IGV_inputs/test.consolidated.bam", - "fusioninspector/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/IGV_inputs/test.fa", - "fusioninspector/IGV_inputs/test.fa.fai", - "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/IGV_inputs/test.gtf", - "fusioninspector/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/IGV_inputs/test.junction_reads.bam", - "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/IGV_inputs/tracks.json", - "fusioninspector/chckpts_dir", - "fusioninspector/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/chckpts_dir/add_FFPM.ok", - "fusioninspector/chckpts_dir/add_splice_info.ok", - "fusioninspector/chckpts_dir/append_microH_info.ok", - "fusioninspector/chckpts_dir/blast_filter.ok", - "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/chckpts_dir/cp_final.ok", - "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/chckpts_dir/cytoband.ok", - "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/chckpts_dir/final.abridged.ok", - "fusioninspector/chckpts_dir/fusion_annotator.ok", - "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/chckpts_dir/fusion_contigs.ok", - "fusioninspector/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/chckpts_dir/index_consol_bam.ok", - "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/chckpts_dir/microH.dat.ok", - "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/chckpts_dir/run_STAR.ok", - "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/chckpts_dir/span_reads_acc.ok", - "fusioninspector/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/chckpts_dir/test.bed.tabix.ok", - "fusioninspector/fi_workdir", - "fusioninspector/fi_workdir/Log.final.out", - "fusioninspector/fi_workdir/Log.out", - "fusioninspector/fi_workdir/Log.progress.out", - "fusioninspector/fi_workdir/SJ.out.tab", - "fusioninspector/fi_workdir/_STARgenome", - "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/fi_workdir/microH.dat", - "fusioninspector/fi_workdir/pipeliner.456.cmds", - "fusioninspector/fi_workdir/star_align.ok", - "fusioninspector/fi_workdir/test.fa", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", - "fusioninspector/fi_workdir/test.gtf", - "fusioninspector/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", - "fusioninspector/test.FusionInspector.fusions.abridged.tsv", - "fusioninspector/test.FusionInspector.fusions.tsv", - "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.fusion_inspector_web.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-03T15:50:39.921183013" + }, + "stub test arriba": { + "content": [ + 16, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-03T15:39:53.022836825" + }, + "stub test fusioninspector": { + "content": [ + 19, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-03T15:53:29.478575932" + }, + "stub test salmon": { + "content": [ + 11, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-03T15:44:11.204966248" + }, + "stub test ctatsplicing": { + "content": [ + 17, + { + "CTATSPLICING_PREPGENOMELIB": { + "ctat-splicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "ctatsplicing", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-03T16:59:53.744205313" + }, + "stub test fusionreport": { + "content": [ + 22, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -324,6 +1086,15 @@ "multiqc/multiqc_data", "multiqc/multiqc_plots", "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", @@ -344,9 +1115,6 @@ "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", "references/star", "references/star/Genome", "references/star/Log.out", @@ -440,39 +1208,50 @@ "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam" + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-02T13:47:39.929302498" + "timestamp": "2025-04-03T15:43:02.916057311" }, - "stub test salmon": { + "stub test fastp": { "content": [ - 11, + 10, { + "FASTP": { + "fastp": "0.23.4" + }, "FASTQC": { "fastqc": "0.12.1" }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" }, @@ -485,18 +1264,9 @@ "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" }, - "GFFREAD": { - "gffread": "0.12.7" - }, "GTF_TO_REFFLAT": { "gtfToGenePred": 377 }, - "SALMON_INDEX": { - "salmon": "1.10.3" - }, - "SALMON_QUANT": { - "salmon": "1.10.3" - }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, @@ -505,9 +1275,18 @@ } }, [ + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "get", @@ -525,61 +1304,34 @@ "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/gffread", - "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", - "references/salmon", - "references/salmon/salmon", - "references/salmon/salmon/complete_ref_lens.bin", - "references/salmon/salmon/ctable.bin", - "references/salmon/salmon/ctg_offsets.bin", - "references/salmon/salmon/duplicate_clusters.tsv", - "references/salmon/salmon/info.json", - "references/salmon/salmon/mphf.bin", - "references/salmon/salmon/pos.bin", - "references/salmon/salmon/pre_indexing.log", - "references/salmon/salmon/rank.bin", - "references/salmon/salmon/refAccumLengths.bin", - "references/salmon/salmon/ref_indexing.log", - "references/salmon/salmon/reflengths.bin", - "references/salmon/salmon/refseq.bin", - "references/salmon/salmon/seq.bin", - "references/salmon/salmon/versionInfo.json", - "salmon", - "salmon/test", - "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json" + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-02T13:32:18.882484433" + "timestamp": "2025-04-03T15:43:33.740487484" }, - "stub test ctatsplicing": { + "stub test fusioncatcher": { "content": [ - 19, + 10, { - "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" - }, - "CTATSPLICING_STARTOCANCERINTRONS": { - "ctat-splicing": "0.0.2" - }, "FASTQC": { "fastqc": "0.12.1" }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" + }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" }, "GATK4_CREATESEQUENCEDICTIONARY": { "gatk4": "4.6.1.0" }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" - }, "GENCODE_DOWNLOAD": { "wget": null }, @@ -589,61 +1341,14 @@ "GTF_TO_REFFLAT": { "gtfToGenePred": 377 }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "STARFUSION_BUILD": { - "STAR-Fusion": "1.14.0" - }, - "STAR_ALIGN": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.2, - "gawk": "5.1.0" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "ctatsplicing", - "ctatsplicing/arriba", - "ctatsplicing/arriba/test.cancer.introns", - "ctatsplicing/arriba/test.cancer.introns.prelim", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/arriba/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/arriba/test.chckpts", - "ctatsplicing/arriba/test.ctat-splicing.igv.html", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/arriba/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/arriba/test.igv.tracks", - "ctatsplicing/arriba/test.introns", - "ctatsplicing/arriba/test.introns.for_IGV.bed", - "ctatsplicing/starfusion", - "ctatsplicing/starfusion/test.cancer.introns", - "ctatsplicing/starfusion/test.cancer.introns.prelim", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/starfusion/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/starfusion/test.chckpts", - "ctatsplicing/starfusion/test.ctat-splicing.igv.html", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/starfusion/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/starfusion/test.igv.tracks", - "ctatsplicing/starfusion/test.introns", - "ctatsplicing/starfusion/test.introns.for_IGV.bed", "fastqc", "fastqc/test.html", "fastqc/test.zip", @@ -653,14 +1358,6 @@ "fusioncatcher/test.fusioncatcher.fusion-genes.txt", "fusioncatcher/test.fusioncatcher.log", "fusioncatcher/test.fusioncatcher.summary.txt", - "fusionreport", - "fusionreport/test", - "fusionreport/test/AAA_BBB.html", - "fusionreport/test/test.fusionreport.tsv", - "fusionreport/test/test.fusionreport_filtered.tsv", - "fusionreport/test/test.fusions.csv", - "fusionreport/test/test.fusions.json", - "fusionreport/test/test_fusionreport_index.html", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "get", @@ -670,112 +1367,26 @@ "multiqc/multiqc_data", "multiqc/multiqc_plots", "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", "pipeline_info", "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/fusion_report_db", - "references/fusion_report_db/DB-timestamp.txt", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "salmon", - "salmon/test", - "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json", - "star_for_arriba", - "star_for_arriba/test.Aligned.sortedByCoord.out.bam", - "star_for_arriba/test.Aligned.unsort.out.bam", - "star_for_arriba/test.Chimeric.out.junction", - "star_for_arriba/test.Log.final.out", - "star_for_arriba/test.Log.out", - "star_for_arriba/test.Log.progress.out", - "star_for_arriba/test.ReadsPerGene.out.tab", - "star_for_arriba/test.SJ.out.tab", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_arriba/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_arriba/test.out.sam", - "star_for_arriba/test.sortedByCoord.out.bam", - "star_for_arriba/test.tab", - "star_for_arriba/test.toTranscriptome.out.bam", - "star_for_arriba/test.unmapped_1.fastq.gz", - "star_for_arriba/test.unmapped_2.fastq.gz", - "star_for_arriba/testXd.out.bam", - "star_for_starfusion", - "star_for_starfusion/test.Aligned.sortedByCoord.out.bam", - "star_for_starfusion/test.Aligned.unsort.out.bam", - "star_for_starfusion/test.Chimeric.out.junction", - "star_for_starfusion/test.Log.final.out", - "star_for_starfusion/test.Log.out", - "star_for_starfusion/test.Log.progress.out", - "star_for_starfusion/test.ReadsPerGene.out.tab", - "star_for_starfusion/test.SJ.out.tab", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.bg", - "star_for_starfusion/test.Signal.UniqueMultiple.str1.out.wig", - "star_for_starfusion/test.out.sam", - "star_for_starfusion/test.sortedByCoord.out.bam", - "star_for_starfusion/test.sortedByCoord.out.bam.bai", - "star_for_starfusion/test.tab", - "star_for_starfusion/test.toTranscriptome.out.bam", - "star_for_starfusion/test.unmapped_1.fastq.gz", - "star_for_starfusion/test.unmapped_2.fastq.gz", - "star_for_starfusion/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv" + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-17T17:40:40.562156411" + "timestamp": "2025-04-03T15:40:58.774714515" }, - "stub test fastp": { + "stub test all": { "content": [ -<<<<<<<<< Temporary merge branch 1 - 31, -========= 34, ->>>>>>>>> Temporary merge branch 2 { "ARRIBA_ARRIBA": { "arriba": "2.4.0" @@ -1246,6 +1857,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-17T17:38:45.56378377" + "timestamp": "2025-04-03T15:39:16.250051213" } -} +} \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index bc95ad6fc..dbe490d5a 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -129,7 +129,7 @@ workflow RNAFUSION { // Run CTAT-SPLICING // - if((tools.contains("ctatsplicing"))) { + if(tools.contains("ctatsplicing")) { CTATSPLICING_WORKFLOW( ch_star_split_junctions, ch_star_junctions, From 776fa880de8210fe280dd382ba3ce808d55e9e46 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 7 Apr 2025 15:33:22 +0200 Subject: [PATCH 408/887] remove unused includes in starfusion_workflow --- subworkflows/local/starfusion_workflow/main.nf | 4 ---- 1 file changed, 4 deletions(-) diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index cda5cc1e8..c4fa164c5 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -1,8 +1,4 @@ -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION } from '../../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_STARFUSION_CRAM } from '../../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_STARFUSION } from '../../../modules/nf-core/samtools/view/main' include { STARFUSION } from '../../../modules/local/starfusion/detect/main' -include { CTATSPLICING_WORKFLOW } from '../ctatsplicing_workflow' workflow STARFUSION_WORKFLOW { take: From 472a4f290ee624218855d32425d42056574a1b44 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 8 Apr 2025 11:05:18 +0200 Subject: [PATCH 409/887] correct starfusion input --- subworkflows/local/starfusion_workflow/main.nf | 13 ++++++------- workflows/rnafusion.nf | 1 - 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/subworkflows/local/starfusion_workflow/main.nf b/subworkflows/local/starfusion_workflow/main.nf index c4fa164c5..53f0dd8a4 100644 --- a/subworkflows/local/starfusion_workflow/main.nf +++ b/subworkflows/local/starfusion_workflow/main.nf @@ -2,7 +2,6 @@ include { STARFUSION } from '../../ workflow STARFUSION_WORKFLOW { take: - reads // channel: [ meta, bam ] junctions // channel: [ meta, junctions ] ch_starfusion_ref starfusion_fusions @@ -12,15 +11,15 @@ workflow STARFUSION_WORKFLOW { def ch_starfusion_fusions = Channel.empty() if (starfusion_fusions){ - ch_starfusion_fusions = reads.combine(Channel.value(file(starfusion_fusions, checkIfExists:true))) - .map { it -> [ it[0], it[2] ] } + fusions = file(starfusion_fusions, checkIfExists:true) + ch_starfusion_fusions = junctions.map { meta, _junc -> [ meta, fusions ] } } else { - reads_junction = reads.join(junctions) // TODO: This join is not needed as STARFUSION can simply read from the junction file: https://github.com/STAR-Fusion/STAR-Fusion/wiki#alternatively-kickstart-mode-running-star-yourself-and-then-running-star-fusion-using-the-existing-outputs - - STARFUSION( reads_junction, ch_starfusion_ref.map { it -> it[1] }) + STARFUSION( + junctions.map { meta, junc -> [ meta, [], junc ]}, + ch_starfusion_ref.map { it -> it[1] } + ) ch_versions = ch_versions.mix(STARFUSION.out.versions) ch_starfusion_fusions = STARFUSION.out.fusions - } emit: fusions = ch_starfusion_fusions diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index dbe490d5a..69d317fb6 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -172,7 +172,6 @@ workflow RNAFUSION { if(tools.contains("starfusion")) { fusions_created = true STARFUSION_WORKFLOW ( - ch_aligned_reads.map { meta, bam, _bai -> [ meta, bam ]}, ch_star_junctions, BUILD_REFERENCES.out.starfusion_ref, params.starfusion_fusions From 1ec0fb6e9879e3944851eac54ae874282e7c01d7 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 8 Apr 2025 13:52:16 +0200 Subject: [PATCH 410/887] add support for multiple input types in the samplesheet --- assets/schema_input.json | 63 +++++++++++++- modules/local/fusionreport/detect/main.nf | 2 +- .../local/ctatsplicing_workflow/main.nf | 6 +- .../local/fusionreport_workflow/main.nf | 6 +- .../utils_nfcore_rnafusion_pipeline/main.nf | 45 +++++++--- workflows/rnafusion.nf | 83 +++++++++++++++---- 6 files changed, 166 insertions(+), 39 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index f38d29c48..ad1c753cc 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -27,12 +27,73 @@ "pattern": "^\\S+f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 2 cannot contain spaces, has to exist and must have extension '.fq.gz' or '.fastq.gz'" }, + "bam": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.bam$", + "errorMessage": "BAM file cannot contain spaces, has to exist and must have extension '.bam'" + }, + "bai": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.bam\\.bai$", + "errorMessage": "BAI file cannot contain spaces, has to exist and must have extension '.bam.bai'" + }, + "cram": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.cram$", + "errorMessage": "CRAM file cannot contain spaces, has to exist and must have extension '.cram'" + }, + "crai": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.cram\\.crai$", + "errorMessage": "CRAI file cannot contain spaces, has to exist and must have extension '.cram.crai'" + }, + "junctions": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.junction$", + "errorMessage": "Junctions file cannot contain spaces, has to exist and must have extension '.junction'" + }, + "split_junctions": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.SJ.out.tab$", + "errorMessage": "Split junctions file cannot contain spaces, has to exist and must have extension '.SJ.out.tab'" + }, "strandedness": { "type": "string", "enum": ["forward", "reverse", "unstranded", "unknown"], "errorMessage": "Strandedness has to be 'forward', 'reverse', 'unstranded' or 'unknown'" } }, - "required": ["sample", "fastq_1", "fastq_2", "strandedness"] + "dependentRequired": { + "fastq_2": ["fastq_1"], + "bai": ["bam"], + "crai": ["cram"] + }, + "required": ["sample", "strandedness"], + "oneOf": [ + { + "required": ["fastq_1", "fastq_2"] + }, + { + "required": ["bam"] + }, + { + "required": ["cram"] + }, + { + "required": ["junctions"] + } + ] } } diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index dab70ffe4..bcb59877c 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -9,7 +9,7 @@ process FUSIONREPORT { input: - tuple val(meta), path(reads), path(arriba_fusions), path(starfusion_fusions), path(fusioncatcher_fusions) + tuple val(meta), path(arriba_fusions), path(starfusion_fusions), path(fusioncatcher_fusions) tuple val(meta2), path(fusionreport_ref) val(tools_cutoff) diff --git a/subworkflows/local/ctatsplicing_workflow/main.nf b/subworkflows/local/ctatsplicing_workflow/main.nf index 7f83802e0..f464e8b66 100644 --- a/subworkflows/local/ctatsplicing_workflow/main.nf +++ b/subworkflows/local/ctatsplicing_workflow/main.nf @@ -10,9 +10,9 @@ workflow CTATSPLICING_WORKFLOW { main: def ch_versions = Channel.empty() - def ch_ctatsplicing_input = split_junctions - .join(junctions, failOnMismatch:true, failOnDuplicate:true) - .join(aligned_bams, failOnMismatch:true, failOnDuplicate:true) + def ch_ctatsplicing_input = split_junctions.view() + .join(junctions.view(), failOnMismatch:true, failOnDuplicate:true) + .join(aligned_bams.view(), failOnMismatch:true, failOnDuplicate:true) .map { meta, split_junction, junction, bam, bai -> [ meta, split_junction, junction, bam, bai ] } diff --git a/subworkflows/local/fusionreport_workflow/main.nf b/subworkflows/local/fusionreport_workflow/main.nf index bbbc909fb..c4a896dd7 100644 --- a/subworkflows/local/fusionreport_workflow/main.nf +++ b/subworkflows/local/fusionreport_workflow/main.nf @@ -3,7 +3,6 @@ include { FUSIONREPORT } from '../../../modules/local/fusionreport/dete workflow FUSIONREPORT_WORKFLOW { take: - reads fusionreport_ref arriba_fusions starfusion_fusions @@ -14,12 +13,11 @@ workflow FUSIONREPORT_WORKFLOW { ch_report = Channel.empty() ch_csv = Channel.empty() - reads_fusions = reads - .join(arriba_fusions, failOnMismatch:true, failOnDuplicate:true) + def ch_fusions = arriba_fusions .join(starfusion_fusions, failOnMismatch:true, failOnDuplicate:true) .join(fusioncatcher_fusions, failOnMismatch:true, failOnDuplicate:true) - FUSIONREPORT(reads_fusions, fusionreport_ref, params.tools_cutoff) + FUSIONREPORT(ch_fusions, fusionreport_ref, params.tools_cutoff) ch_fusion_list = FUSIONREPORT.out.fusion_list ch_fusion_list_filtered = FUSIONREPORT.out.fusion_list_filtered ch_versions = ch_versions.mix(FUSIONREPORT.out.versions) diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index e751b6430..295a23722 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -72,21 +72,24 @@ workflow PIPELINE_INITIALISATION { Channel .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) - .map { - meta, fastq_1, fastq_2, strandedness -> - if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ], strandedness ] - } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ], strandedness ] - } + .map { meta, fastq_1, fastq_2, bam, bai, cram, crai, junctions, split_junctions, strandedness -> + def meta_fastqs = [] + if (!fastq_1) { + meta_fastqs = [ meta, [] ] + } else if (!fastq_2) { + meta_fastqs = [ meta + [single_end:true], [ fastq_1 ] ] + } else { + meta_fastqs = [ meta + [single_end:false], [ fastq_1, fastq_2 ] ] + } + return [ meta.id ] + meta_fastqs + [ bam, bai, cram, crai, junctions, split_junctions, strandedness ] } .groupTuple() .map { samplesheet -> validateInputSamplesheet(samplesheet) } .map { - meta, fastqs -> - return [ meta, fastqs.flatten() ] + meta, fastqs, bam, bai, cram, crai, junctions, split_junctions -> + return [ meta, fastqs.flatten(), bam, bai, cram, crai, junctions, split_junctions ] } .set { ch_samplesheet } @@ -165,7 +168,25 @@ def validateInputParameters() { // Validate channels from input samplesheet // def validateInputSamplesheet(input) { - def (metas, fastqs) = input[1..2] + def (metas, fastqs, bam, bai, cram, crai, junctions, split_junctions) = input[1..8] + + def bam_list = bam.findAll { it -> it != [] } + def cram_list = cram.findAll { it -> it != [] } + def junctions_list = bai.findAll { it -> it != [] } + def split_junctions_list = split_junctions.findAll { it -> it != [] } + // Check alignment and junction files (input is a list) + if (bam_list.size() > 1 || cram_list.size() > 1 || junctions_list.size() > 1 || split_junctions_list.size() > 1) { + error("Please check input samplesheet -> Only one BAM or CRAM, junctions and split junctions file is allowed per sample: ${metas[0].id}") + } + + bam = bam_list.size() > 0 ? bam_list[0] : [] + cram = cram_list.size() > 0 ? cram_list[0] : [] + junctions = junctions_list.size() > 0 ? junctions_list[0] : [] + split_junctions = split_junctions_list.size() > 0 ? split_junctions_list[0] : [] + + if (bam != [] && cram != []) { + error("Please check input samplesheet -> Using both BAM and CRAM files isn't allowed: ${metas[0].id}") + } // Check that multiple runs of the same sample are of the same strandedness def strandedness_ok = metas.collect{ it.strandedness }.unique().size == 1 @@ -175,11 +196,11 @@ def validateInputSamplesheet(input) { // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1 - if (!endedness_ok) { + if (!endedness_ok && fastqs) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } - return [ metas[0], fastqs ] + return [ metas[0], fastqs, bam, bai.find { it -> it != [] } ?: [], cram, crai.find { it -> it != [] } ?: [], junctions, split_junctions ] } // diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 69d317fb6..1e62d4a77 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -53,13 +53,52 @@ workflow RNAFUSION { if (!params.references_only) { + def ch_input = ch_samplesheet.multiMap { meta, fastqs, bam, bai, cram, crai, junctions, split_junctions -> + def align = false + // Check if we need split junctions + if (tools.contains("ctatsplicing") && !split_junctions) { + align = true + } + + // Check if we need junctions + if (tools.intersect(["starfusion", "ctatsplicing"]) && !junctions) { + align = true + } + + // Check if we need BAM or CRAM files + if (tools.intersect(["ctatsplicing", "arriba", "stringtie"]) && !bam && !cram) { + align = true + } + + // Check if there are fastqs when we need to align + if (align && !fastqs) { + error("No fastq files found for ${meta.id}. Either provide fastq files to align or provide a BAM/CRAM file and a junctions file.") + } + def new_meta = meta + [align:align] + fastqs: [ new_meta, fastqs ] + bam: [ new_meta, bam, bai ] + cram: [ new_meta, cram, crai ] + junctions: [ new_meta, junctions ] + split_junctions: [ new_meta, split_junctions ] + } + + // Define which fastqs need to be processes (all analysis that's not aligning) + def fastq_tools = ["salmon", "fusioninspector"] + selected_fastq_tools = tools.intersect(fastq_tools) + def ch_fastqs_to_process = ch_input.fastqs.filter { meta, fastqs -> + if (!fastqs && selected_fastq_tools) { + log.warn("Fastq files not found for ${meta.id}. Skipping the following tools for this sample: ${selected_fastq_tools.join(', ')}") + } + return fastqs + } + // // QC from FASTQ files // if(!params.skip_qc) { FASTQC ( - ch_samplesheet + ch_fastqs_to_process, ) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) ch_versions = ch_versions.mix(FASTQC.out.versions) @@ -73,7 +112,7 @@ workflow RNAFUSION { if(tools.contains("fastp")) { def ch_adapter_fasta = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta).collect() : [] TRIM_WORKFLOW ( - ch_samplesheet, + ch_fastqs_to_process, ch_adapter_fasta, params.skip_qc ) @@ -83,9 +122,13 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}) } else { - ch_reads = ch_samplesheet + ch_reads = ch_fastqs_to_process } + // + // MODULE: SALMON_QUANT + // + if(tools.contains("salmon") && !params.skip_qc) { SALMON_QUANT( ch_reads, @@ -98,16 +141,22 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(SALMON_QUANT.out.json_info.collect{it[1]}) ch_versions = ch_versions.mix(SALMON_QUANT.out.versions) } + // - // Run STAR alignment + // SUBWORKFLOW: Run STAR alignment // - def ch_aligned_reads = Channel.empty() - def ch_star_junctions = Channel.empty() - def ch_star_split_junctions = Channel.empty() + // Define which fastqs need to be aligned + def ch_fastqs_to_align = ch_reads + .filter { meta, _fastqs -> meta.align } + + // Add the alignment files to the correct channel if their fastqs aren't aligned + def ch_aligned_reads = ch_input.bam.mix(ch_input.cram).filter { meta, file, _index -> file && !meta.align } + def ch_star_junctions = ch_input.junctions.filter { meta, file -> file && !meta.align } + def ch_star_split_junctions = ch_input.split_junctions.filter { meta, file -> file && !meta.align } if(tools.intersect(["ctatsplicing", "arriba", "starfusion", "stringtie"])) { FASTQ_ALIGN_STAR( - ch_reads, + ch_fastqs_to_align, BUILD_REFERENCES.out.starindex_ref, BUILD_REFERENCES.out.gtf, BUILD_REFERENCES.out.fasta, @@ -117,16 +166,16 @@ workflow RNAFUSION { params.seq_center, params.cram ) - ch_versions = ch_versions.mix(FASTQ_ALIGN_STAR.out.versions) - ch_aligned_reads = FASTQ_ALIGN_STAR.out.bam_bai - ch_star_junctions = FASTQ_ALIGN_STAR.out.junctions - ch_star_split_junctions = FASTQ_ALIGN_STAR.out.spl_junc_tabs - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.log_final.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.gene_count.collect{it[1]}.ifEmpty([])) + ch_versions = ch_versions.mix(FASTQ_ALIGN_STAR.out.versions) + ch_aligned_reads = ch_aligned_reads.mix(FASTQ_ALIGN_STAR.out.bam_bai) + ch_star_junctions = ch_star_junctions.mix(FASTQ_ALIGN_STAR.out.junctions) + ch_star_split_junctions = ch_star_split_junctions.mix(FASTQ_ALIGN_STAR.out.spl_junc_tabs) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.log_final.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.gene_count.collect{it[1]}.ifEmpty([])) } // - // Run CTAT-SPLICING + // SUBWORKFLOW: Run CTAT-SPLICING // if(tools.contains("ctatsplicing")) { @@ -140,11 +189,10 @@ workflow RNAFUSION { } // - // SUBWORKFLOW: Run STAR alignment and Arriba + // SUBWORKFLOW: Run Arriba // // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? - // TODO: same as above, but with ch_arriba_fusion_fail. It's currently replaces by a dummy file def fusions_created = false def ch_arriba_fusions = ch_reads.map { it -> [it[0], []] } // Set arriba fusions to empty by default @@ -220,7 +268,6 @@ workflow RNAFUSION { error("Could not find any fusion files. Please generate some with --arriba, --starfusion and/or --fusioncatcher") } FUSIONREPORT_WORKFLOW ( - ch_reads, BUILD_REFERENCES.out.fusionreport_ref, ch_arriba_fusions, ch_starfusion_fusions, From ef67463cf48bab712e1b8caf2e3169435bd92088 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 8 Apr 2025 14:43:59 +0200 Subject: [PATCH 411/887] fix some issues in channel handling --- assets/schema_input.json | 5 +++- .../local/ctatsplicing_workflow/main.nf | 6 ++--- .../utils_nfcore_rnafusion_pipeline/main.nf | 2 +- workflows/rnafusion.nf | 23 +++++++++++-------- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index ad1c753cc..c472b893c 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -81,7 +81,7 @@ "crai": ["cram"] }, "required": ["sample", "strandedness"], - "oneOf": [ + "anyOf": [ { "required": ["fastq_1", "fastq_2"] }, @@ -93,6 +93,9 @@ }, { "required": ["junctions"] + }, + { + "required": ["split_junctions"] } ] } diff --git a/subworkflows/local/ctatsplicing_workflow/main.nf b/subworkflows/local/ctatsplicing_workflow/main.nf index f464e8b66..7f83802e0 100644 --- a/subworkflows/local/ctatsplicing_workflow/main.nf +++ b/subworkflows/local/ctatsplicing_workflow/main.nf @@ -10,9 +10,9 @@ workflow CTATSPLICING_WORKFLOW { main: def ch_versions = Channel.empty() - def ch_ctatsplicing_input = split_junctions.view() - .join(junctions.view(), failOnMismatch:true, failOnDuplicate:true) - .join(aligned_bams.view(), failOnMismatch:true, failOnDuplicate:true) + def ch_ctatsplicing_input = split_junctions + .join(junctions, failOnMismatch:true, failOnDuplicate:true) + .join(aligned_bams, failOnMismatch:true, failOnDuplicate:true) .map { meta, split_junction, junction, bam, bai -> [ meta, split_junction, junction, bam, bai ] } diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 295a23722..e5eefe820 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -172,7 +172,7 @@ def validateInputSamplesheet(input) { def bam_list = bam.findAll { it -> it != [] } def cram_list = cram.findAll { it -> it != [] } - def junctions_list = bai.findAll { it -> it != [] } + def junctions_list = junctions.findAll { it -> it != [] } def split_junctions_list = split_junctions.findAll { it -> it != [] } // Check alignment and junction files (input is a list) if (bam_list.size() > 1 || cram_list.size() > 1 || junctions_list.size() > 1 || split_junctions_list.size() > 1) { diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 1e62d4a77..551c2e389 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -83,13 +83,14 @@ workflow RNAFUSION { } // Define which fastqs need to be processes (all analysis that's not aligning) - def fastq_tools = ["salmon", "fusioninspector"] + def fastq_tools = ["salmon", "fusioninspector", "fusioncatcher"] selected_fastq_tools = tools.intersect(fastq_tools) - def ch_fastqs_to_process = ch_input.fastqs.filter { meta, fastqs -> + def ch_fastqs_to_process = ch_input.fastqs.branch { meta, fastqs -> if (!fastqs && selected_fastq_tools) { - log.warn("Fastq files not found for ${meta.id}. Skipping the following tools for this sample: ${selected_fastq_tools.join(', ')}") + log.warn("Fastq files not found for sample '${meta.id}'. Skipping the following tools for this sample: ${selected_fastq_tools.join(', ')}") } - return fastqs + found: fastqs + not_found: !fastqs } // @@ -98,7 +99,7 @@ workflow RNAFUSION { if(!params.skip_qc) { FASTQC ( - ch_fastqs_to_process, + ch_fastqs_to_process.found, ) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) ch_versions = ch_versions.mix(FASTQC.out.versions) @@ -112,7 +113,7 @@ workflow RNAFUSION { if(tools.contains("fastp")) { def ch_adapter_fasta = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta).collect() : [] TRIM_WORKFLOW ( - ch_fastqs_to_process, + ch_fastqs_to_process.found, ch_adapter_fasta, params.skip_qc ) @@ -122,7 +123,7 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}) ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}) } else { - ch_reads = ch_fastqs_to_process + ch_reads = ch_fastqs_to_process.found } // @@ -195,7 +196,7 @@ workflow RNAFUSION { // TODO: improve how params.arriba_fusions would avoid running arriba module. Maybe imputed from samplesheet? def fusions_created = false - def ch_arriba_fusions = ch_reads.map { it -> [it[0], []] } // Set arriba fusions to empty by default + def ch_arriba_fusions = ch_samplesheet.map { it -> [it[0], []] } // Set arriba fusions to empty by default if(tools.contains("arriba")) { fusions_created = true ARRIBA_WORKFLOW ( @@ -216,7 +217,7 @@ workflow RNAFUSION { // SUBWORKFLOW: Run STAR alignment and StarFusion // - def ch_starfusion_fusions = ch_reads.map { it -> [it[0], []] } // Set starfusion fusions to empty by default + def ch_starfusion_fusions = ch_samplesheet.map { it -> [it[0], []] } // Set starfusion fusions to empty by default if(tools.contains("starfusion")) { fusions_created = true STARFUSION_WORKFLOW ( @@ -232,7 +233,7 @@ workflow RNAFUSION { // SUBWORKFLOW: Run FusionCatcher // - def ch_fusioncatcher_fusions = ch_reads.map { it -> [it[0], []] } // Set fusioncatcher fusions to empty by default + def ch_fusioncatcher_fusions = ch_samplesheet.map { it -> [it[0], []] } // Set fusioncatcher fusions to empty by default if(tools.contains("fusioncatcher")) { fusions_created = true FUSIONCATCHER_WORKFLOW ( @@ -241,6 +242,8 @@ workflow RNAFUSION { params.fusioncatcher_fusions ) ch_versions = ch_versions.mix(FUSIONCATCHER_WORKFLOW.out.versions) + // Add output of fusioncatcher to a channel + add empty entries for the samples that could not be run + ch_fusioncatcher_fusions = FUSIONCATCHER_WORKFLOW.out.fusions.mix(ch_fastqs_to_process.not_found) } // From e6495ba25187d63fa4fd39c6b8de8275160d246a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 8 Apr 2025 15:09:36 +0200 Subject: [PATCH 412/887] add cram -> bam conversion --- workflows/rnafusion.nf | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 551c2e389..b05851f39 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -18,6 +18,7 @@ include { FASTQC } from '../modules/nf-core/fastqc/main include { MULTIQC } from '../modules/nf-core/multiqc/main' include { STAR_ALIGN } from '../modules/nf-core/star/align/main' include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' +include { SAMTOOLS_CONVERT } from '../modules/nf-core/samtools/convert/main' include { paramsSummaryMap } from 'plugin/nf-schema' include { FASTQ_ALIGN_STAR } from '../subworkflows/local/fastq_align_star' include { CTATSPLICING_WORKFLOW } from '../subworkflows/local/ctatsplicing_workflow' @@ -93,6 +94,22 @@ workflow RNAFUSION { not_found: !fastqs } + // Convert CRAM to BAM when needed (when tools that don't support CRAM are used and when the sample isn't aligned) + def only_bam_tools = ["ctatsplicing", "stringtie", "fusioninspector"] + def ch_aligned_inputs = ch_input.bam.filter { meta, file, _bai -> file && !meta.align } + if(tools.intersect(only_bam_tools)) { + SAMTOOLS_CONVERT( + ch_input.cram.filter { meta, file, _crai -> file && !meta.align }, + BUILD_REFERENCES.out.fasta, + BUILD_REFERENCES.out.fai + ) + ch_aligned_inputs = ch_aligned_inputs.mix( + SAMTOOLS_CONVERT.out.bam.join(SAMTOOLS_CONVERT.out.bai, failOnMismatch:true, failOnDuplicate:true) + ) + } else { + ch_aligned_inputs = ch_aligned_inputs.mix(ch_input.cram.filter { meta, file, _crai -> file && !meta.align }) + } + // // QC from FASTQ files // @@ -152,7 +169,7 @@ workflow RNAFUSION { .filter { meta, _fastqs -> meta.align } // Add the alignment files to the correct channel if their fastqs aren't aligned - def ch_aligned_reads = ch_input.bam.mix(ch_input.cram).filter { meta, file, _index -> file && !meta.align } + def ch_aligned_reads = ch_aligned_inputs def ch_star_junctions = ch_input.junctions.filter { meta, file -> file && !meta.align } def ch_star_split_junctions = ch_input.split_junctions.filter { meta, file -> file && !meta.align } if(tools.intersect(["ctatsplicing", "arriba", "starfusion", "stringtie"])) { From d8d8aaaedf86e65b20c33f3507f210a4fe4636ff Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 8 Apr 2025 15:43:52 +0200 Subject: [PATCH 413/887] improve error message --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index b05851f39..4bb34532e 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -73,7 +73,7 @@ workflow RNAFUSION { // Check if there are fastqs when we need to align if (align && !fastqs) { - error("No fastq files found for ${meta.id}. Either provide fastq files to align or provide a BAM/CRAM file and a junctions file.") + error("No fastq files found for ${meta.id}. Either provide fastq files to align or provide a BAM/CRAM file, a junctions file and a split junctions file.") } def new_meta = meta + [align:align] fastqs: [ new_meta, fastqs ] From 44d0c8c2620c48c8fab828b1e351f69547809776 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 8 Apr 2025 16:06:15 +0200 Subject: [PATCH 414/887] update docs --- assets/schema_input.json | 6 ++-- docs/usage.md | 30 ++++++++++++------- .../local/ctatsplicing_workflow/main.nf | 4 +-- .../utils_nfcore_rnafusion_pipeline/main.nf | 18 +++++------ workflows/rnafusion.nf | 14 ++++----- 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index c472b893c..573619ce9 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -62,7 +62,7 @@ "pattern": "^\\S+\\.junction$", "errorMessage": "Junctions file cannot contain spaces, has to exist and must have extension '.junction'" }, - "split_junctions": { + "splice_junctions": { "type": "string", "format": "file-path", "exists": true, @@ -83,7 +83,7 @@ "required": ["sample", "strandedness"], "anyOf": [ { - "required": ["fastq_1", "fastq_2"] + "required": ["fastq_1"] }, { "required": ["bam"] @@ -95,7 +95,7 @@ "required": ["junctions"] }, { - "required": ["split_junctions"] + "required": ["splice_junctions"] } ] } diff --git a/docs/usage.md b/docs/usage.md index f3c0360d0..7e238e8b1 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -83,7 +83,7 @@ nextflow run nf-core/rnafusion \ -profile \ --references_only \ --cosmic_username --cosmic_passwd \ - --fusionreport \ + --tools fusionreport \ --genomes_base \ --outdir ``` @@ -111,7 +111,7 @@ The references are only built based on ensembl version 102. It is not possible c ### Samplesheet input -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. The pipeline will detect whether a sample is single- or paired-end from the samplesheet - the `fastq_2` column is empty for single-end. The samplesheet has to be a comma-separated file (.csv) but can have as many columns as you desire. There is a strict requirement for the first 4 columns to match those defined in the table below with the header row included. +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. The pipeline will detect whether a sample is single- or paired-end from the samplesheet - the `fastq_2` column is empty for single-end. The samplesheet has to be a comma-separated (.csv), tab-separated (.tsv), yaml (.yaml or .yml) or json (.json) file but can have as many columns as you desire. There is a strict requirement for the `sample` and `strandedness` columns. One or more of these columns should be provided too: `fastq_1`, `bam`, `cram`, `junctions` and `splice_junctions` A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. ```csv title="samplesheet.csv" @@ -125,14 +125,24 @@ TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,forward TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,forward ``` -As you can see above for multiple runs of the same sample, the `sample` name has to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. - -| Column | Description | -| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `strandedness` | Strandedness: forward or reverse. | +As you can see above for multiple runs of the same sample, the `sample` name has to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Note that multiple rows per sample are not supported for samples that contain `bam`, `cram`, `junctions` and/or `splice_junctions` files. + +| Column | Description | Required | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | :white_check_mark: | +| `strandedness` | Strandedness: forward or reverse. | :white_check_mark: | +| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ file(s) because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | :grey_question: | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | :x: | +| `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | :grey_question: | +| `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | :x: | +| `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | :grey_question: | +| `crai` | Full path to the index of the CRAM file. File has to exist and must have the extension ".crai". | :x: | +| `junctions` | Full path to the file containing chimeric junctions determined by STAR. File has to exist and must have the extension ".junction". It's the responsibility of the pipeline user to make sure this file has been correctly created. The junctions file is required to run `starfusion` and `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | +| `splice_junctions` | Full path to the file containing splice junctions determined by STAR. File has to exist and must have the extension ".SJ.out.tab". It's the responsibility of the pipeline user to make sure this file has been correctly created. The splice junctions file is required to run `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | + +:white_check_mark: = Required +:x: = Not required +:grey_question: = One of these columns should be provided ### Starting commands diff --git a/subworkflows/local/ctatsplicing_workflow/main.nf b/subworkflows/local/ctatsplicing_workflow/main.nf index 7f83802e0..02135973e 100644 --- a/subworkflows/local/ctatsplicing_workflow/main.nf +++ b/subworkflows/local/ctatsplicing_workflow/main.nf @@ -2,7 +2,7 @@ include { CTATSPLICING_STARTOCANCERINTRONS } from '../../../modules/local/ctatsp workflow CTATSPLICING_WORKFLOW { take: - split_junctions // [ val(meta), path(split_junctions.SJ.out.tab) ] + splice_junctions // [ val(meta), path(splice_junctions.SJ.out.tab) ] junctions // [ val(meta), path(junctions.Chimeric.out.junction) ] aligned_bams // [ val(meta), path(aligned_bams.Aligned.sortedByCoord.out.bam), path(aligned_bams.Aligned.sortedByCoord.out.bam.bai) ] ctat_genome_lib // [ val(meta2), path(path/to/ctat_genome_lib) ] @@ -10,7 +10,7 @@ workflow CTATSPLICING_WORKFLOW { main: def ch_versions = Channel.empty() - def ch_ctatsplicing_input = split_junctions + def ch_ctatsplicing_input = splice_junctions .join(junctions, failOnMismatch:true, failOnDuplicate:true) .join(aligned_bams, failOnMismatch:true, failOnDuplicate:true) .map { meta, split_junction, junction, bam, bai -> diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index e5eefe820..7921f82bf 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -72,7 +72,7 @@ workflow PIPELINE_INITIALISATION { Channel .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) - .map { meta, fastq_1, fastq_2, bam, bai, cram, crai, junctions, split_junctions, strandedness -> + .map { meta, fastq_1, fastq_2, bam, bai, cram, crai, junctions, splice_junctions, strandedness -> def meta_fastqs = [] if (!fastq_1) { meta_fastqs = [ meta, [] ] @@ -81,15 +81,15 @@ workflow PIPELINE_INITIALISATION { } else { meta_fastqs = [ meta + [single_end:false], [ fastq_1, fastq_2 ] ] } - return [ meta.id ] + meta_fastqs + [ bam, bai, cram, crai, junctions, split_junctions, strandedness ] + return [ meta.id ] + meta_fastqs + [ bam, bai, cram, crai, junctions, splice_junctions, strandedness ] } .groupTuple() .map { samplesheet -> validateInputSamplesheet(samplesheet) } .map { - meta, fastqs, bam, bai, cram, crai, junctions, split_junctions -> - return [ meta, fastqs.flatten(), bam, bai, cram, crai, junctions, split_junctions ] + meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions -> + return [ meta, fastqs.flatten(), bam, bai, cram, crai, junctions, splice_junctions ] } .set { ch_samplesheet } @@ -168,21 +168,21 @@ def validateInputParameters() { // Validate channels from input samplesheet // def validateInputSamplesheet(input) { - def (metas, fastqs, bam, bai, cram, crai, junctions, split_junctions) = input[1..8] + def (metas, fastqs, bam, bai, cram, crai, junctions, splice_junctions) = input[1..8] def bam_list = bam.findAll { it -> it != [] } def cram_list = cram.findAll { it -> it != [] } def junctions_list = junctions.findAll { it -> it != [] } - def split_junctions_list = split_junctions.findAll { it -> it != [] } + def splice_junctions_list = splice_junctions.findAll { it -> it != [] } // Check alignment and junction files (input is a list) - if (bam_list.size() > 1 || cram_list.size() > 1 || junctions_list.size() > 1 || split_junctions_list.size() > 1) { + if (bam_list.size() > 1 || cram_list.size() > 1 || junctions_list.size() > 1 || splice_junctions_list.size() > 1) { error("Please check input samplesheet -> Only one BAM or CRAM, junctions and split junctions file is allowed per sample: ${metas[0].id}") } bam = bam_list.size() > 0 ? bam_list[0] : [] cram = cram_list.size() > 0 ? cram_list[0] : [] junctions = junctions_list.size() > 0 ? junctions_list[0] : [] - split_junctions = split_junctions_list.size() > 0 ? split_junctions_list[0] : [] + splice_junctions = splice_junctions_list.size() > 0 ? splice_junctions_list[0] : [] if (bam != [] && cram != []) { error("Please check input samplesheet -> Using both BAM and CRAM files isn't allowed: ${metas[0].id}") @@ -200,7 +200,7 @@ def validateInputSamplesheet(input) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } - return [ metas[0], fastqs, bam, bai.find { it -> it != [] } ?: [], cram, crai.find { it -> it != [] } ?: [], junctions, split_junctions ] + return [ metas[0], fastqs, bam, bai.find { it -> it != [] } ?: [], cram, crai.find { it -> it != [] } ?: [], junctions, splice_junctions ] } // diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 4bb34532e..f8b719f87 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -54,10 +54,10 @@ workflow RNAFUSION { if (!params.references_only) { - def ch_input = ch_samplesheet.multiMap { meta, fastqs, bam, bai, cram, crai, junctions, split_junctions -> + def ch_input = ch_samplesheet.multiMap { meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions -> def align = false // Check if we need split junctions - if (tools.contains("ctatsplicing") && !split_junctions) { + if (tools.contains("ctatsplicing") && !splice_junctions) { align = true } @@ -67,7 +67,7 @@ workflow RNAFUSION { } // Check if we need BAM or CRAM files - if (tools.intersect(["ctatsplicing", "arriba", "stringtie"]) && !bam && !cram) { + if (tools.intersect(["ctatsplicing", "arriba", "stringtie", "fusioninspector"]) && !bam && !cram) { align = true } @@ -80,7 +80,7 @@ workflow RNAFUSION { bam: [ new_meta, bam, bai ] cram: [ new_meta, cram, crai ] junctions: [ new_meta, junctions ] - split_junctions: [ new_meta, split_junctions ] + splice_junctions: [ new_meta, splice_junctions ] } // Define which fastqs need to be processes (all analysis that's not aligning) @@ -171,7 +171,7 @@ workflow RNAFUSION { // Add the alignment files to the correct channel if their fastqs aren't aligned def ch_aligned_reads = ch_aligned_inputs def ch_star_junctions = ch_input.junctions.filter { meta, file -> file && !meta.align } - def ch_star_split_junctions = ch_input.split_junctions.filter { meta, file -> file && !meta.align } + def ch_star_splice_junctions = ch_input.splice_junctions.filter { meta, file -> file && !meta.align } if(tools.intersect(["ctatsplicing", "arriba", "starfusion", "stringtie"])) { FASTQ_ALIGN_STAR( ch_fastqs_to_align, @@ -187,7 +187,7 @@ workflow RNAFUSION { ch_versions = ch_versions.mix(FASTQ_ALIGN_STAR.out.versions) ch_aligned_reads = ch_aligned_reads.mix(FASTQ_ALIGN_STAR.out.bam_bai) ch_star_junctions = ch_star_junctions.mix(FASTQ_ALIGN_STAR.out.junctions) - ch_star_split_junctions = ch_star_split_junctions.mix(FASTQ_ALIGN_STAR.out.spl_junc_tabs) + ch_star_splice_junctions = ch_star_splice_junctions.mix(FASTQ_ALIGN_STAR.out.spl_junc_tabs) ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.log_final.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.gene_count.collect{it[1]}.ifEmpty([])) } @@ -198,7 +198,7 @@ workflow RNAFUSION { if(tools.contains("ctatsplicing")) { CTATSPLICING_WORKFLOW( - ch_star_split_junctions, + ch_star_splice_junctions, ch_star_junctions, ch_aligned_reads, BUILD_REFERENCES.out.starfusion_ref From 94d813038f15dfd065abd7b018d540357536fbaf Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 10 Apr 2025 10:39:43 +0200 Subject: [PATCH 415/887] fix some flow issues --- modules/local/fusioninspector/main.nf | 2 ++ modules/local/vcf_collect/main.nf | 4 +++- subworkflows/local/build_references.nf | 2 +- workflows/rnafusion.nf | 20 ++++++++++++-------- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index ae368b5e7..1eb388578 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -54,6 +54,8 @@ process FUSIONINSPECTOR { touch ${prefix}.FusionInspector.fusions.abridged.tsv touch ${prefix}.FusionInspector.fusions.tsv touch ${prefix}.fusion_inspector_web.html + touch ${prefix}.gtf + touch ${prefix}.coding_effect mkdir -p chckpts_dir touch chckpts_dir/add_FFPM.ok touch chckpts_dir/add_splice_info.ok diff --git a/modules/local/vcf_collect/main.nf b/modules/local/vcf_collect/main.nf index 3a1bf2217..5ea3b39f4 100644 --- a/modules/local/vcf_collect/main.nf +++ b/modules/local/vcf_collect/main.nf @@ -19,6 +19,8 @@ process VCF_COLLECT { when: task.ext.when == null || task.ext.when + // TODO use BGZIP to compress the VCF file instead of GZIP + script: def prefix = task.ext.prefix ?: "${meta.id}" """ @@ -35,7 +37,7 @@ process VCF_COLLECT { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf + touch ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 8612b8f84..b0307188a 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -165,7 +165,7 @@ workflow BUILD_REFERENCES { } def ch_starfusion_ref = Channel.empty() - if (tools.intersect(["starfusion", "ctatsplicing"])) { + if (tools.intersect(["starfusion", "ctatsplicing", "fusioninspector"])) { if (!exists_not_empty(params.starfusion_ref)) { if(!params.fusion_annot_lib) { error("Expected --fusion_annot_lib to be specified when using StarFusion or any tools that depend on it") diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index f8b719f87..7afd192fc 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -37,8 +37,8 @@ workflow RNAFUSION { take: - ch_samplesheet // channel: samplesheet read in from --input - tools // list: a list of tools to run + ch_samplesheet_input // channel: samplesheet read in from --input + tools // list: a list of tools to run main: @@ -54,7 +54,7 @@ workflow RNAFUSION { if (!params.references_only) { - def ch_input = ch_samplesheet.multiMap { meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions -> + def ch_input = ch_samplesheet_input.map { meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions -> def align = false // Check if we need split junctions if (tools.contains("ctatsplicing") && !splice_junctions) { @@ -76,11 +76,15 @@ workflow RNAFUSION { error("No fastq files found for ${meta.id}. Either provide fastq files to align or provide a BAM/CRAM file, a junctions file and a split junctions file.") } def new_meta = meta + [align:align] - fastqs: [ new_meta, fastqs ] - bam: [ new_meta, bam, bai ] - cram: [ new_meta, cram, crai ] - junctions: [ new_meta, junctions ] - splice_junctions: [ new_meta, splice_junctions ] + return [ new_meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions ] + } + .tap { ch_samplesheet } + .multiMap { meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions -> + fastqs: [ meta, fastqs ] + bam: [ meta, bam, bai ] + cram: [ meta, cram, crai ] + junctions: [ meta, junctions ] + splice_junctions: [ meta, splice_junctions ] } // Define which fastqs need to be processes (all analysis that's not aligning) From c85a430ccbcc5a4b751f70cc18e1864bbfd0b5d5 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 10 Apr 2025 11:03:10 +0200 Subject: [PATCH 416/887] fix vcf_collect input --- modules/local/vcf_collect/main.nf | 5 ++--- subworkflows/local/build_references.nf | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/local/vcf_collect/main.nf b/modules/local/vcf_collect/main.nf index 5ea3b39f4..5c1c4ce0e 100644 --- a/modules/local/vcf_collect/main.nf +++ b/modules/local/vcf_collect/main.nf @@ -19,10 +19,9 @@ process VCF_COLLECT { when: task.ext.when == null || task.ext.when - // TODO use BGZIP to compress the VCF file instead of GZIP - script: def prefix = task.ext.prefix ?: "${meta.id}" + // TODO use BGZIP to compress the VCF file instead of GZIP """ vcf_collect.py --fusioninspector $fusioninspector_tsv --fusionreport $fusionreport_report --fusioninspector_gtf $fusioninspector_gtf_tsv --fusionreport_csv $fusionreport_csv --hgnc $hgnc_ref --sample ${prefix} --out ${prefix}_fusion_data.vcf gzip ${prefix}_fusion_data.vcf @@ -37,7 +36,7 @@ process VCF_COLLECT { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz + touch ${prefix}_fusion_data.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index b0307188a..b54edf900 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -64,14 +64,14 @@ workflow BUILD_REFERENCES { def ch_hgnc_date = Channel.empty() def ch_hgnc_ref = Channel.empty() -//TODO: unify as if(tools.contains("fusioninspector")) once nextflow bug fixed + //TODO: unify as if(tools.contains("fusioninspector")) once nextflow bug fixed def run_fusioninspector = tools.contains("fusioninspector") - if(run_fusioninspector) { + if(run_fusioninspector && !params.skip_vcf) { if ((!exists_not_empty(params.hgnc_ref) || !exists_not_empty(params.hgnc_date)) && !params.skip_vcf){ HGNC_DOWNLOAD( ) ch_versions = ch_versions.mix(HGNC_DOWNLOAD.out.versions) - ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref - ch_hgnc_date = HGNC_DOWNLOAD.out.hgnc_date + ch_hgnc_ref = HGNC_DOWNLOAD.out.hgnc_ref.map { that -> [[id:that.Name], that] } + ch_hgnc_date = HGNC_DOWNLOAD.out.hgnc_date.map { that -> [[id:that.Name], that] } } else { ch_hgnc_ref = Channel.fromPath(params.hgnc_ref).map { that -> [[id:that.Name], that] } ch_hgnc_date = Channel.fromPath(params.hgnc_date).map { that -> [[id:that.Name], that] } From b2b5108755c07a01e71e18d818ced983f4dec01f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 10 Apr 2025 11:10:13 +0200 Subject: [PATCH 417/887] add bam tests --- conf/test.config | 2 +- conf/test_build.config | 2 +- tests/csv/fastq.csv | 2 + tests/test_stub_bam.nf.test | 339 +++++ tests/test_stub_bam.nf.test.snap | 1972 ++++++++++++++++++++++++++++++ tests/yml/bam.yml | 10 + 6 files changed, 2325 insertions(+), 2 deletions(-) create mode 100644 tests/csv/fastq.csv create mode 100644 tests/test_stub_bam.nf.test create mode 100644 tests/test_stub_bam.nf.test.snap create mode 100644 tests/yml/bam.yml diff --git a/conf/test.config b/conf/test.config index e29dc54af..7e5c591ef 100644 --- a/conf/test.config +++ b/conf/test.config @@ -15,7 +15,7 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - input = params.pipelines_testdata_base_path +'rnafusion/testdata/human/samplesheet_valid.csv' + input = "${projectDir}/tests/csv/fastq.csv" tools = "all" no_cosmic = true } diff --git a/conf/test_build.config b/conf/test_build.config index 511b83657..aecf79e7d 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -35,7 +35,7 @@ params { // Input data references_only = true - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnafusion/testdata/human/samplesheet_valid.csv' + input = "${projectDir}/tests/csv/fastq.csv" no_cosmic = true tools = "arriba,starfusion,fusionreport,salmon,fusioninspector" fasta = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa' diff --git a/tests/csv/fastq.csv b/tests/csv/fastq.csv new file mode 100644 index 000000000..7765b1bf1 --- /dev/null +++ b/tests/csv/fastq.csv @@ -0,0 +1,2 @@ +sample,fastq_1,fastq_2,strandedness +test,https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/reads_1.fq.gz,https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/reads_2.fq.gz,forward diff --git a/tests/test_stub_bam.nf.test b/tests/test_stub_bam.nf.test new file mode 100644 index 000000000..4d83cae01 --- /dev/null +++ b/tests/test_stub_bam.nf.test @@ -0,0 +1,339 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + profile "test" + options "-stub" // TODO remove once reference files are available + tag "pipeline" + tag "pipeline_rnafusion" + tag "test_stub_bam" + + test("stub test all") { + + when { + params { + outdir = "$outputDir" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test arriba") { + + when { + params { + outdir = "$outputDir" + tools = "arriba" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test ctatsplicing") { + + when { + params { + outdir = "$outputDir" + tools = "ctatsplicing" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fusioncatcher") { + + when { + params { + outdir = "$outputDir" + tools = "fusioncatcher" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test starfusion") { + + when { + params { + outdir = "$outputDir" + tools = "starfusion" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test stringtie") { + + when { + params { + outdir = "$outputDir" + tools = "stringtie" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fusionreport") { + + when { + params { + outdir = "$outputDir" + tools = "fusionreport,arriba,starfusion,fusioncatcher" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fastp") { + + when { + params { + outdir = "$outputDir" + tools = "fastp" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test salmon") { + + when { + params { + outdir = "$outputDir" + tools = "salmon" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } + + test("stub test fusioninspector") { + + when { + params { + outdir = "$outputDir" + tools = "fusioninspector,arriba,fusionreport" + fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + input = "${projectDir}/tests/yml/bam.yml" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + // Ignore files with timestamps in their names + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + // def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') //TODO uncomment once -stub is removed + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + // stable_path // TODO uncomment once -stub is removed + ).match() } + ) + } + } +} diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap new file mode 100644 index 000000000..c6a9f319e --- /dev/null +++ b/tests/test_stub_bam.nf.test.snap @@ -0,0 +1,1972 @@ +{ + "stub test starfusion": { + "content": [ + 14, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:09:48.999599917" + }, + "stub test stringtie": { + "content": [ + 15, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:10:23.893097743" + }, + "stub test arriba": { + "content": [ + 14, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:07:56.264754749" + }, + "stub test fusioninspector": { + "content": [ + 23, + { + "AGAT_CONVERTSPGFF2TSV": { + "agat": "v1.4.0" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "ARRIBA_VISUALISATION": { + "arriba": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONINSPECTOR": { + "STAR-Fusion": null + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "VCF_COLLECT": { + "python": "3.11.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/test.tsv", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "arriba_visualisation", + "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioninspector", + "fusioninspector/IGV_inputs", + "fusioninspector/IGV_inputs/TrinityFusion.bed", + "fusioninspector/IGV_inputs/cytoBand.txt", + "fusioninspector/IGV_inputs/test.ROI.bed", + "fusioninspector/IGV_inputs/test.bed", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", + "fusioninspector/IGV_inputs/test.consolidated.bam", + "fusioninspector/IGV_inputs/test.consolidated.bam.bai", + "fusioninspector/IGV_inputs/test.fa", + "fusioninspector/IGV_inputs/test.fa.fai", + "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", + "fusioninspector/IGV_inputs/test.gtf", + "fusioninspector/IGV_inputs/test.igv.Pfam.bed", + "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", + "fusioninspector/IGV_inputs/test.junction_reads.bam", + "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", + "fusioninspector/IGV_inputs/test.spanning_reads.bam", + "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", + "fusioninspector/IGV_inputs/tracks.json", + "fusioninspector/chckpts_dir", + "fusioninspector/chckpts_dir/EM_adj_counts.ok", + "fusioninspector/chckpts_dir/add_FFPM.ok", + "fusioninspector/chckpts_dir/add_splice_info.ok", + "fusioninspector/chckpts_dir/append_microH_info.ok", + "fusioninspector/chckpts_dir/blast_filter.ok", + "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", + "fusioninspector/chckpts_dir/cp_consol_bam.ok", + "fusioninspector/chckpts_dir/cp_contigs_file_workdir", + "fusioninspector/chckpts_dir/cp_final.ok", + "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", + "fusioninspector/chckpts_dir/cp_tracks_json.ok", + "fusioninspector/chckpts_dir/create_fi_igvjs.ok", + "fusioninspector/chckpts_dir/cytoband.ok", + "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", + "fusioninspector/chckpts_dir/final.abridged.ok", + "fusioninspector/chckpts_dir/fusion_annotator.ok", + "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", + "fusioninspector/chckpts_dir/fusion_contigs.ok", + "fusioninspector/chckpts_dir/fusion_reports_html.ok", + "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", + "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", + "fusioninspector/chckpts_dir/index_consol_bam.ok", + "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", + "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", + "fusioninspector/chckpts_dir/mark_dup_reads.ok", + "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", + "fusioninspector/chckpts_dir/merged_contig_fai.ok", + "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", + "fusioninspector/chckpts_dir/microH.dat.ok", + "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", + "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", + "fusioninspector/chckpts_dir/prep_spanning_reads.ok", + "fusioninspector/chckpts_dir/run_STAR.ok", + "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", + "fusioninspector/chckpts_dir/span_reads_acc.ok", + "fusioninspector/chckpts_dir/test.bed.bedsort.ok", + "fusioninspector/chckpts_dir/test.bed.bgzip.ok", + "fusioninspector/chckpts_dir/test.bed.tabix.ok", + "fusioninspector/fi_workdir", + "fusioninspector/fi_workdir/Log.final.out", + "fusioninspector/fi_workdir/Log.out", + "fusioninspector/fi_workdir/Log.progress.out", + "fusioninspector/fi_workdir/SJ.out.tab", + "fusioninspector/fi_workdir/_STARgenome", + "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", + "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", + "fusioninspector/fi_workdir/microH.dat", + "fusioninspector/fi_workdir/pipeliner.456.cmds", + "fusioninspector/fi_workdir/star_align.ok", + "fusioninspector/fi_workdir/test.fa", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", + "fusioninspector/fi_workdir/test.gtf", + "fusioninspector/fi_workdir/test.igv.Pfam.gff3", + "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", + "fusioninspector/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test.FusionInspector.fusions.tsv", + "fusioninspector/test.FusionInspector.log", + "fusioninspector/test.coding_effect", + "fusioninspector/test.fusion_inspector_web.html", + "fusioninspector/test.gtf", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "vcf", + "vcf/test_fusion_data.vcf.gz" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T11:06:49.393745077" + }, + "stub test salmon": { + "content": [ + 14, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:12:30.758487268" + }, + "stub test ctatsplicing": { + "content": [ + 16, + { + "CTATSPLICING_PREPGENOMELIB": { + "ctat-splicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "ctatsplicing", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:08:38.341565744" + }, + "stub test fusionreport": { + "content": [ + 20, + { + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:11:07.156105951" + }, + "stub test fastp": { + "content": [ + 13, + { + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:11:47.209265436" + }, + "stub test fusioncatcher": { + "content": [ + 13, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T10:09:12.170433159" + }, + "stub test all": { + "content": [ + 35, + { + "AGAT_CONVERTSPGFF2TSV": { + "agat": "v1.4.0" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.4.0" + }, + "ARRIBA_DOWNLOAD": { + "arriba_download": "2.4.0" + }, + "ARRIBA_VISUALISATION": { + "arriba": "2.4.0" + }, + "CTATSPLICING_PREPGENOMELIB": { + "ctat-splicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FOR_FASTP": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_BUILD": { + "fusioncatcher": "1.33" + }, + "FUSIONCATCHER_DETECT": { + "fusioncatcher": "1.33" + }, + "FUSIONINSPECTOR": { + "STAR-Fusion": null + }, + "FUSIONREPORT": { + "fusion_report": "2.1.5" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "2.1.5" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.5.0.0", + "samtools": "1.19.2" + }, + "GENCODE_DOWNLOAD": { + "wget": null + }, + "GET_RRNA_TRANSCRIPTS": { + "get_rrna_transcripts": "v1.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": null + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION": { + "STAR-Fusion": "1.14.0" + }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.2, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "VCF_COLLECT": { + "python": "3.11.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/test.tsv", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "arriba_visualisation", + "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", + "ctatsplicing", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/human_v46", + "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", + "fusioncatcher/test.fusioncatcher.fusion-genes.txt", + "fusioncatcher/test.fusioncatcher.log", + "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioninspector", + "fusioninspector/IGV_inputs", + "fusioninspector/IGV_inputs/TrinityFusion.bed", + "fusioninspector/IGV_inputs/cytoBand.txt", + "fusioninspector/IGV_inputs/test.ROI.bed", + "fusioninspector/IGV_inputs/test.bed", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", + "fusioninspector/IGV_inputs/test.consolidated.bam", + "fusioninspector/IGV_inputs/test.consolidated.bam.bai", + "fusioninspector/IGV_inputs/test.fa", + "fusioninspector/IGV_inputs/test.fa.fai", + "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", + "fusioninspector/IGV_inputs/test.gtf", + "fusioninspector/IGV_inputs/test.igv.Pfam.bed", + "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", + "fusioninspector/IGV_inputs/test.junction_reads.bam", + "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", + "fusioninspector/IGV_inputs/test.spanning_reads.bam", + "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", + "fusioninspector/IGV_inputs/tracks.json", + "fusioninspector/chckpts_dir", + "fusioninspector/chckpts_dir/EM_adj_counts.ok", + "fusioninspector/chckpts_dir/add_FFPM.ok", + "fusioninspector/chckpts_dir/add_splice_info.ok", + "fusioninspector/chckpts_dir/append_microH_info.ok", + "fusioninspector/chckpts_dir/blast_filter.ok", + "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", + "fusioninspector/chckpts_dir/cp_consol_bam.ok", + "fusioninspector/chckpts_dir/cp_contigs_file_workdir", + "fusioninspector/chckpts_dir/cp_final.ok", + "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", + "fusioninspector/chckpts_dir/cp_tracks_json.ok", + "fusioninspector/chckpts_dir/create_fi_igvjs.ok", + "fusioninspector/chckpts_dir/cytoband.ok", + "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", + "fusioninspector/chckpts_dir/final.abridged.ok", + "fusioninspector/chckpts_dir/fusion_annotator.ok", + "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", + "fusioninspector/chckpts_dir/fusion_contigs.ok", + "fusioninspector/chckpts_dir/fusion_reports_html.ok", + "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", + "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", + "fusioninspector/chckpts_dir/index_consol_bam.ok", + "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", + "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", + "fusioninspector/chckpts_dir/mark_dup_reads.ok", + "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", + "fusioninspector/chckpts_dir/merged_contig_fai.ok", + "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", + "fusioninspector/chckpts_dir/microH.dat.ok", + "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", + "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", + "fusioninspector/chckpts_dir/prep_spanning_reads.ok", + "fusioninspector/chckpts_dir/run_STAR.ok", + "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", + "fusioninspector/chckpts_dir/span_reads_acc.ok", + "fusioninspector/chckpts_dir/test.bed.bedsort.ok", + "fusioninspector/chckpts_dir/test.bed.bgzip.ok", + "fusioninspector/chckpts_dir/test.bed.tabix.ok", + "fusioninspector/fi_workdir", + "fusioninspector/fi_workdir/Log.final.out", + "fusioninspector/fi_workdir/Log.out", + "fusioninspector/fi_workdir/Log.progress.out", + "fusioninspector/fi_workdir/SJ.out.tab", + "fusioninspector/fi_workdir/_STARgenome", + "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", + "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", + "fusioninspector/fi_workdir/microH.dat", + "fusioninspector/fi_workdir/pipeliner.456.cmds", + "fusioninspector/fi_workdir/star_align.ok", + "fusioninspector/fi_workdir/test.fa", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", + "fusioninspector/fi_workdir/test.gtf", + "fusioninspector/fi_workdir/test.igv.Pfam.gff3", + "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", + "fusioninspector/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test.FusionInspector.fusions.tsv", + "fusioninspector/test.FusionInspector.log", + "fusioninspector/test.coding_effect", + "fusioninspector/test.fusion_inspector_web.html", + "fusioninspector/test.gtf", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "get", + "get/rrna.bed", + "get/rrna.gtf", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/arriba", + "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", + "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", + "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", + "references/fusion_report_db", + "references/fusion_report_db/DB-timestamp.txt", + "references/fusion_report_db/cosmic.db", + "references/fusion_report_db/fusion_report.log", + "references/fusion_report_db/fusiongdb2.db", + "references/fusion_report_db/mitelman.db", + "references/gencode", + "references/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/gffread", + "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/hgnc", + "references/hgnc/HGNC-DB-timestamp.txt", + "references/hgnc/hgnc_complete_set.txt", + "references/salmon", + "references/salmon/salmon", + "references/salmon/salmon/complete_ref_lens.bin", + "references/salmon/salmon/ctable.bin", + "references/salmon/salmon/ctg_offsets.bin", + "references/salmon/salmon/duplicate_clusters.tsv", + "references/salmon/salmon/info.json", + "references/salmon/salmon/mphf.bin", + "references/salmon/salmon/pos.bin", + "references/salmon/salmon/pre_indexing.log", + "references/salmon/salmon/rank.bin", + "references/salmon/salmon/refAccumLengths.bin", + "references/salmon/salmon/ref_indexing.log", + "references/salmon/salmon/reflengths.bin", + "references/salmon/salmon/refseq.bin", + "references/salmon/salmon/seq.bin", + "references/salmon/salmon/versionInfo.json", + "references/star", + "references/star/Genome", + "references/star/Log.out", + "references/star/SA", + "references/star/SAindex", + "references/star/chrLength.txt", + "references/star/chrName.txt", + "references/star/chrNameLength.txt", + "references/star/chrStart.txt", + "references/star/exonGeTrInfo.tab", + "references/star/exonInfo.tab", + "references/star/geneInfo.tab", + "references/star/genomeParameters.txt", + "references/star/sjdbInfo.txt", + "references/star/sjdbList.fromGTF.out.tab", + "references/star/sjdbList.out.tab", + "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf", + "vcf", + "vcf/test_fusion_data.vcf.gz" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T11:01:03.888007671" + } +} \ No newline at end of file diff --git a/tests/yml/bam.yml b/tests/yml/bam.yml new file mode 100644 index 000000000..345ac7029 --- /dev/null +++ b/tests/yml/bam.yml @@ -0,0 +1,10 @@ +- sample: test + fastq_1: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/reads_1.fq.gz + fastq_2: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/reads_2.fq.gz + # bam: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/test.Aligned.sortedByCoord.out.bam + # bai: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/test.Aligned.sortedByCoord.out.bam.bai + cram: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/test.Aligned.sortedByCoord.out.cram + crai: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/test.Aligned.sortedByCoord.out.cram.crai + junctions: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/test.Chimeric.out.junction + splice_junctions: https://github.com/nf-core/test-datasets/raw/81cb45949e75cbb85cbf6c5ec9009ab45b160823/testdata/human/test.SJ.out.tab + strandedness: forward From fb787e855203c39531ad0f41961216186967c5cb Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 10 Apr 2025 11:18:29 +0200 Subject: [PATCH 418/887] update stub test snap --- tests/test_stub.nf.test.snap | 242 ++++++++++++++++++++++++++++++++++- 1 file changed, 236 insertions(+), 6 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index a94c79609..e976121ed 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -495,17 +495,26 @@ }, "stub test fusioninspector": { "content": [ - 19, + 24, { + "AGAT_CONVERTSPGFF2TSV": { + "agat": "v1.4.0" + }, "ARRIBA_ARRIBA": { "arriba": "2.4.0" }, "ARRIBA_DOWNLOAD": { "arriba_download": "2.4.0" }, + "ARRIBA_VISUALISATION": { + "arriba": "2.4.0" + }, "FASTQC": { "fastqc": "0.12.1" }, + "FUSIONINSPECTOR": { + "STAR-Fusion": null + }, "FUSIONREPORT": { "fusion_report": "2.1.5" }, @@ -546,6 +555,9 @@ "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "STARFUSION_BUILD": { + "STAR-Fusion": "1.14.0" + }, "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, @@ -556,17 +568,145 @@ "samtools": 1.2, "gawk": "5.1.0" }, + "VCF_COLLECT": { + "python": "3.11.0" + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ + "agat", + "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", + "arriba_visualisation", + "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fusioninspector", + "fusioninspector/IGV_inputs", + "fusioninspector/IGV_inputs/TrinityFusion.bed", + "fusioninspector/IGV_inputs/cytoBand.txt", + "fusioninspector/IGV_inputs/test.ROI.bed", + "fusioninspector/IGV_inputs/test.bed", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", + "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", + "fusioninspector/IGV_inputs/test.consolidated.bam", + "fusioninspector/IGV_inputs/test.consolidated.bam.bai", + "fusioninspector/IGV_inputs/test.fa", + "fusioninspector/IGV_inputs/test.fa.fai", + "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", + "fusioninspector/IGV_inputs/test.gtf", + "fusioninspector/IGV_inputs/test.igv.Pfam.bed", + "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", + "fusioninspector/IGV_inputs/test.junction_reads.bam", + "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", + "fusioninspector/IGV_inputs/test.spanning_reads.bam", + "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", + "fusioninspector/IGV_inputs/tracks.json", + "fusioninspector/chckpts_dir", + "fusioninspector/chckpts_dir/EM_adj_counts.ok", + "fusioninspector/chckpts_dir/add_FFPM.ok", + "fusioninspector/chckpts_dir/add_splice_info.ok", + "fusioninspector/chckpts_dir/append_microH_info.ok", + "fusioninspector/chckpts_dir/blast_filter.ok", + "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", + "fusioninspector/chckpts_dir/cp_consol_bam.ok", + "fusioninspector/chckpts_dir/cp_contigs_file_workdir", + "fusioninspector/chckpts_dir/cp_final.ok", + "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", + "fusioninspector/chckpts_dir/cp_tracks_json.ok", + "fusioninspector/chckpts_dir/create_fi_igvjs.ok", + "fusioninspector/chckpts_dir/cytoband.ok", + "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", + "fusioninspector/chckpts_dir/final.abridged.ok", + "fusioninspector/chckpts_dir/fusion_annotator.ok", + "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", + "fusioninspector/chckpts_dir/fusion_contigs.ok", + "fusioninspector/chckpts_dir/fusion_reports_html.ok", + "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", + "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", + "fusioninspector/chckpts_dir/index_consol_bam.ok", + "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", + "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", + "fusioninspector/chckpts_dir/mark_dup_reads.ok", + "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", + "fusioninspector/chckpts_dir/merged_contig_fai.ok", + "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", + "fusioninspector/chckpts_dir/microH.dat.ok", + "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", + "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", + "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", + "fusioninspector/chckpts_dir/prep_spanning_reads.ok", + "fusioninspector/chckpts_dir/run_STAR.ok", + "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", + "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", + "fusioninspector/chckpts_dir/span_reads_acc.ok", + "fusioninspector/chckpts_dir/test.bed.bedsort.ok", + "fusioninspector/chckpts_dir/test.bed.bgzip.ok", + "fusioninspector/chckpts_dir/test.bed.tabix.ok", + "fusioninspector/fi_workdir", + "fusioninspector/fi_workdir/Log.final.out", + "fusioninspector/fi_workdir/Log.out", + "fusioninspector/fi_workdir/Log.progress.out", + "fusioninspector/fi_workdir/SJ.out.tab", + "fusioninspector/fi_workdir/_STARgenome", + "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", + "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", + "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", + "fusioninspector/fi_workdir/microH.dat", + "fusioninspector/fi_workdir/pipeliner.456.cmds", + "fusioninspector/fi_workdir/star_align.ok", + "fusioninspector/fi_workdir/test.fa", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", + "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", + "fusioninspector/fi_workdir/test.gtf", + "fusioninspector/fi_workdir/test.igv.Pfam.gff3", + "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", + "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", + "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", + "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", + "fusioninspector/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test.FusionInspector.fusions.tsv", + "fusioninspector/test.FusionInspector.log", + "fusioninspector/test.coding_effect", + "fusioninspector/test.fusion_inspector_web.html", + "fusioninspector/test.gtf", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -633,6 +773,82 @@ "references/star/sjdbList.fromGTF.out.tab", "references/star/sjdbList.out.tab", "references/star/transcriptInfo.tab", + "references/starfusion", + "references/starfusion/ctat_genome_lib_build_dir", + "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "star", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", @@ -651,14 +867,16 @@ "star/test.toTranscriptome.out.bam", "star/test.unmapped_1.fastq.gz", "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam" + "star/testXd.out.bam", + "vcf", + "vcf/test_fusion_data.vcf.gz" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:53:29.478575932" + "timestamp": "2025-04-10T11:17:39.031870872" }, "stub test salmon": { "content": [ @@ -1386,8 +1604,11 @@ }, "stub test all": { "content": [ - 34, + 36, { + "AGAT_CONVERTSPGFF2TSV": { + "agat": "v1.4.0" + }, "ARRIBA_ARRIBA": { "arriba": "2.4.0" }, @@ -1492,11 +1713,16 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, + "VCF_COLLECT": { + "python": "3.11.0" + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ + "agat", + "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", @@ -1650,7 +1876,9 @@ "fusioninspector/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test.FusionInspector.fusions.tsv", "fusioninspector/test.FusionInspector.log", + "fusioninspector/test.coding_effect", "fusioninspector/test.fusion_inspector_web.html", + "fusioninspector/test.gtf", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -1850,13 +2078,15 @@ "stringtie/test.ballgown", "stringtie/test.coverage.gtf", "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" + "stringtie/test.transcripts.gtf", + "vcf", + "vcf/test_fusion_data.vcf.gz" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:39:16.250051213" + "timestamp": "2025-04-10T11:11:56.869261187" } } \ No newline at end of file From ce5da2b16c334bc08c109932ae3fd5679d599a92 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 10 Apr 2025 11:26:53 +0200 Subject: [PATCH 419/887] update changelog --- CHANGELOG.md | 7 +++++++ workflows/rnafusion.nf | 38 +++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 373d2724d..3bf8819c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `CTATSPLICING_PREPGENOMELIB` to update the starfusion genome library directory with a cancer splicing index. [#610](https://github.com/nf-core/rnafusion/pull/610) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) - Add nf-test to local module: `ARRIBA_VISUALISATION`. [#625](https://github.com/nf-core/rnafusion/pull/625) +- Added the following fields to the samplesheet [#647](https://github.com/nf-core/rnafusion/pull/647): + - `bam`: A BAM file aligned with STAR, it's the responsibility of the pipeline user to make sure this file has been correctly called. + - `bai`: The index of the BAM file, this is not required when a `bam` file has been given but can increase the pipeline speed a bit. + - `cram`: A CRAM file aligned with STAR, it's the responsibility of the pipeline user to make sure this file has been correctly called. + - `crai`: The index of the CRAM file, this is not required when a `cram` file has been given but can increase the pipeline speed a bit. + - `junctions`: A file containing the junctions determined by STAR (needed by `starfusion` and `ctatsplicing`) + - `splice_junctions` A file containing the splice junctions determined by STAR (needed by `ctatsplicing`) ### Changed diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 7afd192fc..374edc946 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -56,25 +56,25 @@ workflow RNAFUSION { def ch_input = ch_samplesheet_input.map { meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions -> def align = false - // Check if we need split junctions - if (tools.contains("ctatsplicing") && !splice_junctions) { - align = true - } - - // Check if we need junctions - if (tools.intersect(["starfusion", "ctatsplicing"]) && !junctions) { - align = true - } - - // Check if we need BAM or CRAM files - if (tools.intersect(["ctatsplicing", "arriba", "stringtie", "fusioninspector"]) && !bam && !cram) { - align = true - } - - // Check if there are fastqs when we need to align - if (align && !fastqs) { - error("No fastq files found for ${meta.id}. Either provide fastq files to align or provide a BAM/CRAM file, a junctions file and a split junctions file.") - } + // Check if we need split junctions + if (tools.contains("ctatsplicing") && !splice_junctions) { + align = true + } + + // Check if we need junctions + if (tools.intersect(["starfusion", "ctatsplicing"]) && !junctions) { + align = true + } + + // Check if we need BAM or CRAM files + if (tools.intersect(["ctatsplicing", "arriba", "stringtie", "fusioninspector"]) && !bam && !cram) { + align = true + } + + // Check if there are fastqs when we need to align + if (align && !fastqs) { + error("No fastq files found for ${meta.id}. Either provide fastq files to align or provide a BAM/CRAM file, a junctions file and a split junctions file.") + } def new_meta = meta + [align:align] return [ new_meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions ] } From 9c971965893f2c2b43c6484c72bb3395d1fa9753 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 10 Apr 2025 11:30:18 +0200 Subject: [PATCH 420/887] add new tests to ci --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0dcb8fdb0..295c1be94 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,6 +40,7 @@ jobs: test_profile: - "test_stub" - "test_build" + - "test_stub_bam" compute_profile: - "docker" - "singularity" From cfb103275c339c1d53b106ce3b6ed3d1e59bd7e4 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 10:24:56 +0200 Subject: [PATCH 421/887] remove gtf and coding_effect from fusioninspector stub --- modules/local/fusioninspector/main.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 1eb388578..ae368b5e7 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -54,8 +54,6 @@ process FUSIONINSPECTOR { touch ${prefix}.FusionInspector.fusions.abridged.tsv touch ${prefix}.FusionInspector.fusions.tsv touch ${prefix}.fusion_inspector_web.html - touch ${prefix}.gtf - touch ${prefix}.coding_effect mkdir -p chckpts_dir touch chckpts_dir/add_FFPM.ok touch chckpts_dir/add_splice_info.ok From b47518e2dbb49ce2fc1cccdc7172f64ceb6816c3 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 10:26:36 +0200 Subject: [PATCH 422/887] make fastq_2 required again --- assets/schema_input.json | 3 +-- docs/usage.md | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 573619ce9..60f8369af 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -76,14 +76,13 @@ } }, "dependentRequired": { - "fastq_2": ["fastq_1"], "bai": ["bam"], "crai": ["cram"] }, "required": ["sample", "strandedness"], "anyOf": [ { - "required": ["fastq_1"] + "required": ["fastq_1", "fastq_2"] }, { "required": ["bam"] diff --git a/docs/usage.md b/docs/usage.md index 7e238e8b1..a87affb0f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -131,8 +131,8 @@ As you can see above for multiple runs of the same sample, the `sample` name has | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | | `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | :white_check_mark: | | `strandedness` | Strandedness: forward or reverse. | :white_check_mark: | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ file(s) because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | :grey_question: | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | :x: | +| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | :grey_question: | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq. It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`.gz". | :grey_question: | | `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | :grey_question: | | `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | :x: | | `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | :grey_question: | From 7541df52f22fd0132b2262386eb613f7fd3291f9 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 10:27:19 +0200 Subject: [PATCH 423/887] prettier --- docs/usage.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index a87affb0f..4f196bf05 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -127,18 +127,18 @@ TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,forward As you can see above for multiple runs of the same sample, the `sample` name has to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Note that multiple rows per sample are not supported for samples that contain `bam`, `cram`, `junctions` and/or `splice_junctions` files. -| Column | Description | Required | -| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | :white_check_mark: | -| `strandedness` | Strandedness: forward or reverse. | :white_check_mark: | +| Column | Description | Required | +| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | :white_check_mark: | +| `strandedness` | Strandedness: forward or reverse. | :white_check_mark: | | `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | :grey_question: | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq. It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`.gz". | :grey_question: | -| `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | :grey_question: | -| `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | :x: | -| `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | :grey_question: | -| `crai` | Full path to the index of the CRAM file. File has to exist and must have the extension ".crai". | :x: | -| `junctions` | Full path to the file containing chimeric junctions determined by STAR. File has to exist and must have the extension ".junction". It's the responsibility of the pipeline user to make sure this file has been correctly created. The junctions file is required to run `starfusion` and `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | -| `splice_junctions` | Full path to the file containing splice junctions determined by STAR. File has to exist and must have the extension ".SJ.out.tab". It's the responsibility of the pipeline user to make sure this file has been correctly created. The splice junctions file is required to run `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq. It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`.gz". | :grey_question: | +| `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | :grey_question: | +| `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | :x: | +| `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | :grey_question: | +| `crai` | Full path to the index of the CRAM file. File has to exist and must have the extension ".crai". | :x: | +| `junctions` | Full path to the file containing chimeric junctions determined by STAR. File has to exist and must have the extension ".junction". It's the responsibility of the pipeline user to make sure this file has been correctly created. The junctions file is required to run `starfusion` and `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | +| `splice_junctions` | Full path to the file containing splice junctions determined by STAR. File has to exist and must have the extension ".SJ.out.tab". It's the responsibility of the pipeline user to make sure this file has been correctly created. The splice junctions file is required to run `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | :white_check_mark: = Required :x: = Not required From 491caae4665e00046c9dfb971c6e8220ddd233b2 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Fri, 11 Apr 2025 09:25:55 +0000 Subject: [PATCH 424/887] fix snaps --- tests/test_stub.nf.test.snap | 36 ++++++-------------------------- tests/test_stub_bam.nf.test.snap | 36 ++++++-------------------------- 2 files changed, 12 insertions(+), 60 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index e976121ed..86f939825 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -495,11 +495,8 @@ }, "stub test fusioninspector": { "content": [ - 24, + 22, { - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.0" - }, "ARRIBA_ARRIBA": { "arriba": "2.4.0" }, @@ -568,16 +565,11 @@ "samtools": 1.2, "gawk": "5.1.0" }, - "VCF_COLLECT": { - "python": "3.11.0" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "agat", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", @@ -704,9 +696,7 @@ "fusioninspector/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test.FusionInspector.fusions.tsv", "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.coding_effect", "fusioninspector/test.fusion_inspector_web.html", - "fusioninspector/test.gtf", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -867,16 +857,14 @@ "star/test.toTranscriptome.out.bam", "star/test.unmapped_1.fastq.gz", "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam", - "vcf", - "vcf/test_fusion_data.vcf.gz" + "star/testXd.out.bam" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T11:17:39.031870872" + "timestamp": "2025-04-11T09:17:30.682830486" }, "stub test salmon": { "content": [ @@ -1604,11 +1592,8 @@ }, "stub test all": { "content": [ - 36, + 34, { - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.0" - }, "ARRIBA_ARRIBA": { "arriba": "2.4.0" }, @@ -1713,16 +1698,11 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, - "VCF_COLLECT": { - "python": "3.11.0" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "agat", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", @@ -1876,9 +1856,7 @@ "fusioninspector/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test.FusionInspector.fusions.tsv", "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.coding_effect", "fusioninspector/test.fusion_inspector_web.html", - "fusioninspector/test.gtf", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -2078,15 +2056,13 @@ "stringtie/test.ballgown", "stringtie/test.coverage.gtf", "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf", - "vcf", - "vcf/test_fusion_data.vcf.gz" + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T11:11:56.869261187" + "timestamp": "2025-04-11T09:09:47.739799535" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index c6a9f319e..feb129fc2 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -417,11 +417,8 @@ }, "stub test fusioninspector": { "content": [ - 23, + 21, { - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.0" - }, "ARRIBA_ARRIBA": { "arriba": "2.4.0" }, @@ -482,16 +479,11 @@ "samtools": 1.2, "gawk": "5.1.0" }, - "VCF_COLLECT": { - "python": "3.11.0" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "agat", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", @@ -618,9 +610,7 @@ "fusioninspector/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test.FusionInspector.fusions.tsv", "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.coding_effect", "fusioninspector/test.fusion_inspector_web.html", - "fusioninspector/test.gtf", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -765,16 +755,14 @@ "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "star", "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "vcf", - "vcf/test_fusion_data.vcf.gz" + "star/test.Aligned.sortedByCoord.out.bam.bai" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T11:06:49.393745077" + "timestamp": "2025-04-11T09:25:46.143222996" }, "stub test salmon": { "content": [ @@ -1508,11 +1496,8 @@ }, "stub test all": { "content": [ - 35, + 33, { - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.0" - }, "ARRIBA_ARRIBA": { "arriba": "2.4.0" }, @@ -1609,16 +1594,11 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, - "VCF_COLLECT": { - "python": "3.11.0" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "agat", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", @@ -1772,9 +1752,7 @@ "fusioninspector/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test.FusionInspector.fusions.tsv", "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.coding_effect", "fusioninspector/test.fusion_inspector_web.html", - "fusioninspector/test.gtf", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -1958,15 +1936,13 @@ "stringtie/test.ballgown", "stringtie/test.coverage.gtf", "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf", - "vcf", - "vcf/test_fusion_data.vcf.gz" + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T11:01:03.888007671" + "timestamp": "2025-04-11T09:18:32.616357228" } } \ No newline at end of file From 2854374d4051db620530e0a0c029254054f93808 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 11:44:58 +0200 Subject: [PATCH 425/887] update fusioncatcher to nf-core --- conf/modules.config | 16 +++- modules.json | 10 +++ .../local/fusioncatcher/build/environment.yml | 5 -- modules/local/fusioncatcher/build/main.nf | 45 ----------- modules/local/fusioncatcher/build/meta.yml | 24 ------ .../fusioncatcher/build/environment.yml | 7 ++ modules/nf-core/fusioncatcher/build/main.nf | 45 +++++++++++ modules/nf-core/fusioncatcher/build/meta.yml | 47 +++++++++++ .../fusioncatcher/build/tests/main.nf.test | 35 +++++++++ .../build/tests/main.nf.test.snap | 41 ++++++++++ .../fusioncatcher/environment.yml | 7 ++ .../fusioncatcher/fusioncatcher/main.nf | 65 ++++++++++++++++ .../fusioncatcher/fusioncatcher/meta.yml | 78 +++++++++++++++++++ .../fusioncatcher/tests/main.nf.test | 43 ++++++++++ .../fusioncatcher/tests/main.nf.test.snap | 73 +++++++++++++++++ nextflow.config | 1 + nextflow_schema.json | 4 + subworkflows/local/build_references.nf | 12 ++- .../local/fusioncatcher_workflow/main.nf | 9 +-- 19 files changed, 484 insertions(+), 83 deletions(-) delete mode 100644 modules/local/fusioncatcher/build/environment.yml delete mode 100644 modules/local/fusioncatcher/build/main.nf delete mode 100644 modules/local/fusioncatcher/build/meta.yml create mode 100644 modules/nf-core/fusioncatcher/build/environment.yml create mode 100644 modules/nf-core/fusioncatcher/build/main.nf create mode 100644 modules/nf-core/fusioncatcher/build/meta.yml create mode 100644 modules/nf-core/fusioncatcher/build/tests/main.nf.test create mode 100644 modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap create mode 100644 modules/nf-core/fusioncatcher/fusioncatcher/environment.yml create mode 100644 modules/nf-core/fusioncatcher/fusioncatcher/main.nf create mode 100644 modules/nf-core/fusioncatcher/fusioncatcher/meta.yml create mode 100644 modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test create mode 100644 modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index 67b73e49a..fa2118eba 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -87,8 +87,20 @@ process { ] } - withName: 'FUSIONCATCHER' { - ext.args = "--limitSjdbInsertNsj ${params.fusioncatcher_limitSjdbInsertNsj}" + withName: 'FUSIONCATCHER_FUSIONCATCHER' { + ext.args = {[ + "--limitSjdbInsertNsj ${params.fusioncatcher_limitSjdbInsertNsj}", + "--skip-blat", + meta.single_end ? "--single-end" : "", + ].join(' ')} + } + + withName: 'FUSIONCATCHER_BUILD' { + publishDir = [ + path: { "${params.genomes_base}/fusioncatcher" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'FUSIONCATCHER_DOWNLOAD' { diff --git a/modules.json b/modules.json index a0547e179..09978e1bb 100644 --- a/modules.json +++ b/modules.json @@ -40,6 +40,16 @@ "git_sha": "08108058ea36a63f141c25c4e75f9f872a5b2296", "installed_by": ["modules"] }, + "fusioncatcher/build": { + "branch": "master", + "git_sha": "5781b9eaa352f23756c3cc98525ee549bbcc612b", + "installed_by": ["modules"] + }, + "fusioncatcher/fusioncatcher": { + "branch": "master", + "git_sha": "2a227f75f33415f74a884ef8b33555b151e33de9", + "installed_by": ["modules"] + }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", diff --git a/modules/local/fusioncatcher/build/environment.yml b/modules/local/fusioncatcher/build/environment.yml deleted file mode 100644 index 8e83de36b..000000000 --- a/modules/local/fusioncatcher/build/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf deleted file mode 100644 index db1c72107..000000000 --- a/modules/local/fusioncatcher/build/main.nf +++ /dev/null @@ -1,45 +0,0 @@ -process FUSIONCATCHER_BUILD { - tag "fusioncatcher_build" - label 'process_medium' - - conda "${projectDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : - 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" - - input: - val genome_gencode_version - - output: - tuple env(meta), path("human_v${genome_gencode_version}"), emit: reference - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - - def args = task.ext.args ?: '' - meta = [ id: "human_v${genome_gencode_version}" ] - """ - fusioncatcher-build.py \\ - -g homo_sapiens \\ - -o human_v${genome_gencode_version} \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" - END_VERSIONS - """ - - stub: - """ - mkdir human_v${genome_gencode_version} - touch human_v${genome_gencode_version}/ensembl_fully_overlapping_genes.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" - END_VERSIONS - """ -} diff --git a/modules/local/fusioncatcher/build/meta.yml b/modules/local/fusioncatcher/build/meta.yml deleted file mode 100644 index 202be7e17..000000000 --- a/modules/local/fusioncatcher/build/meta.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: fusioncatcher_build -description: Build genome for fusioncatcher -keywords: - - sort -tools: - - fusioncatcher: - description: Build genome for fusioncatcher - homepage: https://github.com/ndaniel/fusioncatcher/ - documentation: https://github.com/ndaniel/fusioncatcher/blob/master/doc/manual.md - tool_dev_url: https://github.com/ndaniel/fusioncatcher/ - doi: "10.1101/011650" - licence: ["GPL v3"] - -output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - reference: - type: directory - description: Path to fusioncatcher references - -authors: - - "@praveenraj2018, @rannick" diff --git a/modules/nf-core/fusioncatcher/build/environment.yml b/modules/nf-core/fusioncatcher/build/environment.yml new file mode 100644 index 000000000..25f7417c5 --- /dev/null +++ b/modules/nf-core/fusioncatcher/build/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::fusioncatcher=1.33" diff --git a/modules/nf-core/fusioncatcher/build/main.nf b/modules/nf-core/fusioncatcher/build/main.nf new file mode 100644 index 000000000..c24865abb --- /dev/null +++ b/modules/nf-core/fusioncatcher/build/main.nf @@ -0,0 +1,45 @@ +process FUSIONCATCHER_BUILD { + 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/fusioncatcher:1.33--hdfd78af_5': + 'biocontainers/fusioncatcher:1.33--hdfd78af_5' }" + + input: + val(meta) + + output: + tuple val(meta), path("${prefix}") , emit: reference + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + fusioncatcher-build \\ + ${args} \\ + --output=${prefix} \\ + --threads=${task.cpus} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" + END_VERSIONS + """ +} diff --git a/modules/nf-core/fusioncatcher/build/meta.yml b/modules/nf-core/fusioncatcher/build/meta.yml new file mode 100644 index 000000000..54ccb5237 --- /dev/null +++ b/modules/nf-core/fusioncatcher/build/meta.yml @@ -0,0 +1,47 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "fusioncatcher_build" +description: Build references for fusioncatcher +keywords: + - references + - fusions + - rna + +tools: + - fusioncatcher: + description: Build genome for fusioncatcher + homepage: https://github.com/ndaniel/fusioncatcher/ + documentation: https://github.com/ndaniel/fusioncatcher/blob/master/doc/manual.md + tool_dev_url: https://github.com/ndaniel/fusioncatcher/ + doi: "10.1101/011650" + licence: ["GPL v3"] + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + + +output: + - reference: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${prefix}: + type: file + description: Diretory containing the fusioncatcher reference files + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/modules/nf-core/fusioncatcher/build/tests/main.nf.test b/modules/nf-core/fusioncatcher/build/tests/main.nf.test new file mode 100644 index 000000000..315c1b117 --- /dev/null +++ b/modules/nf-core/fusioncatcher/build/tests/main.nf.test @@ -0,0 +1,35 @@ +nextflow_process { + + name "Test Process FUSIONCATCHER_BUILD" + script "../main.nf" + process "FUSIONCATCHER_BUILD" + + tag "modules" + tag "modules_nfcore" + tag "fusioncatcher" + tag "fusioncatcher/build" + + // Only stub tests because this module downloads about 50 GB of data + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ id:'test', single_end:false ] // meta map + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap b/modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap new file mode 100644 index 000000000..4a301fcb7 --- /dev/null +++ b/modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap @@ -0,0 +1,41 @@ +{ + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + + ] + ] + ], + "1": [ + "versions.yml:md5,e049cf8ceb55a41bd8f05db0931a8c14" + ], + "reference": [ + [ + { + "id": "test", + "single_end": false + }, + [ + + ] + ] + ], + "versions": [ + "versions.yml:md5,e049cf8ceb55a41bd8f05db0931a8c14" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-10T16:50:59.596294661" + } +} \ No newline at end of file diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/environment.yml b/modules/nf-core/fusioncatcher/fusioncatcher/environment.yml new file mode 100644 index 000000000..25f7417c5 --- /dev/null +++ b/modules/nf-core/fusioncatcher/fusioncatcher/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::fusioncatcher=1.33" diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf new file mode 100644 index 000000000..5c2a8f38d --- /dev/null +++ b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf @@ -0,0 +1,65 @@ +process FUSIONCATCHER_FUSIONCATCHER { + 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/fusioncatcher:1.33--hdfd78af_5': + 'biocontainers/fusioncatcher:1.33--hdfd78af_5' }" + + input: + tuple val(meta), path(fastqs) + tuple val(meta2), path(reference) + + output: + tuple val(meta), path("*.fusion-genes.txt"), emit: fusions, optional: true + tuple val(meta), path("*.summary.txt") , emit: summary, optional: true + tuple val(meta), path("*.log") , emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def input = fastqs.join(",") + + def avail_mem = 3072 + if (!task.memory) { + log.info '[FusionCatcher] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + fusioncatcher \\ + --input=${input} \\ + --output=. \\ + --data=${reference} \\ + --threads=${task.cpus} \\ + --Xmx=${avail_mem} \\ + ${args} + + mv final-list_candidate-fusion-genes.txt ${prefix}.fusion-genes.txt + mv summary_candidate_fusions.txt ${prefix}.summary.txt + mv fusioncatcher.log ${prefix}.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.fusion-genes.txt + touch ${prefix}.summary.txt + touch ${prefix}.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" + END_VERSIONS + """ +} diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml new file mode 100644 index 000000000..bfd7848ef --- /dev/null +++ b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml @@ -0,0 +1,78 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "fusioncatcher_fusioncatcher" +description: FusionCatcher searches for novel/known somatic fusion genes, translocations, and chimeras in RNA-seq data +keywords: + - fusion + - rna + - fastq +tools: + - fusioncatcher: + description: FusionCatcher searches for novel/known somatic fusion genes, translocations, and chimeras in RNA-seq data + homepage: https://github.com/ndaniel/fusioncatcher + documentation: https://github.com/ndaniel/fusioncatcher/wiki + tool_dev_url: https://github.com/ndaniel/fusioncatcher + doi: "10.1101/011650v1" + licence: ["GPL v3"] + identifier: biotools:fusioncatcher + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - fastqs: + type: list + description: A list of input fastq files + pattern: "*.{fastq,fq}.gz" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'sample1', single_end:false ]` + - reference: + type: file + description: Directory containing fusioncatcher reference files + +output: + - fusions: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.fusion-genes.txt": + type: file + description: The detected fusions in the input files + pattern: "*.fusion-genes.txt" + - summary: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.summary.txt": + type: file + description: The generated summary + pattern: "*.summary.txt" + - log: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.log": + type: file + description: The Fusioncatcher log + pattern: "*.log" + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test b/modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test new file mode 100644 index 000000000..28e9d13ec --- /dev/null +++ b/modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test @@ -0,0 +1,43 @@ +nextflow_process { + + name "Test Process FUSIONCATCHER_FUSIONCATCHER" + script "../main.nf" + process "FUSIONCATCHER_FUSIONCATCHER" + + tag "modules" + tag "modules_nfcore" + tag "fusioncatcher" + tag "fusioncatcher/fusioncatcher" + + // Only stub tests because the refernce is about 50 GB of data + + test("sarscov2 - fastq - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ 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] = [ + [ id:'reference'], + [] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test.snap b/modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test.snap new file mode 100644 index 000000000..a1916e553 --- /dev/null +++ b/modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test.snap @@ -0,0 +1,73 @@ +{ + "sarscov2 - fastq - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusion-genes.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,6a54daab2ec7621d8493678e832cf45e" + ], + "fusions": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fusion-genes.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "summary": [ + [ + { + "id": "test", + "single_end": false + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6a54daab2ec7621d8493678e832cf45e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-04-11T11:01:13.392512529" + } +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index d2635cb46..3ab1abf5e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -60,6 +60,7 @@ params { // Download references option download_refs = false + fusioncatcher_build = false // Path to references fasta = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}_dna_primary_assembly.fa" diff --git a/nextflow_schema.json b/nextflow_schema.json index 656f0c2da..e3940c7e1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -156,6 +156,10 @@ "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, + "fusioncatcher_build": { + "type": "boolean", + "description": "Build fusioncatcher references instead of downloading them" + }, "fusioninspector_limitSjdbInsertNsj": { "type": "integer", "fa_icon": "far fa-file-code", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 8612b8f84..0f96253ef 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -5,7 +5,7 @@ */ include { GENCODE_DOWNLOAD } from '../../modules/local/gencode_download/main' -include { FUSIONCATCHER_BUILD } from '../../modules/local/fusioncatcher/build/main' +include { FUSIONCATCHER_DOWNLOAD } from '../../modules/local/fusioncatcher/download/main' include { FUSIONREPORT_DOWNLOAD } from '../../modules/local/fusionreport/download/main' include { HGNC_DOWNLOAD } from '../../modules/local/hgnc/main' include { STARFUSION_BUILD } from '../../modules/local/starfusion/build/main' @@ -18,6 +18,8 @@ include { CTATSPLICING_PREPGENOMELIB } from '../../modules/local/ctatsplici IMPORT NF-CORE MODULES/SUBWORKFLOWS ======================================================================================== */ + +include { FUSIONCATCHER_BUILD } from '../../modules/nf-core/fusioncatcher/build/main' include { ARRIBA_DOWNLOAD } from '../../modules/nf-core/arriba/download/main' include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate/main' @@ -155,9 +157,15 @@ workflow BUILD_REFERENCES { def ch_fusioncatcher_ref = Channel.empty() if (tools.contains("fusioncatcher")) { if (!exists_not_empty(params.fusioncatcher_ref)) { - FUSIONCATCHER_BUILD(params.genome_gencode_version) + if(params.fusioncatcher_build) { + FUSIONCATCHER_BUILD(Channel.value([id:"human_v${params.genome_gencode_version}"])) ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference + } else { + FUSIONCATCHER_DOWNLOAD(params.genome_gencode_version) + ch_versions = ch_versions.mix(FUSIONCATCHER_DOWNLOAD.out.versions) + ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference + } } else { ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { it -> [[id:it.name], it] } diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf index f500bc333..f4f053d2f 100644 --- a/subworkflows/local/fusioncatcher_workflow/main.nf +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -1,9 +1,8 @@ -include { FUSIONCATCHER_DETECT } from '../../../modules/local/fusioncatcher/detect/main' +include { FUSIONCATCHER_FUSIONCATCHER } from '../../../modules/nf-core/fusioncatcher/fusioncatcher/main' // TODO: Remove fusioncatcher_fusions as parameter. // TODO: remove dummy file. Work with Channel.empty() // TODO: if the files were already produced and the user want to skip the module because of this, they should be taken them from the sample sheet -// TODO: harmonize `fusioncatcher` and `fusioncatcher_only` parameters at main workflow level to activate/skip this one. workflow FUSIONCATCHER_WORKFLOW { take: @@ -20,12 +19,12 @@ workflow FUSIONCATCHER_WORKFLOW { .map { meta, _reads, fusions -> [ meta, fusions ] } } else { - FUSIONCATCHER_DETECT ( + FUSIONCATCHER_FUSIONCATCHER ( reads, fusioncatcher_ref ) - ch_fusioncatcher_fusions = FUSIONCATCHER_DETECT.out.fusions - ch_versions = ch_versions.mix(FUSIONCATCHER_DETECT.out.versions) + ch_fusioncatcher_fusions = FUSIONCATCHER_FUSIONCATCHER.out.fusions + ch_versions = ch_versions.mix(FUSIONCATCHER_FUSIONCATCHER.out.versions) } emit: From 3b7827bbce88513fe4de453489fae314d90cff88 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 11:58:42 +0200 Subject: [PATCH 426/887] update changelog + fix linting --- CHANGELOG.md | 1 + modules/nf-core/fusioncatcher/build/meta.yml | 25 ++++---- .../fusioncatcher/fusioncatcher/meta.yml | 62 +++++++++---------- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 373d2724d..e9ea97b6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,6 +78,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) - Fixed the codebase to be compatible with the Nextflow language server [#634](https://github.com/nf-core/rnafusion/pull/634) - Updated the input validation to be more strict. This will prevent more errors down the line in the pipeline [#640](https://github.com/nf-core/rnafusion/pull/640) +- Fusioncatcher build should now work again [#650](https://github.com/nf-core/rnafusion/pull/650) ### Removed diff --git a/modules/nf-core/fusioncatcher/build/meta.yml b/modules/nf-core/fusioncatcher/build/meta.yml index 54ccb5237..dc3604e57 100644 --- a/modules/nf-core/fusioncatcher/build/meta.yml +++ b/modules/nf-core/fusioncatcher/build/meta.yml @@ -23,23 +23,22 @@ input: Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - output: - reference: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - ${prefix}: - type: file - description: Diretory containing the fusioncatcher reference files + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${prefix}: + type: file + description: Diretory containing the fusioncatcher reference files - versions: - - "versions.yml": - type: file - description: File containing software versions - pattern: "versions.yml" + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml index bfd7848ef..ff6647d65 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml +++ b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml @@ -37,40 +37,40 @@ input: output: - fusions: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.fusion-genes.txt": - type: file - description: The detected fusions in the input files - pattern: "*.fusion-genes.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.fusion-genes.txt": + type: file + description: The detected fusions in the input files + pattern: "*.fusion-genes.txt" - summary: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.summary.txt": - type: file - description: The generated summary - pattern: "*.summary.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.summary.txt": + type: file + description: The generated summary + pattern: "*.summary.txt" - log: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.log": - type: file - description: The Fusioncatcher log - pattern: "*.log" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.log": + type: file + description: The Fusioncatcher log + pattern: "*.log" - versions: - - "versions.yml": - type: file - description: File containing software versions - pattern: "versions.yml" + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" From 49ca64a350a1ecef27106a112fb17e7c9c98d361 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 14:14:46 +0200 Subject: [PATCH 427/887] fix output issue in fusioncatcher download --- .../fusioncatcher/detect/environment.yml | 5 -- modules/local/fusioncatcher/detect/main.nf | 59 ------------------- modules/local/fusioncatcher/detect/meta.yml | 53 ----------------- modules/local/fusioncatcher/download/main.nf | 4 +- 4 files changed, 2 insertions(+), 119 deletions(-) delete mode 100644 modules/local/fusioncatcher/detect/environment.yml delete mode 100644 modules/local/fusioncatcher/detect/main.nf delete mode 100644 modules/local/fusioncatcher/detect/meta.yml diff --git a/modules/local/fusioncatcher/detect/environment.yml b/modules/local/fusioncatcher/detect/environment.yml deleted file mode 100644 index 8e83de36b..000000000 --- a/modules/local/fusioncatcher/detect/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - bioconda::fusioncatcher=1.33 diff --git a/modules/local/fusioncatcher/detect/main.nf b/modules/local/fusioncatcher/detect/main.nf deleted file mode 100644 index 7980439f8..000000000 --- a/modules/local/fusioncatcher/detect/main.nf +++ /dev/null @@ -1,59 +0,0 @@ -process FUSIONCATCHER_DETECT { - tag "$meta.id" - label 'process_high' - - conda "${projectDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : - 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" - - input: - tuple val(meta), path(fastqs, stageAs: "input/*") - tuple val(meta2), path(reference) - - output: - tuple val(meta), path("*.fusioncatcher.fusion-genes.txt"), emit: fusions, optional: true - tuple val(meta), path("*.fusioncatcher.summary.txt") , emit: summary, optional: true - tuple val(meta), path("*.fusioncatcher.log") , emit: log - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def single_end = meta.single_end ? "--single-end" : "" - """ - fusioncatcher.py \\ - -d ${reference} \\ - -i input \\ - -p ${task.cpus} \\ - -o . \\ - --skip-blat \\ - ${single_end} \\ - ${args} - - mv final-list_candidate-fusion-genes.txt ${prefix}.fusioncatcher.fusion-genes.txt - mv summary_candidate_fusions.txt ${prefix}.fusioncatcher.summary.txt - mv fusioncatcher.log ${prefix}.fusioncatcher.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fusioncatcher: "\$(fusioncatcher.py --version 2>&1 | awk '{print \$2}')" - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - - """ - touch ${prefix}.fusioncatcher.fusion-genes.txt - touch ${prefix}.fusioncatcher.summary.txt - touch ${prefix}.fusioncatcher.log - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fusioncatcher: "\$(fusioncatcher.py --version 2>&1 | awk '{print \$2}')" - END_VERSIONS - """ -} diff --git a/modules/local/fusioncatcher/detect/meta.yml b/modules/local/fusioncatcher/detect/meta.yml deleted file mode 100644 index 7c8ee425a..000000000 --- a/modules/local/fusioncatcher/detect/meta.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: fusioncatcher -description: FusionCatcher searches for novel/known somatic fusion genes, translocations, and chimeras in RNA-seq data -keywords: - - fusioncatcher -tools: - - fusioncatcher: - description: FusionCatcher searches for novel/known somatic fusion genes, translocations, and chimeras in RNA-seq data - homepage: https://github.com/ndaniel/fusioncatcher - documentation: https://github.com/ndaniel/fusioncatcher/wiki - tool_dev_url: https://github.com/ndaniel/fusioncatcher - doi: "10.1101/011650v1" - licence: ["GPL v3"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: FASTQ file - pattern: "*.{fastq}" - - reference: - type: directory - description: Path to fusioncatcher references - pattern: "*" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fusions: - type: file - description: Final list of candidate fusion genes - pattern: "*.fusioncatcher.fusion-genes.txt" - - summary: - type: file - description: Summary of fusion results - pattern: "*.fusioncatcher_summary.txt" - - log: - type: file - description: Log of fusion results - pattern: "*.fusioncatcher.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@praveenraj2018. @rannick" diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index af585d62c..1261c7b7b 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -11,8 +11,8 @@ process FUSIONCATCHER_DOWNLOAD { val genome_gencode_version output: - tuple env(meta), path("*"), emit: reference - path "versions.yml" , emit: versions + tuple env(meta), path("human_v*"), emit: reference + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when From f70e1ec9995700dde697ca422790bb6f81f07a86 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 14:45:51 +0200 Subject: [PATCH 428/887] fix conda declaration in fusioncatcher download --- modules/local/fusioncatcher/download/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 1261c7b7b..6ed3112b9 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -2,7 +2,7 @@ process FUSIONCATCHER_DOWNLOAD { tag "fusioncatcher_download" label 'process_medium' - conda "${projectDir}/environment.yml" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" From 4af85f891e259c11256ea8adc02106d89f214894 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Fri, 11 Apr 2025 12:57:41 +0000 Subject: [PATCH 429/887] fix snap --- tests/test_stub.nf.test.snap | 51 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index a94c79609..78159becb 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -993,10 +993,10 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { + "FUSIONCATCHER_DOWNLOAD": { "fusioncatcher": "1.33" }, - "FUSIONCATCHER_DETECT": { + "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" }, "FUSIONREPORT": { @@ -1064,11 +1064,9 @@ "fastqc/test.html", "fastqc/test.zip", "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -1109,6 +1107,9 @@ "references/fusion_report_db/fusion_report.log", "references/fusion_report_db/fusiongdb2.db", "references/fusion_report_db/mitelman.db", + "references/fusioncatcher", + "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1237,7 +1238,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:43:02.916057311" + "timestamp": "2025-04-11T12:53:31.628103017" }, "stub test fastp": { "content": [ @@ -1320,10 +1321,10 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { + "FUSIONCATCHER_DOWNLOAD": { "fusioncatcher": "1.33" }, - "FUSIONCATCHER_DETECT": { + "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" }, "GATK4_BEDTOINTERVALLIST": { @@ -1353,11 +1354,9 @@ "fastqc/test.html", "fastqc/test.zip", "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "get", @@ -1370,6 +1369,9 @@ "pipeline_info", "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", + "references/fusioncatcher", + "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1382,7 +1384,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:40:58.774714515" + "timestamp": "2025-04-11T12:50:59.896927711" }, "stub test all": { "content": [ @@ -1412,10 +1414,10 @@ "FASTQC_FOR_FASTP": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { + "FUSIONCATCHER_DOWNLOAD": { "fusioncatcher": "1.33" }, - "FUSIONCATCHER_DETECT": { + "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" }, "FUSIONINSPECTOR": { @@ -1527,11 +1529,9 @@ "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", "fusioninspector", "fusioninspector/IGV_inputs", "fusioninspector/IGV_inputs/TrinityFusion.bed", @@ -1691,6 +1691,9 @@ "references/fusion_report_db/fusion_report.log", "references/fusion_report_db/fusiongdb2.db", "references/fusion_report_db/mitelman.db", + "references/fusioncatcher", + "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1857,6 +1860,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:39:16.250051213" + "timestamp": "2025-04-11T12:48:58.038119186" } } \ No newline at end of file From 2e39988352e08f52769302bd524549a98d848c35 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 11 Apr 2025 16:46:05 +0200 Subject: [PATCH 430/887] add tests for exists_not_empty --- .../main.nf} | 38 +-- .../tests/empty_folder/empty_file.txt | 0 .../build_references/tests/functions.nf.test | 273 ++++++++++++++++++ 3 files changed, 292 insertions(+), 19 deletions(-) rename subworkflows/local/{build_references.nf => build_references/main.nf} (85%) create mode 100644 subworkflows/local/build_references/tests/empty_folder/empty_file.txt create mode 100644 subworkflows/local/build_references/tests/functions.nf.test diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references/main.nf similarity index 85% rename from subworkflows/local/build_references.nf rename to subworkflows/local/build_references/main.nf index b54edf900..137e9806a 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references/main.nf @@ -4,28 +4,28 @@ ======================================================================================== */ -include { GENCODE_DOWNLOAD } from '../../modules/local/gencode_download/main' -include { FUSIONCATCHER_BUILD } from '../../modules/local/fusioncatcher/build/main' -include { FUSIONREPORT_DOWNLOAD } from '../../modules/local/fusionreport/download/main' -include { HGNC_DOWNLOAD } from '../../modules/local/hgnc/main' -include { STARFUSION_BUILD } from '../../modules/local/starfusion/build/main' -include { GTF_TO_REFFLAT } from '../../modules/local/uscs/custom_gtftogenepred/main' -include { GET_RRNA_TRANSCRIPTS } from '../../modules/local/get_rrna_transcript/main' -include { CTATSPLICING_PREPGENOMELIB } from '../../modules/local/ctatsplicing/prepgenomelib/main.nf' +include { GENCODE_DOWNLOAD } from '../../../modules/local/gencode_download/main' +include { FUSIONCATCHER_BUILD } from '../../../modules/local/fusioncatcher/build/main' +include { FUSIONREPORT_DOWNLOAD } from '../../../modules/local/fusionreport/download/main' +include { HGNC_DOWNLOAD } from '../../../modules/local/hgnc/main' +include { STARFUSION_BUILD } from '../../../modules/local/starfusion/build/main' +include { GTF_TO_REFFLAT } from '../../../modules/local/uscs/custom_gtftogenepred/main' +include { GET_RRNA_TRANSCRIPTS } from '../../../modules/local/get_rrna_transcript/main' +include { CTATSPLICING_PREPGENOMELIB } from '../../../modules/local/ctatsplicing/prepgenomelib/main.nf' /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS ======================================================================================== */ -include { ARRIBA_DOWNLOAD } from '../../modules/nf-core/arriba/download/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' -include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate/main' -include { GATK4_CREATESEQUENCEDICTIONARY } from '../../modules/nf-core/gatk4/createsequencedictionary/main' -include { GATK4_BEDTOINTERVALLIST } from '../../modules/nf-core/gatk4/bedtointervallist/main' -include { SALMON_INDEX } from '../../modules/nf-core/salmon/index/main' -include { GFFREAD } from '../../modules/nf-core/gffread/main' -include { getFileSuffix } from '../../modules/nf-core/cat/cat/main.nf' +include { ARRIBA_DOWNLOAD } from '../../../modules/nf-core/arriba/download/main' +include { SAMTOOLS_FAIDX } from '../../../modules/nf-core/samtools/faidx/main' +include { STAR_GENOMEGENERATE } from '../../../modules/nf-core/star/genomegenerate/main' +include { GATK4_CREATESEQUENCEDICTIONARY } from '../../../modules/nf-core/gatk4/createsequencedictionary/main' +include { GATK4_BEDTOINTERVALLIST } from '../../../modules/nf-core/gatk4/bedtointervallist/main' +include { SALMON_INDEX } from '../../../modules/nf-core/salmon/index/main' +include { GFFREAD } from '../../../modules/nf-core/gffread/main' +include { getFileSuffix } from '../../../modules/nf-core/cat/cat/main.nf' /* ======================================================================================== @@ -235,9 +235,9 @@ def exists_not_empty(path) { return false } - // Check if the file is not a directory or is a URL and return whether it's empty or not - def is_url = ["https://", "ftp://", "http://"].findAll { it -> path.startsWith(it) }.size() > 0 - if(is_url || !path_to_check.toFile().isDirectory()) { + // Don't check directories if the path is not local + def is_local = path_to_check.getScheme() == "file" + if(!is_local || !path_to_check.toFile().isDirectory()) { return !path_to_check.isEmpty() } diff --git a/subworkflows/local/build_references/tests/empty_folder/empty_file.txt b/subworkflows/local/build_references/tests/empty_folder/empty_file.txt new file mode 100644 index 000000000..e69de29bb diff --git a/subworkflows/local/build_references/tests/functions.nf.test b/subworkflows/local/build_references/tests/functions.nf.test new file mode 100644 index 000000000..2933918eb --- /dev/null +++ b/subworkflows/local/build_references/tests/functions.nf.test @@ -0,0 +1,273 @@ + +nextflow_function { + + name "Test Functions" + script "subworkflows/local/build_references/main.nf" + + test("Test Function exists_not_empty - local file exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "${projectDir}/main.nf" + """ + } + } + + then { + assert function.success + assert function.result == true + } + + } + + test("Test Function exists_not_empty - local directory exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "${projectDir}/assets" + """ + } + } + + then { + assert function.success + assert function.result == true + } + + } + + test("Test Function exists_not_empty - local file not exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "${projectDir}/non_existing_file.txt" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + + test("Test Function exists_not_empty - local directory not exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "${projectDir}/non_existing_directory" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + + test("Test Function exists_not_empty - local file empty") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "${projectDir}/subworkflows/local/build_references/tests/empty_folder/empty_file.txt" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + + test("Test Function exists_not_empty - local directory empty") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "${projectDir}/subworkflows/local/build_references/tests/empty_folder/" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + + test("Test Function exists_not_empty - HTTPS file exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "https://github.com/nf-core/test-datasets/raw/afe31d4ea9be70bbaaf1fb633a4ae7a4afeaf215/README.md" + """ + } + } + + then { + assert function.success + assert function.result == true + } + + } + + test("Test Function exists_not_empty - HTTPS directory exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "https://github.com/nf-core/test-datasets/raw/afe31d4ea9be70bbaaf1fb633a4ae7a4afeaf215/testdata/" + """ + } + } + + then { + assert function.success + assert function.result == true + } + + } + + test("Test Function exists_not_empty - HTTPS file not exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "https://github.com/nf-core/test-datasets/raw/afe31d4ea9be70bbaaf1fb633a4ae7a4afeaf215/non_existing_file.txt" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + + test("Test Function exists_not_empty - HTTPS directory not exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "https://github.com/nf-core/test-datasets/raw/afe31d4ea9be70bbaaf1fb633a4ae7a4afeaf215/non_existing_directory/" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + + test("Test Function exists_not_empty - s3 file exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "s3://ngi-igenomes/igenomes/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + """ + } + } + + then { + assert function.success + assert function.result == true + } + + } + + test("Test Function exists_not_empty - s3 directory exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "s3://ngi-igenomes/igenomes/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/" + """ + } + } + + then { + assert function.success + assert function.result == true + } + + } + + test("Test Function exists_not_empty - s3 file not exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "s3://ngi-igenomes/igenomes/this_file_does_not_exist.txt" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + + test("Test Function exists_not_empty - s3 directory not exists") { + + function "exists_not_empty" + + when { + function { + """ + input[0] = "s3://ngi-igenomes/igenomes/this_directory_does_not_exist/" + """ + } + } + + then { + assert function.success + assert function.result == false + } + + } + +} From 6536e6af7f88ff5cfc063be1d83faa1953a8f1f8 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 14 Apr 2025 10:09:36 +0200 Subject: [PATCH 431/887] add star command to usage docs --- docs/usage.md | 61 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 4f196bf05..5bd348e78 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -127,23 +127,60 @@ TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,forward As you can see above for multiple runs of the same sample, the `sample` name has to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Note that multiple rows per sample are not supported for samples that contain `bam`, `cram`, `junctions` and/or `splice_junctions` files. -| Column | Description | Required | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | :white_check_mark: | -| `strandedness` | Strandedness: forward or reverse. | :white_check_mark: | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | :grey_question: | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq. It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`.gz". | :grey_question: | -| `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | :grey_question: | -| `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | :x: | -| `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | :grey_question: | -| `crai` | Full path to the index of the CRAM file. File has to exist and must have the extension ".crai". | :x: | -| `junctions` | Full path to the file containing chimeric junctions determined by STAR. File has to exist and must have the extension ".junction". It's the responsibility of the pipeline user to make sure this file has been correctly created. The junctions file is required to run `starfusion` and `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | -| `splice_junctions` | Full path to the file containing splice junctions determined by STAR. File has to exist and must have the extension ".SJ.out.tab". It's the responsibility of the pipeline user to make sure this file has been correctly created. The splice junctions file is required to run `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | +| Column | Description | Required | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | :white_check_mark: | +| `strandedness` | Strandedness: forward or reverse. | :white_check_mark: | +| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | :grey_question: | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq. It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`.gz". | :grey_question: | +| `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | :grey_question: | +| `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | :x: | +| `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | :grey_question: | +| `crai` | Full path to the index of the CRAM file. File has to exist and must have the extension ".crai". | :x: | +| `junctions` | Full path to the file containing chimeric junctions determined by STAR. File has to exist and must have the extension ".junction". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The junctions file is required to run `starfusion` and `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | +| `splice_junctions` | Full path to the file containing splice junctions determined by STAR. File has to exist and must have the extension ".SJ.out.tab". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The splice junctions file is required to run `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | :white_check_mark: = Required :x: = Not required :grey_question: = One of these columns should be provided +### Preparing BAM/CRAM/junctions/splice_junctions + +In the pipeline the following STAR command is used to produce the needed files: + +```bash +STAR \\ + --genomeDir \ + --readFilesIn \ + --runThreadN \ + --outFileNamePrefix . \ + --outSAMattrRGline 'ID:' 'SM:' \ + --outReadsUnmapped None \ + --outSAMstrandField intronMotif \ + --chimOutJunctionFormat 1 \ + --twopassMode None \ + --outFilterMultimapNmax 50 \ + --chimMultimapNmax 50 \ + --quantMode GeneCounts \ + --outSAMunmapped Within \ + --readFilesCommand zcat \ + --alignSJstitchMismatchNmax 5 -1 5 5 \ + --outSAMtype BAM SortedByCoordinate \ + --chimSegmentMin 10 \ + --peOverlapNbasesMin 10 \ + --alignSplicedMateMapLminOverLmate 0.5 \ + --chimJunctionOverhangMin 10 \ + --chimScoreJunctionNonGTAG 0 \ + --chimScoreDropMax 30 \ + --chimScoreSeparation 1 \ + --chimSegmentReadGapMax 3 \ + --chimOutType Junctions WithinBAM' +``` + +We found that this command produces the best results for all downstream processes in the pipeline. It is highly recommended to use the same command for the input BAM, CRAM, junctions and splice_junctions files. + +The pipeline will still work when another command has been used, but it is possible that the results will be significantly different from the standard flow. + ### Starting commands The pipeline can either be run using all fusion detection tools or by specifying individual tools. Visualisation tools will be run on all fusions detected. To run all tools (`arriba`, `ctatsplicing`, `fusioncatcher`, `starfusion`, `stringtie`, `fusionreport`, `fastp`, `salmon`, `fusioninspector`) use the `all` option for the `--tools` parameter: From 101c68df789f1f6efa2174a221709f20aa98930f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 14 Apr 2025 15:23:32 +0200 Subject: [PATCH 432/887] update fusioncatcher download container --- modules/local/fusioncatcher/download/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 6ed3112b9..06f3e6e19 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -4,8 +4,8 @@ process FUSIONCATCHER_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d5/d53f36e9e01d14a0ae8e15f8046f52b2883c970c27fe43fdfbd9440a55f5403f/data' : - 'community.wave.seqera.io/library/fusioncatcher:1.33--4733482b637ef92f' }" + 'https://depot.galaxyproject.org/singularity/fusioncatcher:1.33--hdfd78af_5': + 'biocontainers/fusioncatcher:1.33--hdfd78af_5' }" input: val genome_gencode_version From 692bd78e511cbb232d9d1a1f577a35b6bdb4e0a1 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 14 Apr 2025 15:56:13 +0200 Subject: [PATCH 433/887] fix fusioncatcher download (hopefully) --- modules/local/fusioncatcher/download/main.nf | 7 +++---- nextflow.config | 5 +++-- nextflow_schema.json | 11 +++++++++-- subworkflows/local/build_references.nf | 2 +- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 06f3e6e19..695c34f7b 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -22,10 +22,9 @@ process FUSIONCATCHER_DOWNLOAD { def args = task.ext.args ?: '' meta = [ id: "human_v${genome_gencode_version}" ] """ - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.aa - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.ab - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.ac - wget $args http://sourceforge.net/projects/fusioncatcher/files/data/human_${genome_gencode_version}.tar.gz.ad + wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partaa?viasf=1 + wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partab?viasf=1 + wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partac?viasf=1 cat human_${genome_gencode_version}.tar.gz.* | tar xz rm human_${genome_gencode_version}.tar* diff --git a/nextflow.config b/nextflow.config index 3ab1abf5e..e0d0bcec1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -59,8 +59,9 @@ params { skip_vcf = false // Download references option - download_refs = false - fusioncatcher_build = false + download_refs = false + fusioncatcher_download = false + fusioncatcher_download_link = "https://master.dl.sourceforge.net/project/rnafusion/fusioncatcher" // Path to references fasta = "${params.genomes_base}/gencode/Homo_sapiens_${params.genome}_${params.genome_gencode_version}_dna_primary_assembly.fa" diff --git a/nextflow_schema.json b/nextflow_schema.json index e3940c7e1..6ce2eb0ef 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -156,9 +156,16 @@ "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, - "fusioncatcher_build": { + "fusioncatcher_download": { "type": "boolean", - "description": "Build fusioncatcher references instead of downloading them" + "description": "Download fusioncatcher references instead of building them. This is only supported for human gencode v46 at the moment." + }, + "fusioncatcher_download_link": { + "type": "string", + "description": "Fusioncatcher download link", + "fa_icon": "far fa-file-code", + "pattern": "^https?://.*$", + "default": "https://master.dl.sourceforge.net/project/rnafusion/fusioncatcher" }, "fusioninspector_limitSjdbInsertNsj": { "type": "integer", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 0f96253ef..c67e952ed 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -157,7 +157,7 @@ workflow BUILD_REFERENCES { def ch_fusioncatcher_ref = Channel.empty() if (tools.contains("fusioncatcher")) { if (!exists_not_empty(params.fusioncatcher_ref)) { - if(params.fusioncatcher_build) { + if(!params.fusioncatcher_download) { FUSIONCATCHER_BUILD(Channel.value([id:"human_v${params.genome_gencode_version}"])) ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference From 71338828f8c7f1f3b8774f1bfdec62f80530a7cc Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 14 Apr 2025 16:04:53 +0200 Subject: [PATCH 434/887] bump changelog --- CHANGELOG.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9ea97b6b..360d8d923 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `CTATSPLICING_PREPGENOMELIB` to update the starfusion genome library directory with a cancer splicing index. [#610](https://github.com/nf-core/rnafusion/pull/610) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) - Add nf-test to local module: `ARRIBA_VISUALISATION`. [#625](https://github.com/nf-core/rnafusion/pull/625) +- Added `--fusioncatcher_download` and `--fusioncatcher_download_link`. These parameters can be used to download the fusioncatcher references from a repository, which is significantly faster than building the reference. This is only supported for human references for gencode v46. ### Changed @@ -88,10 +89,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Parameters -| Old parameter | New parameter | -| -------------------- | ------------------- | -| | `--no_cosmic` | -| `--build_references` | `--references_only` | +| Old parameter | New parameter | +| --------------------- | ------------------------------- | +| | `--no_cosmic` | +| `--build_references` | `--references_only` | +| `--fastp_trim` | `--tools` | +| `--arriba` | `--tools` | +| `--ctatsplicing` | `--tools` | +| `--run_fusioncatcher` | `--tools` | +| `--starfusion` | `--tools` | +| `--stringtie` | `--tools` | +| `--all` | `--tools` | +| | `--fusioncatcher_download` | +| | `--fusioncatcher_download_link` | ## v3.0.2 - [2024-04-10] From a7b0fdd5a85f86129f5a1d8ae2f98c5230cfbcea Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Mon, 14 Apr 2025 14:48:41 +0000 Subject: [PATCH 435/887] update snaps --- tests/test_stub.nf.test.snap | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 78159becb..a4679aa4b 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -993,7 +993,7 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_DOWNLOAD": { + "FUSIONCATCHER_BUILD": { "fusioncatcher": "1.33" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1109,7 +1109,6 @@ "references/fusion_report_db/mitelman.db", "references/fusioncatcher", "references/fusioncatcher/human_v46", - "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1238,7 +1237,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-11T12:53:31.628103017" + "timestamp": "2025-04-14T14:43:39.213664473" }, "stub test fastp": { "content": [ @@ -1321,7 +1320,7 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_DOWNLOAD": { + "FUSIONCATCHER_BUILD": { "fusioncatcher": "1.33" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1371,7 +1370,6 @@ "references", "references/fusioncatcher", "references/fusioncatcher/human_v46", - "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1384,7 +1382,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-11T12:50:59.896927711" + "timestamp": "2025-04-14T14:41:00.743099102" }, "stub test all": { "content": [ @@ -1414,7 +1412,7 @@ "FASTQC_FOR_FASTP": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_DOWNLOAD": { + "FUSIONCATCHER_BUILD": { "fusioncatcher": "1.33" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1693,7 +1691,6 @@ "references/fusion_report_db/mitelman.db", "references/fusioncatcher", "references/fusioncatcher/human_v46", - "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1860,6 +1857,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-11T12:48:58.038119186" + "timestamp": "2025-04-14T14:38:02.64741918" } } \ No newline at end of file From b9301de56657f212ccfe5c6003701829f9ef964a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 15 Apr 2025 15:09:38 +0200 Subject: [PATCH 436/887] fix fusioncatcher download paths --- modules/local/fusioncatcher/download/main.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 695c34f7b..0beabe07d 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -22,11 +22,11 @@ process FUSIONCATCHER_DOWNLOAD { def args = task.ext.args ?: '' meta = [ id: "human_v${genome_gencode_version}" ] """ - wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partaa?viasf=1 - wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partab?viasf=1 - wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partac?viasf=1 - cat human_${genome_gencode_version}.tar.gz.* | tar xz - rm human_${genome_gencode_version}.tar* + wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partaa + wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partab + wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partac + cat human_v${genome_gencode_version}.tar.gz.* | tar xz + rm human_v${genome_gencode_version}.tar* cat <<-END_VERSIONS > versions.yml "${task.process}": From 677fdccbaa41f2091cbf78cb1c5799d38c0f3604 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 15 Apr 2025 15:14:40 +0200 Subject: [PATCH 437/887] revert to fusioncatcher_build --- CHANGELOG.md | 4 ++-- nextflow.config | 2 +- nextflow_schema.json | 4 ++-- subworkflows/local/build_references.nf | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 360d8d923..79d7c6891 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,7 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `CTATSPLICING_PREPGENOMELIB` to update the starfusion genome library directory with a cancer splicing index. [#610](https://github.com/nf-core/rnafusion/pull/610) - Add nf-test to local subworkflow: `FUSIONREPORT_WORKFLOW`. [#607](https://github.com/nf-core/rnafusion/pull/607) - Add nf-test to local module: `ARRIBA_VISUALISATION`. [#625](https://github.com/nf-core/rnafusion/pull/625) -- Added `--fusioncatcher_download` and `--fusioncatcher_download_link`. These parameters can be used to download the fusioncatcher references from a repository, which is significantly faster than building the reference. This is only supported for human references for gencode v46. +- Added `--fusioncatcher_build` and `--fusioncatcher_download_link`. [#650](https://github.com/nf-core/rnafusion/pull/650) ### Changed @@ -100,7 +100,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | `--starfusion` | `--tools` | | `--stringtie` | `--tools` | | `--all` | `--tools` | -| | `--fusioncatcher_download` | +| | `--fusioncatcher_build` | | | `--fusioncatcher_download_link` | ## v3.0.2 - [2024-04-10] diff --git a/nextflow.config b/nextflow.config index e0d0bcec1..fa9816f66 100644 --- a/nextflow.config +++ b/nextflow.config @@ -60,7 +60,7 @@ params { // Download references option download_refs = false - fusioncatcher_download = false + fusioncatcher_build = false fusioncatcher_download_link = "https://master.dl.sourceforge.net/project/rnafusion/fusioncatcher" // Path to references diff --git a/nextflow_schema.json b/nextflow_schema.json index 6ce2eb0ef..ae94c4700 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -156,9 +156,9 @@ "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, - "fusioncatcher_download": { + "fusioncatcher_build": { "type": "boolean", - "description": "Download fusioncatcher references instead of building them. This is only supported for human gencode v46 at the moment." + "description": "Build fusioncatcher references instead of downloading them. This is required for any references other than for human gencode v46 at the moment." }, "fusioncatcher_download_link": { "type": "string", diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index c67e952ed..0f96253ef 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -157,7 +157,7 @@ workflow BUILD_REFERENCES { def ch_fusioncatcher_ref = Channel.empty() if (tools.contains("fusioncatcher")) { if (!exists_not_empty(params.fusioncatcher_ref)) { - if(!params.fusioncatcher_download) { + if(params.fusioncatcher_build) { FUSIONCATCHER_BUILD(Channel.value([id:"human_v${params.genome_gencode_version}"])) ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference From 0687642a00571fe31340d576c305813e43e95223 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 15 Apr 2025 15:44:42 +0200 Subject: [PATCH 438/887] add no_check_certificate to wgets --- modules/local/fusioncatcher/download/main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 0beabe07d..f3a6b759b 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -22,9 +22,9 @@ process FUSIONCATCHER_DOWNLOAD { def args = task.ext.args ?: '' meta = [ id: "human_v${genome_gencode_version}" ] """ - wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partaa - wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partab - wget $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partac + wget --no-check-certificate $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partaa + wget --no-check-certificate $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partab + wget --no-check-certificate $args ${params.fusioncatcher_download_link}/human_v${genome_gencode_version}.tar.gz.partac cat human_v${genome_gencode_version}.tar.gz.* | tar xz rm human_v${genome_gencode_version}.tar* From 2e6117c56ab5d97907fcee4db16b896961f69e80 Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Tue, 15 Apr 2025 14:00:36 +0000 Subject: [PATCH 439/887] fix snap --- tests/test_stub.nf.test.snap | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index a4679aa4b..afb7258c6 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -993,7 +993,7 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { + "FUSIONCATCHER_DOWNLOAD": { "fusioncatcher": "1.33" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1109,6 +1109,7 @@ "references/fusion_report_db/mitelman.db", "references/fusioncatcher", "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1237,7 +1238,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-14T14:43:39.213664473" + "timestamp": "2025-04-15T13:55:57.819598446" }, "stub test fastp": { "content": [ @@ -1320,7 +1321,7 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { + "FUSIONCATCHER_DOWNLOAD": { "fusioncatcher": "1.33" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1370,6 +1371,7 @@ "references", "references/fusioncatcher", "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1382,7 +1384,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-14T14:41:00.743099102" + "timestamp": "2025-04-15T13:53:38.550933344" }, "stub test all": { "content": [ @@ -1412,7 +1414,7 @@ "FASTQC_FOR_FASTP": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { + "FUSIONCATCHER_DOWNLOAD": { "fusioncatcher": "1.33" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1691,6 +1693,7 @@ "references/fusion_report_db/mitelman.db", "references/fusioncatcher", "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1857,6 +1860,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-14T14:38:02.64741918" + "timestamp": "2025-04-15T13:51:03.612689851" } } \ No newline at end of file From e1f8cbeb26192a4e8c90d5c8a4da906c6b50806c Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 15 Apr 2025 16:22:31 +0200 Subject: [PATCH 440/887] fix fusioninspector output --- CHANGELOG.md | 1 + modules/local/fusioninspector/main.nf | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 373d2724d..99ad7e013 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,6 +78,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) - Fixed the codebase to be compatible with the Nextflow language server [#634](https://github.com/nf-core/rnafusion/pull/634) - Updated the input validation to be more strict. This will prevent more errors down the line in the pipeline [#640](https://github.com/nf-core/rnafusion/pull/640) +- The `FUSIONINSPECTOR` process will no longer fail when no fusions have been found. ### Removed diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index ae368b5e7..fc5308e8f 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -41,6 +41,9 @@ process FUSIONINSPECTOR { --out_prefix $prefix \\ --vis $args $args2 + # Create the TSV file to avoid output file missing error when the TSV file hasn't been created (when no fusions have been found) + touch ${prefix}.FusionInspector.fusions.tsv + cat <<-END_VERSIONS > versions.yml "${task.process}": STAR-Fusion: \$(STAR-Fusion --version 2>&1 | grep -i 'version' | sed 's/STAR-Fusion version: //') From 77fdd0d9b8841482a675c14ff5313fff52f6eeed Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 15 Apr 2025 16:23:31 +0200 Subject: [PATCH 441/887] add pr number --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99ad7e013..3ce918abf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,7 +78,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) - Fixed the codebase to be compatible with the Nextflow language server [#634](https://github.com/nf-core/rnafusion/pull/634) - Updated the input validation to be more strict. This will prevent more errors down the line in the pipeline [#640](https://github.com/nf-core/rnafusion/pull/640) -- The `FUSIONINSPECTOR` process will no longer fail when no fusions have been found. +- The `FUSIONINSPECTOR` process will no longer fail when no fusions have been found. [#651](https://github.com/nf-core/rnafusion/pull/651) ### Removed From 65cec1548f89e1ce0fad9a1f2133d8a6ad137bae Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 15 Apr 2025 17:10:51 +0000 Subject: [PATCH 442/887] fix: download pfam and dfam databases in starfusion build --- conf/test_build.config | 2 ++ modules/local/starfusion/build/main.nf | 15 +++++++++++++-- modules/local/starfusion/build/meta.yml | 5 ++++- modules/local/starfusion/build/tests/main.nf.test | 6 ++++-- nextflow.config | 3 ++- nextflow_schema.json | 2 +- subworkflows/local/build_references.nf | 2 +- 7 files changed, 27 insertions(+), 8 deletions(-) diff --git a/conf/test_build.config b/conf/test_build.config index 511b83657..92c753e64 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -42,6 +42,8 @@ params { gtf = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf' fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' + species = 'homo_sapiens' + dfam_version = '3.4' } diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index fcd9cf803..81ab72925 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -12,6 +12,7 @@ process STARFUSION_BUILD { tuple val(meta2), path(gtf) path fusion_annot_lib val dfam_species + val dfam_version output: tuple val(meta), path("ctat_genome_lib_build_dir"), emit: reference @@ -20,11 +21,21 @@ process STARFUSION_BUILD { script: def args = task.ext.args ?: '' """ + export TMPDIR=/tmp + wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam34.0/Pfam-A.hmm.gz --no-check-certificate + + wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm --no-check-certificate + wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3f --no-check-certificate + wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3i --no-check-certificate + wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3m --no-check-certificate + wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3p --no-check-certificate + gunzip Pfam-A.hmm.gz && hmmpress Pfam-A.hmm + prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ - --dfam_db ${dfam_species} \\ - --pfam_db current \\ + --dfam_db ${dfam_species}_dfam.hmm \\ + --pfam_db Pfam-A.hmm \\ --fusion_annot_lib $fusion_annot_lib \\ --CPU $task.cpus \\ ${args} diff --git a/modules/local/starfusion/build/meta.yml b/modules/local/starfusion/build/meta.yml index d7f65a0b9..1259f2698 100644 --- a/modules/local/starfusion/build/meta.yml +++ b/modules/local/starfusion/build/meta.yml @@ -26,7 +26,10 @@ input: pattern: "*.dat.gz" - dfam_species: type: string - description: DNA transposable element database (Dfam.hmm), required for repeat masking. Only 'human' or 'mouse' are accepted (will automatically pull the resources from dfam). + description: DNA transposable element database (Dfam.hmm), required for repeat masking. Names such as 'homo_sapiens' are accepted (will automatically pull the resources from dfam). + - dfam_version: + type: string + description: DNA transposable element database version, required for repeat masking. Values such as '3.4' are accepted (will automatically pull the resources from dfam). output: - reference: diff --git a/modules/local/starfusion/build/tests/main.nf.test b/modules/local/starfusion/build/tests/main.nf.test index 8eb1b6f66..7a98b8e7c 100644 --- a/modules/local/starfusion/build/tests/main.nf.test +++ b/modules/local/starfusion/build/tests/main.nf.test @@ -19,7 +19,8 @@ nextflow_process { ] input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") - input [3] = "human" + input [3] = "homo_sapiens" + input [4] = "3.4" """ } @@ -123,7 +124,8 @@ nextflow_process { ] input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") - input [3] = "human" + input [3] = "homo_sapiens" + input [4] = "3.4" """ } diff --git a/nextflow.config b/nextflow.config index d2635cb46..bbf508168 100644 --- a/nextflow.config +++ b/nextflow.config @@ -31,7 +31,8 @@ params { read_length = 100 genomes = [:] fusion_annot_lib = "https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz" // path to dat.gz CTAT genome lib // TODO: Update to latest with s3 link when available - species = "human" + species = "homo_sapiens" + dfam_version = '3.4' // Filtering tools_cutoff = 1 diff --git a/nextflow_schema.json b/nextflow_schema.json index 656f0c2da..ce6e91a10 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -350,7 +350,7 @@ }, "species": { "type": "string", - "description": "Which species dfam should automatically download, default: human.", + "description": "Which species dfam should automatically download, default: homo_sapiens.", "fa_icon": "far fa-file-code", "default": "human" } diff --git a/subworkflows/local/build_references.nf b/subworkflows/local/build_references.nf index 8612b8f84..23ff3a058 100644 --- a/subworkflows/local/build_references.nf +++ b/subworkflows/local/build_references.nf @@ -170,7 +170,7 @@ workflow BUILD_REFERENCES { if(!params.fusion_annot_lib) { error("Expected --fusion_annot_lib to be specified when using StarFusion or any tools that depend on it") } - STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species) + STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species, params.dfam_version) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) if (tools.contains("ctatsplicing")) { CTATSPLICING_PREPGENOMELIB( From 5a2d5fa58934666221c7bb72309d84140e63e316 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 15 Apr 2025 17:52:54 +0000 Subject: [PATCH 443/887] style: fix linting --- .../starfusion/build/tests/main.nf.test.snap | 22 +++++++++++++------ nextflow_schema.json | 10 +++++++-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/modules/local/starfusion/build/tests/main.nf.test.snap b/modules/local/starfusion/build/tests/main.nf.test.snap index b08f25197..b647347a1 100644 --- a/modules/local/starfusion/build/tests/main.nf.test.snap +++ b/modules/local/starfusion/build/tests/main.nf.test.snap @@ -74,13 +74,15 @@ "trans.blast.align_coords.align_coords.dat:md5,9f6b7a75aea03a9671190be25ecdd4c2", true, "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128", - null + [ + "versions.yml:md5,4a6ed47cb345f2a5af4d9f12b7918cdb" + ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "24.10.5" }, - "timestamp": "2024-12-19T17:03:12.812884291" + "timestamp": "2025-04-15T17:34:00.624179533" }, "STARFUSION_BUILD - human - minigenome - stub": { "content": [ @@ -170,6 +172,9 @@ ] ] ], + "1": [ + "versions.yml:md5,4a6ed47cb345f2a5af4d9f12b7918cdb" + ], "reference": [ [ { @@ -254,13 +259,16 @@ "trans.blast.dat.gz:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] + ], + "versions": [ + "versions.yml:md5,4a6ed47cb345f2a5af4d9f12b7918cdb" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-12-12T14:57:33.861849482" + "timestamp": "2025-04-15T17:34:36.490161525" } -} \ No newline at end of file +} diff --git a/nextflow_schema.json b/nextflow_schema.json index ce6e91a10..cd48ba16f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -352,7 +352,7 @@ "type": "string", "description": "Which species dfam should automatically download, default: homo_sapiens.", "fa_icon": "far fa-file-code", - "default": "human" + "default": "homo_sapiens" } } }, @@ -543,5 +543,11 @@ { "$ref": "#/$defs/generic_options" } - ] + ], + "properties": { + "dfam_version": { + "type": "number", + "default": 3.4 + } + } } From b497b6af09d02e36a7f9fb7f0c1f4359b896440f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 15 Apr 2025 18:21:10 +0000 Subject: [PATCH 444/887] fix: number to string --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index cd48ba16f..ceabe6568 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -546,7 +546,7 @@ ], "properties": { "dfam_version": { - "type": "number", + "type": "string", "default": 3.4 } } From b640bfd9c2fce1c71ce1a8bf0b9adcd2cb337ceb Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 15 Apr 2025 18:24:49 +0000 Subject: [PATCH 445/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 373d2724d..29d2fd7ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,6 +78,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) - Fixed the codebase to be compatible with the Nextflow language server [#634](https://github.com/nf-core/rnafusion/pull/634) - Updated the input validation to be more strict. This will prevent more errors down the line in the pipeline [#640](https://github.com/nf-core/rnafusion/pull/640) +- Fixed STAR-Fusion build would fail when downloading Pfam and Dfam resources behind SSL. [#653](https://github.com/nf-core/rnafusion/pull/653) ### Removed From af84af59d60acfb934dd2b2634175dae00223a97 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 16 Apr 2025 09:56:16 +0200 Subject: [PATCH 446/887] touch other outputs --- modules/local/fusioninspector/main.nf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index fc5308e8f..d89f252ed 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -41,8 +41,14 @@ process FUSIONINSPECTOR { --out_prefix $prefix \\ --vis $args $args2 - # Create the TSV file to avoid output file missing error when the TSV file hasn't been created (when no fusions have been found) + # Touch the output files to make sure they exist + touch ${prefix}.FusionInspector.log + touch ${prefix}.FusionInspector.fusions.abridged.tsv touch ${prefix}.FusionInspector.fusions.tsv + touch ${prefix}.fusion_inspector_web.html + mkdir -p IGV_inputs + mkdir -p fi_workdir + mkdir -p chckpts_dir cat <<-END_VERSIONS > versions.yml "${task.process}": From 79c6dd2cad075c2b366a6768fcc9335e566294fc Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 16 Apr 2025 10:03:19 +0200 Subject: [PATCH 447/887] use wget for fusioncatcher download --- modules/local/fusioncatcher/download/main.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index f3a6b759b..956bbb0e7 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -4,8 +4,8 @@ process FUSIONCATCHER_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fusioncatcher:1.33--hdfd78af_5': - 'biocontainers/fusioncatcher:1.33--hdfd78af_5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3b/3b54fa9135194c72a18d00db6b399c03248103f87e43ca75e4b50d61179994b3/data': + 'community.wave.seqera.io/library/wget:1.21.4--8b0fcde81c17be5e' }" input: val genome_gencode_version @@ -30,7 +30,7 @@ process FUSIONCATCHER_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) END_VERSIONS """ @@ -40,7 +40,7 @@ process FUSIONCATCHER_DOWNLOAD { touch human_v${genome_gencode_version}/ensembl_fully_overlapping_genes.txt cat <<-END_VERSIONS > versions.yml "${task.process}": - fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) END_VERSIONS """ } From ecd60689464d85c4b3df758e62cbe11ef3a7d425 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 16 Apr 2025 10:05:21 +0200 Subject: [PATCH 448/887] add tar version to fusioncatcher download --- modules/local/fusioncatcher/download/main.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/local/fusioncatcher/download/main.nf b/modules/local/fusioncatcher/download/main.nf index 956bbb0e7..f2cc2a3d5 100644 --- a/modules/local/fusioncatcher/download/main.nf +++ b/modules/local/fusioncatcher/download/main.nf @@ -31,6 +31,7 @@ process FUSIONCATCHER_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": wget: \$(wget --version | head -1 | cut -d ' ' -f 3) + tar: \$(tar --version | head -1 | sed -e 's/tar (GNU tar) //') END_VERSIONS """ @@ -41,6 +42,7 @@ process FUSIONCATCHER_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": wget: \$(wget --version | head -1 | cut -d ' ' -f 3) + tar: \$(tar --version | head -1 | sed -e 's/tar (GNU tar) //') END_VERSIONS """ } From ad900660feb23675e7af3fda9f28dab835f00f52 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 16 Apr 2025 11:28:54 +0200 Subject: [PATCH 449/887] fix snaps --- tests/test_stub.nf.test.snap | 17 +++++---- tests/test_stub_bam.nf.test.snap | 60 ++++++++++++++++++-------------- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 5a7627c4e..d58e52dae 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1200,7 +1200,8 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_DOWNLOAD": { - "fusioncatcher": "1.33" + "wget": "1.21.4", + "tar": 1.35 }, "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" @@ -1444,7 +1445,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-15T13:55:57.819598446" + "timestamp": "2025-04-16T10:39:10.08713305" }, "stub test fastp": { "content": [ @@ -1528,7 +1529,8 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_DOWNLOAD": { - "fusioncatcher": "1.33" + "wget": "1.21.4", + "tar": 1.35 }, "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" @@ -1590,7 +1592,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-15T13:53:38.550933344" + "timestamp": "2025-04-16T10:35:22.7562139" }, "stub test all": { "content": [ @@ -1621,7 +1623,8 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_DOWNLOAD": { - "fusioncatcher": "1.33" + "wget": "1.21.4", + "tar": 1.35 }, "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" @@ -2066,6 +2069,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-15T13:51:03.612689851" + "timestamp": "2025-04-16T10:32:08.583950433" } -} +} \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index feb129fc2..ac8414578 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -1092,10 +1092,11 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { - "fusioncatcher": "1.33" + "FUSIONCATCHER_DOWNLOAD": { + "wget": "1.21.4", + "tar": 1.35 }, - "FUSIONCATCHER_DETECT": { + "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" }, "FUSIONREPORT": { @@ -1155,11 +1156,9 @@ "fastqc/test.html", "fastqc/test.zip", "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", "fusionreport", "fusionreport/test", "fusionreport/test/AAA_BBB.html", @@ -1200,6 +1199,9 @@ "references/fusion_report_db/fusion_report.log", "references/fusion_report_db/fusiongdb2.db", "references/fusion_report_db/mitelman.db", + "references/fusioncatcher", + "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1309,7 +1311,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:11:07.156105951" + "timestamp": "2025-04-16T10:51:50.320939135" }, "stub test fastp": { "content": [ @@ -1411,10 +1413,11 @@ "FASTQC": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { - "fusioncatcher": "1.33" + "FUSIONCATCHER_DOWNLOAD": { + "wget": "1.21.4", + "tar": 1.35 }, - "FUSIONCATCHER_DETECT": { + "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" }, "GATK4_BEDTOINTERVALLIST": { @@ -1454,11 +1457,9 @@ "fastqc/test.html", "fastqc/test.zip", "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "get", @@ -1480,6 +1481,9 @@ "pipeline_info", "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", + "references/fusioncatcher", + "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1492,7 +1496,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:09:12.170433159" + "timestamp": "2025-04-16T10:48:04.746178504" }, "stub test all": { "content": [ @@ -1522,10 +1526,11 @@ "FASTQC_FOR_FASTP": { "fastqc": "0.12.1" }, - "FUSIONCATCHER_BUILD": { - "fusioncatcher": "1.33" + "FUSIONCATCHER_DOWNLOAD": { + "wget": "1.21.4", + "tar": 1.35 }, - "FUSIONCATCHER_DETECT": { + "FUSIONCATCHER_FUSIONCATCHER": { "fusioncatcher": "1.33" }, "FUSIONINSPECTOR": { @@ -1629,11 +1634,9 @@ "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", - "fusioncatcher/human_v46", - "fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "fusioncatcher/test.fusioncatcher.fusion-genes.txt", - "fusioncatcher/test.fusioncatcher.log", - "fusioncatcher/test.fusioncatcher.summary.txt", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", "fusioninspector", "fusioninspector/IGV_inputs", "fusioninspector/IGV_inputs/TrinityFusion.bed", @@ -1793,6 +1796,9 @@ "references/fusion_report_db/fusion_report.log", "references/fusion_report_db/fusiongdb2.db", "references/fusion_report_db/mitelman.db", + "references/fusioncatcher", + "references/fusioncatcher/human_v46", + "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", "references/gencode", "references/gencode/Homo_sapiens.GRCh38.46.gtf", "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", @@ -1943,6 +1949,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-11T09:18:32.616357228" + "timestamp": "2025-04-16T10:44:36.932311827" } } \ No newline at end of file From 0db45acefddf31b7f11b2ea1703dc4f653f68eb4 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 16 Apr 2025 17:35:00 +0000 Subject: [PATCH 450/887] chore: apply suggestions from code review --- modules/local/starfusion/build/main.nf | 1 - nextflow_schema.json | 19 +++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 81ab72925..f66106e2a 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -21,7 +21,6 @@ process STARFUSION_BUILD { script: def args = task.ext.args ?: '' """ - export TMPDIR=/tmp wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam34.0/Pfam-A.hmm.gz --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm --no-check-certificate diff --git a/nextflow_schema.json b/nextflow_schema.json index ceabe6568..42a158f9c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -31,7 +31,7 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": ["genomes_base", "outdir", "tools"], + "required": ["outdir", "genomes_base", "tools"], "properties": { "input": { "type": "string", @@ -353,6 +353,11 @@ "description": "Which species dfam should automatically download, default: homo_sapiens.", "fa_icon": "far fa-file-code", "default": "homo_sapiens" + }, + "dfam_version": { + "type": "string", + "default": "3.4", + "description": "Version of dfam to use" } } }, @@ -523,10 +528,10 @@ }, "allOf": [ { - "$ref": "#/$defs/input_output_options" + "$ref": "#/$defs/skip_steps" }, { - "$ref": "#/$defs/skip_steps" + "$ref": "#/$defs/input_output_options" }, { "$ref": "#/$defs/read_trimming_options" @@ -543,11 +548,5 @@ { "$ref": "#/$defs/generic_options" } - ], - "properties": { - "dfam_version": { - "type": "string", - "default": 3.4 - } - } + ] } From acb34a9b8e4a169ff7803ef265bdcd916dad55d5 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 17 Apr 2025 15:00:26 +0200 Subject: [PATCH 451/887] remove fusioncatcher_build --- CHANGELOG.md | 2 +- nextflow.config | 1 - nextflow_schema.json | 4 ---- subworkflows/local/build_references/main.nf | 12 +++--------- 4 files changed, 4 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02199cd9f..0600ff6e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,7 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `crai`: The index of the CRAM file, this is not required when a `cram` file has been given but can increase the pipeline speed a bit. - `junctions`: A file containing the junctions determined by STAR (needed by `starfusion` and `ctatsplicing`) - `splice_junctions` A file containing the splice junctions determined by STAR (needed by `ctatsplicing`) -- Added `--fusioncatcher_build` and `--fusioncatcher_download_link`. [#650](https://github.com/nf-core/rnafusion/pull/650) +- Added `--fusioncatcher_download_link`. [#650](https://github.com/nf-core/rnafusion/pull/650) ### Changed diff --git a/nextflow.config b/nextflow.config index fa9816f66..14d7162df 100644 --- a/nextflow.config +++ b/nextflow.config @@ -60,7 +60,6 @@ params { // Download references option download_refs = false - fusioncatcher_build = false fusioncatcher_download_link = "https://master.dl.sourceforge.net/project/rnafusion/fusioncatcher" // Path to references diff --git a/nextflow_schema.json b/nextflow_schema.json index ae94c4700..827d966ca 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -156,10 +156,6 @@ "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, - "fusioncatcher_build": { - "type": "boolean", - "description": "Build fusioncatcher references instead of downloading them. This is required for any references other than for human gencode v46 at the moment." - }, "fusioncatcher_download_link": { "type": "string", "description": "Fusioncatcher download link", diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index dd2c5d30c..460a95fd1 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -157,15 +157,9 @@ workflow BUILD_REFERENCES { def ch_fusioncatcher_ref = Channel.empty() if (tools.contains("fusioncatcher")) { if (!exists_not_empty(params.fusioncatcher_ref)) { - if(params.fusioncatcher_build) { - FUSIONCATCHER_BUILD(Channel.value([id:"human_v${params.genome_gencode_version}"])) - ch_versions = ch_versions.mix(FUSIONCATCHER_BUILD.out.versions) - ch_fusioncatcher_ref = FUSIONCATCHER_BUILD.out.reference - } else { - FUSIONCATCHER_DOWNLOAD(params.genome_gencode_version) - ch_versions = ch_versions.mix(FUSIONCATCHER_DOWNLOAD.out.versions) - ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference - } + FUSIONCATCHER_DOWNLOAD(params.genome_gencode_version) + ch_versions = ch_versions.mix(FUSIONCATCHER_DOWNLOAD.out.versions) + ch_fusioncatcher_ref = FUSIONCATCHER_DOWNLOAD.out.reference } else { ch_fusioncatcher_ref = Channel.fromPath(params.fusioncatcher_ref).map { it -> [[id:it.name], it] } From a4665a5fad104184fbae7f645350b4cd4409d5cb Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 22 Apr 2025 11:15:14 +0200 Subject: [PATCH 452/887] review comments --- CHANGELOG.md | 16 +-- conf/modules.config | 8 -- modules.json | 135 +++++++++++++----- .../fusioncatcher/build/environment.yml | 7 - modules/nf-core/fusioncatcher/build/main.nf | 45 ------ modules/nf-core/fusioncatcher/build/meta.yml | 46 ------ .../fusioncatcher/build/tests/main.nf.test | 35 ----- .../build/tests/main.nf.test.snap | 41 ------ 8 files changed, 104 insertions(+), 229 deletions(-) delete mode 100644 modules/nf-core/fusioncatcher/build/environment.yml delete mode 100644 modules/nf-core/fusioncatcher/build/main.nf delete mode 100644 modules/nf-core/fusioncatcher/build/meta.yml delete mode 100644 modules/nf-core/fusioncatcher/build/tests/main.nf.test delete mode 100644 modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 690122180..ce6860041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -86,7 +86,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed missing script `gtf2bed` which caused local module `GET_RRNA_TRANSCRIPTS` to fail [#602](https://github.com/nf-core/rnafusion/issues/602) - Fixed the codebase to be compatible with the Nextflow language server [#634](https://github.com/nf-core/rnafusion/pull/634) - Updated the input validation to be more strict. This will prevent more errors down the line in the pipeline [#640](https://github.com/nf-core/rnafusion/pull/640) -- Fusioncatcher build should now work again [#650](https://github.com/nf-core/rnafusion/pull/650) - The `FUSIONINSPECTOR` process will no longer fail when no fusions have been found. [#651](https://github.com/nf-core/rnafusion/pull/651) - Fixed STAR-Fusion build would fail when downloading Pfam and Dfam resources behind SSL. [#653](https://github.com/nf-core/rnafusion/pull/653) @@ -95,6 +94,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove fusionGDB from documentation and fusion-report download stubs [#503](https://github.com/nf-core/rnafusion/pull/503) - Removed test-build as reference building gets integrated in the main workflow [#505](https://github.com/nf-core/rnafusion/pull/505) - Removed parameter `--build_references` +- Removed fusioncatcher build [#650](https://github.com/nf-core/rnafusion/pull/650) ### Parameters @@ -102,14 +102,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | --------------------- | ------------------------------- | | | `--no_cosmic` | | `--build_references` | `--references_only` | -| `--fastp_trim` | `--tools` | -| `--arriba` | `--tools` | -| `--ctatsplicing` | `--tools` | -| `--run_fusioncatcher` | `--tools` | -| `--starfusion` | `--tools` | -| `--stringtie` | `--tools` | -| `--all` | `--tools` | -| | `--fusioncatcher_build` | +| `--fastp_trim` | `--tools fastp` | +| `--arriba` | `--tools arriba` | +| `--run_fusioncatcher` | `--tools fusioncatcher` | +| `--starfusion` | `--tools starfusion` | +| `--stringtie` | `--tools stringtie` | +| `--all` | `--tools all` | | | `--fusioncatcher_download_link` | ## v3.0.2 - [2024-04-10] diff --git a/conf/modules.config b/conf/modules.config index fa2118eba..b9cf58749 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -95,14 +95,6 @@ process { ].join(' ')} } - withName: 'FUSIONCATCHER_BUILD' { - publishDir = [ - path: { "${params.genomes_base}/fusioncatcher" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: 'FUSIONCATCHER_DOWNLOAD' { publishDir = [ path: { "${params.genomes_base}/fusioncatcher" }, diff --git a/modules.json b/modules.json index 09978e1bb..2b71ee8af 100644 --- a/modules.json +++ b/modules.json @@ -8,153 +8,206 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba/arriba": { "branch": "master", "git_sha": "1719e20e3881b37b9e1e8498ea669a2b92e54b9a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba/download": { "branch": "master", "git_sha": "467c202a876d26af544fa8c4b22a050a535462a7", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/fastq": { "branch": "master", "git_sha": "a1abf90966a2a4016d3c3e41e228bfcbd4811ccc", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastp": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "08108058ea36a63f141c25c4e75f9f872a5b2296", - "installed_by": ["modules"] - }, - "fusioncatcher/build": { - "branch": "master", - "git_sha": "5781b9eaa352f23756c3cc98525ee549bbcc612b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fusioncatcher/fusioncatcher": { "branch": "master", "git_sha": "2a227f75f33415f74a884ef8b33555b151e33de9", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gffread": { "branch": "master", "git_sha": "bd5f75ccaf2345269810e66e85de8a70e4de8764", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectrnaseqmetrics": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "rrnatranscripts": { "branch": "master", "git_sha": "812edf8cf702de42d2d8c7314d6f03b97e20abeb", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/rrnatranscripts/rrnatranscripts.diff" }, "salmon/index": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/quant": { "branch": "master", "git_sha": "85b5f8a0d9df9ce7587af50e2ee75b37c97515c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/convert": { "branch": "master", "git_sha": "b823b7220bac94079f9ea65113401956ca7d633e", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/align": { "branch": "master", "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "star/genomegenerate": { "branch": "master", "git_sha": "a5ad53288c79fa52c5ae708c317e09ec2dd149ab", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/stringtie": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/gtftogenepred": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -163,20 +216,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fusioncatcher/build/environment.yml b/modules/nf-core/fusioncatcher/build/environment.yml deleted file mode 100644 index 25f7417c5..000000000 --- a/modules/nf-core/fusioncatcher/build/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -channels: - - conda-forge - - bioconda -dependencies: - - "bioconda::fusioncatcher=1.33" diff --git a/modules/nf-core/fusioncatcher/build/main.nf b/modules/nf-core/fusioncatcher/build/main.nf deleted file mode 100644 index c24865abb..000000000 --- a/modules/nf-core/fusioncatcher/build/main.nf +++ /dev/null @@ -1,45 +0,0 @@ -process FUSIONCATCHER_BUILD { - 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/fusioncatcher:1.33--hdfd78af_5': - 'biocontainers/fusioncatcher:1.33--hdfd78af_5' }" - - input: - val(meta) - - output: - tuple val(meta), path("${prefix}") , emit: reference - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - """ - fusioncatcher-build \\ - ${args} \\ - --output=${prefix} \\ - --threads=${task.cpus} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - """ - mkdir ${prefix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fusioncatcher: "\$(fusioncatcher --version 2>&1 | awk '{print \$2}')" - END_VERSIONS - """ -} diff --git a/modules/nf-core/fusioncatcher/build/meta.yml b/modules/nf-core/fusioncatcher/build/meta.yml deleted file mode 100644 index dc3604e57..000000000 --- a/modules/nf-core/fusioncatcher/build/meta.yml +++ /dev/null @@ -1,46 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "fusioncatcher_build" -description: Build references for fusioncatcher -keywords: - - references - - fusions - - rna - -tools: - - fusioncatcher: - description: Build genome for fusioncatcher - homepage: https://github.com/ndaniel/fusioncatcher/ - documentation: https://github.com/ndaniel/fusioncatcher/blob/master/doc/manual.md - tool_dev_url: https://github.com/ndaniel/fusioncatcher/ - doi: "10.1101/011650" - licence: ["GPL v3"] - -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - -output: - - reference: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - ${prefix}: - type: file - description: Diretory containing the fusioncatcher reference files - - - versions: - - "versions.yml": - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@nvnieuwk" -maintainers: - - "@nvnieuwk" diff --git a/modules/nf-core/fusioncatcher/build/tests/main.nf.test b/modules/nf-core/fusioncatcher/build/tests/main.nf.test deleted file mode 100644 index 315c1b117..000000000 --- a/modules/nf-core/fusioncatcher/build/tests/main.nf.test +++ /dev/null @@ -1,35 +0,0 @@ -nextflow_process { - - name "Test Process FUSIONCATCHER_BUILD" - script "../main.nf" - process "FUSIONCATCHER_BUILD" - - tag "modules" - tag "modules_nfcore" - tag "fusioncatcher" - tag "fusioncatcher/build" - - // Only stub tests because this module downloads about 50 GB of data - - test("stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ id:'test', single_end:false ] // meta map - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap b/modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap deleted file mode 100644 index 4a301fcb7..000000000 --- a/modules/nf-core/fusioncatcher/build/tests/main.nf.test.snap +++ /dev/null @@ -1,41 +0,0 @@ -{ - "stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - - ] - ] - ], - "1": [ - "versions.yml:md5,e049cf8ceb55a41bd8f05db0931a8c14" - ], - "reference": [ - [ - { - "id": "test", - "single_end": false - }, - [ - - ] - ] - ], - "versions": [ - "versions.yml:md5,e049cf8ceb55a41bd8f05db0931a8c14" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" - }, - "timestamp": "2025-04-10T16:50:59.596294661" - } -} \ No newline at end of file From 31c9371c11c4db502f5ae9245e3132780ddbe508 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 22 Apr 2025 11:17:23 +0200 Subject: [PATCH 453/887] lint --- modules.json | 130 +++++--------------- subworkflows/local/build_references/main.nf | 1 - 2 files changed, 33 insertions(+), 98 deletions(-) diff --git a/modules.json b/modules.json index 2b71ee8af..04fcccc52 100644 --- a/modules.json +++ b/modules.json @@ -8,206 +8,148 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", "git_sha": "1719e20e3881b37b9e1e8498ea669a2b92e54b9a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/download": { "branch": "master", "git_sha": "467c202a876d26af544fa8c4b22a050a535462a7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", "git_sha": "a1abf90966a2a4016d3c3e41e228bfcbd4811ccc", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastp": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "08108058ea36a63f141c25c4e75f9f872a5b2296", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fusioncatcher/fusioncatcher": { "branch": "master", "git_sha": "2a227f75f33415f74a884ef8b33555b151e33de9", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gffread": { "branch": "master", "git_sha": "bd5f75ccaf2345269810e66e85de8a70e4de8764", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectrnaseqmetrics": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "rrnatranscripts": { "branch": "master", "git_sha": "812edf8cf702de42d2d8c7314d6f03b97e20abeb", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/rrnatranscripts/rrnatranscripts.diff" }, "salmon/index": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", "git_sha": "85b5f8a0d9df9ce7587af50e2ee75b37c97515c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/convert": { "branch": "master", "git_sha": "b823b7220bac94079f9ea65113401956ca7d633e", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/align": { "branch": "master", "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", "git_sha": "a5ad53288c79fa52c5ae708c317e09ec2dd149ab", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/gtftogenepred": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -216,26 +158,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index 1eb0eba33..30a26db36 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -19,7 +19,6 @@ include { CTATSPLICING_PREPGENOMELIB } from '../../../modules/local/ctatspl ======================================================================================== */ -include { FUSIONCATCHER_BUILD } from '../../../modules/nf-core/fusioncatcher/build/main' include { ARRIBA_DOWNLOAD } from '../../../modules/nf-core/arriba/download/main' include { SAMTOOLS_FAIDX } from '../../../modules/nf-core/samtools/faidx/main' include { STAR_GENOMEGENERATE } from '../../../modules/nf-core/star/genomegenerate/main' From b12a8a4d68d41d5abf439ad829110aa7c122d362 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 22 Apr 2025 16:48:25 +0200 Subject: [PATCH 454/887] add seq_center and seq_platform to the samplesheet --- assets/schema_input.json | 12 ++++++++++++ conf/modules.config | 5 +++-- docs/usage.md | 2 ++ subworkflows/local/fastq_align_star/main.nf | 6 ++---- workflows/rnafusion.nf | 4 +--- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 60f8369af..83684a04a 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -73,6 +73,18 @@ "type": "string", "enum": ["forward", "reverse", "unstranded", "unknown"], "errorMessage": "Strandedness has to be 'forward', 'reverse', 'unstranded' or 'unknown'" + }, + "seq_platform": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Sequencing platform has to be a string and cannot contain spaces", + "meta": "seq_platform" + }, + "seq_center": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Sequencing center has to be a string and cannot contain spaces", + "meta": "seq_center" } }, "dependentRequired": { diff --git a/conf/modules.config b/conf/modules.config index b9cf58749..6314217e2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -239,7 +239,8 @@ process { mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] - ext.args = '--outReadsUnmapped None \ + ext.args = { "--outReadsUnmapped None \ + --outSAMattrRGline 'ID:${meta.id}' 'SM:${meta.id}'${meta.seq_center ? " 'CN:${meta.seq_center}'": ''}${meta.seq_platform ? "' PL:${meta.seq_platform}'": ''} \ --outSAMstrandField intronMotif \ --chimOutJunctionFormat 1 \ --twopassMode None \ @@ -258,7 +259,7 @@ process { --chimScoreDropMax 30 \ --chimScoreSeparation 1 \ --chimSegmentReadGapMax 3 \ - --chimOutType Junctions WithinBAM' + --chimOutType Junctions WithinBAM" } } withName: 'STAR_GENOMEGENERATE' { diff --git a/docs/usage.md b/docs/usage.md index 5bd348e78..ae5fe8f58 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -139,6 +139,8 @@ As you can see above for multiple runs of the same sample, the `sample` name has | `crai` | Full path to the index of the CRAM file. File has to exist and must have the extension ".crai". | :x: | | `junctions` | Full path to the file containing chimeric junctions determined by STAR. File has to exist and must have the extension ".junction". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The junctions file is required to run `starfusion` and `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | | `splice_junctions` | Full path to the file containing splice junctions determined by STAR. File has to exist and must have the extension ".SJ.out.tab". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The splice junctions file is required to run `ctatsplicing` when the `fastq_1` field is empty. | :grey_question: | +| `seq_platform` | The sequencing platform used to create to sequence the data in the FASTQ files. This value will take precedence over the value provided with `--seq_platform`. | :x: | +| `seq_center` | The sequencing center in which the data in the FASTQ files was sequenced. This value will take precedence over the value provided with `--seq_center`. | :x: | :white_check_mark: = Required :x: = Not required diff --git a/subworkflows/local/fastq_align_star/main.nf b/subworkflows/local/fastq_align_star/main.nf index 194c0c29c..9f4620416 100644 --- a/subworkflows/local/fastq_align_star/main.nf +++ b/subworkflows/local/fastq_align_star/main.nf @@ -10,8 +10,6 @@ workflow FASTQ_ALIGN_STAR { fasta // channel: [ meta, fasta ] fai // channel: [ meta, fai ] ignore_sjdbgtf // boolean - seq_platform // string - seq_center // string cram // boolean: Create CRAM files main: @@ -21,8 +19,8 @@ workflow FASTQ_ALIGN_STAR { index, gtf, ignore_sjdbgtf, - seq_platform, - seq_center + "", // seq_platform is handled in the config + "" // seq_center is handled in the config ) ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 374edc946..bda6500af 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -75,7 +75,7 @@ workflow RNAFUSION { if (align && !fastqs) { error("No fastq files found for ${meta.id}. Either provide fastq files to align or provide a BAM/CRAM file, a junctions file and a split junctions file.") } - def new_meta = meta + [align:align] + def new_meta = meta + [align:align, seq_center:meta.seq_center ?: params.seq_center, seq_platform:meta.seq_platform ?: params.seq_platform] return [ new_meta, fastqs, bam, bai, cram, crai, junctions, splice_junctions ] } .tap { ch_samplesheet } @@ -184,8 +184,6 @@ workflow RNAFUSION { BUILD_REFERENCES.out.fasta, BUILD_REFERENCES.out.fai, params.star_ignore_sjdbgtf, - params.seq_platform, - params.seq_center, params.cram ) ch_versions = ch_versions.mix(FASTQ_ALIGN_STAR.out.versions) From ae125b7fada350ec91aeef00deb567144dbb129b Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 22 Apr 2025 16:51:10 +0200 Subject: [PATCH 455/887] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce6860041..5973096f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `junctions`: A file containing the junctions determined by STAR (needed by `starfusion` and `ctatsplicing`) - `splice_junctions` A file containing the splice junctions determined by STAR (needed by `ctatsplicing`) - Added `--fusioncatcher_download_link`. [#650](https://github.com/nf-core/rnafusion/pull/650) +- Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) ### Changed From 1638c5fa9e742aa8f944575289ae2a33f4d0fc03 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 23 Apr 2025 10:36:05 +0200 Subject: [PATCH 456/887] update wget to conda-forge --- modules/local/gencode_download/main.nf | 8 ++++---- modules/local/hgnc/main.nf | 6 +++--- modules/local/starfusion/build/main.nf | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/local/gencode_download/main.nf b/modules/local/gencode_download/main.nf index 1f466d264..a3308e827 100644 --- a/modules/local/gencode_download/main.nf +++ b/modules/local/gencode_download/main.nf @@ -4,8 +4,8 @@ process GENCODE_DOWNLOAD { conda "bioconda::gnu-wget=1.18" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : - 'quay.io/biocontainers/gnu-wget:1.18--h5bf99c6_5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3b/3b54fa9135194c72a18d00db6b399c03248103f87e43ca75e4b50d61179994b3/data' : + 'community.wave.seqera.io/library/wget:1.21.4--8b0fcde81c17be5e' }" input: val genome_gencode_version @@ -24,9 +24,9 @@ process GENCODE_DOWNLOAD { def folder_gencode = genome.contains("38") ? "" : "/${genome}_mapping" def gtf_file_name = genome.contains("38") ? "gencode.v${genome_gencode_version}.primary_assembly.annotation.gtf.gz" : "gencode.v${genome_gencode_version}lift${genome_gencode_version}.annotation.gtf.gz" """ - wget ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_${genome_gencode_version}/${folder_gencode}${genome}.primary_assembly.genome.fa.gz -O Homo_sapiens_${genome}_${genome_gencode_version}_dna_primary_assembly.fa.gz + wget --no-check-certificate ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_${genome_gencode_version}/${folder_gencode}${genome}.primary_assembly.genome.fa.gz -O Homo_sapiens_${genome}_${genome_gencode_version}_dna_primary_assembly.fa.gz gunzip Homo_sapiens_${genome}_${genome_gencode_version}_dna_primary_assembly.fa.gz - wget ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_${genome_gencode_version}/${folder_gencode}${gtf_file_name} -O Homo_sapiens_${genome}_${genome_gencode_version}.gtf.gz + wget --no-check-certificate ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_${genome_gencode_version}/${folder_gencode}${gtf_file_name} -O Homo_sapiens_${genome}_${genome_gencode_version}.gtf.gz gunzip Homo_sapiens_${genome}_${genome_gencode_version}.gtf.gz cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index aa5c077cc..0b4e4a2f5 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -4,8 +4,8 @@ process HGNC_DOWNLOAD { conda "bioconda::gnu-wget=1.18" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h5bf99c6_5' : - 'biocontainers/gnu-wget:1.18--h5bf99c6_5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3b/3b54fa9135194c72a18d00db6b399c03248103f87e43ca75e4b50d61179994b3/data' : + 'community.wave.seqera.io/library/wget:1.21.4--8b0fcde81c17be5e' }" output: path "hgnc_complete_set.txt" , emit: hgnc_ref @@ -15,7 +15,7 @@ process HGNC_DOWNLOAD { script: """ - wget https://storage.googleapis.com/public-download-files/hgnc/tsv/tsv/hgnc_complete_set.txt + wget --no-check-certificate https://storage.googleapis.com/public-download-files/hgnc/tsv/tsv/hgnc_complete_set.txt date +%Y-%m-%d/%H:%M > HGNC-DB-timestamp.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index f66106e2a..ada898bc8 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -41,6 +41,7 @@ process STARFUSION_BUILD { cat <<-END_VERSIONS > versions.yml "${task.process}": + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) STAR-Fusion: \$(STAR-Fusion --version 2>&1 | grep -i 'version' | sed 's/STAR-Fusion version: //') END_VERSIONS """ @@ -132,6 +133,7 @@ process STARFUSION_BUILD { cat <<-END_VERSIONS > versions.yml "${task.process}": + wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) STAR-Fusion: \$(STAR-Fusion --version 2>&1 | grep -i 'version' | sed 's/STAR-Fusion version: //') END_VERSIONS """ From 14c2c88f20381b171d87a8538cdad6101c31e67e Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 23 Apr 2025 10:52:30 +0200 Subject: [PATCH 457/887] bump changelog, fix tests --- CHANGELOG.md | 1 + modules/local/gencode_download/main.nf | 4 +-- modules/local/hgnc/main.nf | 4 +-- modules/local/starfusion/build/main.nf | 4 +-- tests/test_stub.nf.test.snap | 49 ++++++++++++++------------ 5 files changed, 34 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5973096f8..c0c462008 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `salmon` - `fusioninspector` - `all` => This will automatically run all of the above tools +- Updated all `wget` containers to `conda-forge::wget=1.21.4` [#655](https://github.com/nf-core/rnafusion/pull/655) ### Fixed diff --git a/modules/local/gencode_download/main.nf b/modules/local/gencode_download/main.nf index a3308e827..569c8df1e 100644 --- a/modules/local/gencode_download/main.nf +++ b/modules/local/gencode_download/main.nf @@ -31,7 +31,7 @@ process GENCODE_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) END_VERSIONS """ @@ -42,7 +42,7 @@ process GENCODE_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) END_VERSIONS """ diff --git a/modules/local/hgnc/main.nf b/modules/local/hgnc/main.nf index 0b4e4a2f5..576e4800a 100644 --- a/modules/local/hgnc/main.nf +++ b/modules/local/hgnc/main.nf @@ -20,7 +20,7 @@ process HGNC_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) END_VERSIONS """ @@ -31,7 +31,7 @@ process HGNC_DOWNLOAD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) END_VERSIONS """ diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index ada898bc8..6e04afd16 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -41,7 +41,7 @@ process STARFUSION_BUILD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) STAR-Fusion: \$(STAR-Fusion --version 2>&1 | grep -i 'version' | sed 's/STAR-Fusion version: //') END_VERSIONS """ @@ -133,7 +133,7 @@ process STARFUSION_BUILD { cat <<-END_VERSIONS > versions.yml "${task.process}": - wget: \$(echo wget -V 2>&1 | grep "GNU Wget" | cut -d" " -f3) + wget: \$(wget --version | head -1 | cut -d ' ' -f 3) STAR-Fusion: \$(STAR-Fusion --version 2>&1 | grep -i 'version' | sed 's/STAR-Fusion version: //') END_VERSIONS """ diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index d58e52dae..8ab99e9b8 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -17,7 +17,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -41,6 +41,7 @@ "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { @@ -210,7 +211,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:41:41.407790326" + "timestamp": "2025-04-23T10:48:48.9071057" }, "stub test stringtie": { "content": [ @@ -230,7 +231,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -350,7 +351,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:50:39.921183013" + "timestamp": "2025-04-23T10:49:24.923946194" }, "stub test arriba": { "content": [ @@ -376,7 +377,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -491,7 +492,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:39:53.022836825" + "timestamp": "2025-04-23T10:47:08.02222829" }, "stub test fusioninspector": { "content": [ @@ -529,7 +530,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -538,7 +539,7 @@ "gtfToGenePred": 377 }, "HGNC_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" @@ -553,6 +554,7 @@ "samtools": 1.21 }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { @@ -864,7 +866,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-11T09:17:30.682830486" + "timestamp": "2025-04-23T10:51:45.508140056" }, "stub test salmon": { "content": [ @@ -880,7 +882,7 @@ "gatk4": "4.6.1.0" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -955,7 +957,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:44:11.204966248" + "timestamp": "2025-04-23T10:51:03.157975722" }, "stub test ctatsplicing": { "content": [ @@ -981,7 +983,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1002,6 +1004,7 @@ "samtools": 1.21 }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { @@ -1184,7 +1187,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T16:59:53.744205313" + "timestamp": "2025-04-23T10:47:44.413622274" }, "stub test fusionreport": { "content": [ @@ -1223,7 +1226,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1247,6 +1250,7 @@ "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { @@ -1445,7 +1449,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-16T10:39:10.08713305" + "timestamp": "2025-04-23T10:50:05.389865001" }, "stub test fastp": { "content": [ @@ -1467,7 +1471,7 @@ "gatk4": "4.6.1.0" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1519,7 +1523,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-03T15:43:33.740487484" + "timestamp": "2025-04-23T10:50:34.188288253" }, "stub test fusioncatcher": { "content": [ @@ -1542,7 +1546,7 @@ "gatk4": "4.6.1.0" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1592,7 +1596,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-16T10:35:22.7562139" + "timestamp": "2025-04-23T10:48:13.754663354" }, "stub test all": { "content": [ @@ -1649,7 +1653,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1661,7 +1665,7 @@ "gtfToGenePred": 377 }, "HGNC_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" @@ -1685,6 +1689,7 @@ "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { @@ -2069,6 +2074,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-16T10:32:08.583950433" + "timestamp": "2025-04-23T10:46:29.001694439" } } \ No newline at end of file From 3260a04347baa1d15b1bebef3265aaedc05e0f3d Mon Sep 17 00:00:00 2001 From: nvnieuwk Date: Wed, 23 Apr 2025 11:36:00 +0000 Subject: [PATCH 458/887] fix snaps --- tests/test_build.nf.test.snap | 5 ++-- tests/test_stub_bam.nf.test.snap | 49 ++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 2d07ed660..b59e6e189 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -25,7 +25,7 @@ "gtfToGenePred": 377 }, "HGNC_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "SALMON_INDEX": { "salmon": "1.10.3" @@ -34,6 +34,7 @@ "samtools": 1.21 }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { @@ -279,6 +280,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-03-19T14:46:22.709176112" + "timestamp": "2025-04-23T10:08:10.68706064" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index ac8414578..64d3b67a7 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -17,7 +17,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -38,6 +38,7 @@ "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { @@ -183,7 +184,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:09:48.999599917" + "timestamp": "2025-04-23T11:16:16.851201431" }, "stub test stringtie": { "content": [ @@ -203,7 +204,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -299,7 +300,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:10:23.893097743" + "timestamp": "2025-04-23T11:16:59.945308111" }, "stub test arriba": { "content": [ @@ -325,7 +326,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -413,7 +414,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:07:56.264754749" + "timestamp": "2025-04-23T11:14:09.827324661" }, "stub test fusioninspector": { "content": [ @@ -451,7 +452,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -460,7 +461,7 @@ "gtfToGenePred": 377 }, "HGNC_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" @@ -472,6 +473,7 @@ "samtools": 1.21 }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { @@ -762,7 +764,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-11T09:25:46.143222996" + "timestamp": "2025-04-23T11:20:00.302967276" }, "stub test salmon": { "content": [ @@ -782,7 +784,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -872,7 +874,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:12:30.758487268" + "timestamp": "2025-04-23T11:19:13.383274003" }, "stub test ctatsplicing": { "content": [ @@ -898,7 +900,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -916,6 +918,7 @@ "samtools": 1.21 }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { @@ -1077,7 +1080,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:08:38.341565744" + "timestamp": "2025-04-23T11:14:53.085896038" }, "stub test fusionreport": { "content": [ @@ -1116,7 +1119,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1137,6 +1140,7 @@ "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { @@ -1311,7 +1315,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-16T10:51:50.320939135" + "timestamp": "2025-04-23T11:17:44.757543251" }, "stub test fastp": { "content": [ @@ -1337,7 +1341,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1404,7 +1408,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-10T10:11:47.209265436" + "timestamp": "2025-04-23T11:18:29.048528226" }, "stub test fusioncatcher": { "content": [ @@ -1431,7 +1435,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1496,7 +1500,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-16T10:48:04.746178504" + "timestamp": "2025-04-23T11:15:34.335857758" }, "stub test all": { "content": [ @@ -1553,7 +1557,7 @@ "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "GET_RRNA_TRANSCRIPTS": { "get_rrna_transcripts": "v1.0" @@ -1565,7 +1569,7 @@ "gtfToGenePred": 377 }, "HGNC_DOWNLOAD": { - "wget": null + "wget": "1.21.4" }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" @@ -1586,6 +1590,7 @@ "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { + "wget": "1.21.4", "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { @@ -1949,6 +1954,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-04-16T10:44:36.932311827" + "timestamp": "2025-04-23T11:13:24.397441064" } } \ No newline at end of file From ebd19b8902d1925a35cf8a032cc95debb2771b28 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:53:14 +0200 Subject: [PATCH 459/887] update starfusion build arguments --- CHANGELOG.md | 2 +- conf/modules.config | 1 + modules/local/fusioncatcher/build/main.nf | 0 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 modules/local/fusioncatcher/build/main.nf diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c462008..d84192716 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -118,7 +118,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Update to nf-tools 2.11.1 [#457] (https://github.com/nf-core/rnafusion/pull/457) +- Update to nf-tools 2.11.1 [#457](https://github.com/nf-core/rnafusion/pull/457) - Update picard collectrnaseqmetrics memory requirements to 0.8x what is provided [#474](https://github.com/nf-core/rnafusion/pull/474) ### Fixed diff --git a/conf/modules.config b/conf/modules.config index 6314217e2..a67604af5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -275,6 +275,7 @@ process { } withName: 'STARFUSION_BUILD' { + ext.args = { params.species.contains("homo_sapiens") ? "--human_gencode_filter": '' } cpus = { 24 * task.attempt } memory = { 100.GB * task.attempt } time = { 2.d * task.attempt } diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf new file mode 100644 index 000000000..e69de29bb From c54a51adcaf2cb996b260b4d43646d3aba0c2c47 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:55:27 +0200 Subject: [PATCH 460/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d84192716..5ad487b15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `splice_junctions` A file containing the splice junctions determined by STAR (needed by `ctatsplicing`) - Added `--fusioncatcher_download_link`. [#650](https://github.com/nf-core/rnafusion/pull/650) - Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) +- Using option `--human_gencode_filter` while building STARFusion references for human specie [#657](https://github.com/nf-core/rnafusion/pull/657) ### Changed From 8c13f8c88cda5807becae43a205aaf939a33b983 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:22:33 +0200 Subject: [PATCH 461/887] Update CHANGELOG.md Co-authored-by: Anabella Trigila <18577080+atrigila@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ad487b15..964adfd2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,7 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `splice_junctions` A file containing the splice junctions determined by STAR (needed by `ctatsplicing`) - Added `--fusioncatcher_download_link`. [#650](https://github.com/nf-core/rnafusion/pull/650) - Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) -- Using option `--human_gencode_filter` while building STARFusion references for human specie [#657](https://github.com/nf-core/rnafusion/pull/657) +- Using option `--human_gencode_filter` while building STARFusion references for human species [#657](https://github.com/nf-core/rnafusion/pull/657) ### Changed From 53cfc831296163e948d177358efa9fcaef9b794c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:23:25 +0200 Subject: [PATCH 462/887] remove file --- modules/local/fusioncatcher/build/main.nf | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 modules/local/fusioncatcher/build/main.nf diff --git a/modules/local/fusioncatcher/build/main.nf b/modules/local/fusioncatcher/build/main.nf deleted file mode 100644 index e69de29bb..000000000 From 13ad9f15fd0dc2b32e0ffb4a104b3557bfab0ce4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:26:45 +0200 Subject: [PATCH 463/887] remove human_genocode_filter for tests --- tests/nextflow.config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/nextflow.config b/tests/nextflow.config index abb1ba9c1..b1db55ff5 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -5,4 +5,8 @@ process { memory: '15.GB', time: '4.h' ] + + withName: 'STARFUSION_BUILD' { + ext.args = '' + } } From bd7113ad52f693c657fb41236f3d2d7a005ac9f4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:30:39 +0200 Subject: [PATCH 464/887] fusioncatcher test has to be re-addressed --- .../fusioncatcher_workflow/tests/main.nf.test | 66 ------------------- .../tests/main.nf.test.snap | 37 ----------- 2 files changed, 103 deletions(-) delete mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test delete mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test deleted file mode 100644 index ef6cecc7d..000000000 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test +++ /dev/null @@ -1,66 +0,0 @@ -nextflow_workflow { - - name "Test Subworkflow FUSIONCATCHER_WORKFLOW" - script "../main.nf" - workflow "FUSIONCATCHER_WORKFLOW" - tag "subworkflow" - tag "fusioncatcher" - tag "fusioncatcher/build" - tag "fusioncatcher/detect" - - // Test - test("FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4") { - - setup { - // Download reference files for fusioncatch - run("FUSIONCATCHER_BUILD") { - script "../../../../modules/local/fusioncatcher/build/main.nf" - process { - """ - input[0] = Channel.value('46') - """ - } - } - } - - // TODO: get smaller reference files for fusioncatcher - when { - workflow { - """ - // ch_reads - input[0] = Channel.of( - [ - [ id: "test_fastqs", single_end: false ], - [ - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_1.fq.gz", checkIfExists: true), - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion/testdata/human/reads_2.fq.gz", checkIfExists: true) - ] - ] ) - - // ch_references - input[1] = FUSIONCATCHER_BUILD.out.reference - - // fusioncatcher (boolean) - input[2] = true - - // all (boolean) - input[3] = true - - // fusioninspector_only (boolean) - input[4] = false - - // fusioncatcher_fusions (string path) - input[5] = null - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - -} diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap deleted file mode 100644 index 47ffc5af1..000000000 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap +++ /dev/null @@ -1,37 +0,0 @@ -{ - "FUSIONCATCHER_WORKFLOW - Homo sapiens - FASTQs chr4": { - "content": [ - { - "0": [ - [ - { - "id": "test_fastqs", - "single_end": false - }, - "test_fastqs.fusioncatcher.fusion-genes.txt:md5,c826a24c49abfcec8164c478e1e74892" - ] - ], - "1": [ - "versions.yml:md5,05bd93a243728a293211ce52e5f97282" - ], - "fusions": [ - [ - { - "id": "test_fastqs", - "single_end": false - }, - "test_fastqs.fusioncatcher.fusion-genes.txt:md5,c826a24c49abfcec8164c478e1e74892" - ] - ], - "versions": [ - "versions.yml:md5,05bd93a243728a293211ce52e5f97282" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" - }, - "timestamp": "2025-01-03T19:29:54.767628" - } -} \ No newline at end of file From 61f19ef7170ba871e10e6c349fffe7ad69504c44 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:42:46 +0200 Subject: [PATCH 465/887] add handling of strandedness for picard collectrnaseqmetrics --- conf/modules.config | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 6314217e2..cbc568a1b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -188,6 +188,21 @@ process { ] } + + withName:PICARD_COLLECTRNASEQMETRICS { + ext.args = { ( meta.strandedness == "forward" || meta.single_end ) ? + "--STRAND_SPECIFICITY FIRST_READ_TRANSCRIPTION_STRAND" : + meta.strandedness == "reverse" ? + "--STRAND_SPECIFICITY SECOND_READ_TRANSCRIPTION_STRAND" : + "--STRAND_SPECIFICITY NONE" + } + publishDir = [ + path: { "${params.outdir}/picard" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: 'SALMON_INDEX' { publishDir = [ path: { "${params.genomes_base}/salmon" }, From e4ce78f8b86c37f7e756e4293770e6aca8b903af Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:46:52 +0200 Subject: [PATCH 466/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c462008..18a2a3cfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `splice_junctions` A file containing the splice junctions determined by STAR (needed by `ctatsplicing`) - Added `--fusioncatcher_download_link`. [#650](https://github.com/nf-core/rnafusion/pull/650) - Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) +- Moved strandedness determination for picard collectrnaseqmetrics into modules.config [#658](https://github.com/nf-core/rnafusion/pull/658) ### Changed From 683a29935180415449f77207e71f29083abb02f2 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Apr 2025 11:08:52 +0200 Subject: [PATCH 467/887] modify build --- modules/local/starfusion/build/main.nf | 6 ++++-- nextflow_schema.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 6e04afd16..759cfebd1 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -21,14 +21,15 @@ process STARFUSION_BUILD { script: def args = task.ext.args ?: '' """ - wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam34.0/Pfam-A.hmm.gz --no-check-certificate - + wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam37.4/Pfam-A.hmm.gz --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3f --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3i --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3m --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3p --no-check-certificate gunzip Pfam-A.hmm.gz && hmmpress Pfam-A.hmm + wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm -O AnnotFilterRule.pm --no-check-certificate + prep_genome_lib.pl \\ --genome_fa $fasta \\ @@ -36,6 +37,7 @@ process STARFUSION_BUILD { --dfam_db ${dfam_species}_dfam.hmm \\ --pfam_db Pfam-A.hmm \\ --fusion_annot_lib $fusion_annot_lib \\ + --annot_filter_rule AnnotFilterRule.pm \\ --CPU $task.cpus \\ ${args} diff --git a/nextflow_schema.json b/nextflow_schema.json index 190b98292..101e82c68 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -363,7 +363,7 @@ }, "dfam_version": { "type": "string", - "default": "3.4", + "default": "3.9", "description": "Version of dfam to use" } } From 0fc2aa3d30a931590355c962e24ba1132023f824 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Apr 2025 11:28:43 +0200 Subject: [PATCH 468/887] update dfam --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index fa731713b..0c1ba2735 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,7 +32,7 @@ params { genomes = [:] fusion_annot_lib = "https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz" // path to dat.gz CTAT genome lib // TODO: Update to latest with s3 link when available species = "homo_sapiens" - dfam_version = '3.4' + dfam_version = '3.9' // Filtering tools_cutoff = 1 From 9f6fcb3527db1f5177064f61292d6b6521c89303 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Apr 2025 11:40:55 +0200 Subject: [PATCH 469/887] update dfam --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 0c1ba2735..fdbd7ccb1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,7 +32,7 @@ params { genomes = [:] fusion_annot_lib = "https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz" // path to dat.gz CTAT genome lib // TODO: Update to latest with s3 link when available species = "homo_sapiens" - dfam_version = '3.9' + dfam_version = '3.8' // Filtering tools_cutoff = 1 From 3da3c2f2f95e32f21a40fd689aad2588ac561770 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Sun, 27 Apr 2025 13:49:58 +0200 Subject: [PATCH 470/887] remove human filtering --- conf/modules.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index a97d0806c..cbc568a1b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -290,7 +290,6 @@ process { } withName: 'STARFUSION_BUILD' { - ext.args = { params.species.contains("homo_sapiens") ? "--human_gencode_filter": '' } cpus = { 24 * task.attempt } memory = { 100.GB * task.attempt } time = { 2.d * task.attempt } From aa7326415cb5848f9c5cf6775ca2f85bb0c830cc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Apr 2025 20:40:27 +0200 Subject: [PATCH 471/887] add filter again --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index cbc568a1b..a97d0806c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -290,6 +290,7 @@ process { } withName: 'STARFUSION_BUILD' { + ext.args = { params.species.contains("homo_sapiens") ? "--human_gencode_filter": '' } cpus = { 24 * task.attempt } memory = { 100.GB * task.attempt } time = { 2.d * task.attempt } From 3b71f2e90c45c465037e356ac1a815f7d1294363 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:44:48 +0200 Subject: [PATCH 472/887] update bin path --- modules/local/starfusion/build/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 759cfebd1..57ac49de7 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -31,7 +31,7 @@ process STARFUSION_BUILD { wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm -O AnnotFilterRule.pm --no-check-certificate - prep_genome_lib.pl \\ + /usr/local/src/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ --dfam_db ${dfam_species}_dfam.hmm \\ From aee02d7336c432d98a4b95275294a7340e6de382 Mon Sep 17 00:00:00 2001 From: Rob Syme Date: Tue, 29 Apr 2025 08:59:40 -0400 Subject: [PATCH 473/887] Update fastq path regex to allow spaces in directory paths. --- assets/schema_input.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 83684a04a..fe867086c 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -17,15 +17,15 @@ "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces, has to exist and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", + "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces in filename, has to exist and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 2 cannot contain spaces, has to exist and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", + "errorMessage": "FastQ file for reads 2 cannot contain spaces in filename, has to exist and must have extension '.fq.gz' or '.fastq.gz'" }, "bam": { "type": "string", From 29e2f0806d468a60c35d4d39ccc07cc46e1a9378 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 30 Apr 2025 12:45:13 +0200 Subject: [PATCH 474/887] fix a bug in salmon index parsing --- subworkflows/local/build_references/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index 30a26db36..c9729ed64 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -116,7 +116,7 @@ workflow BUILD_REFERENCES { ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) ch_salmon_index = SALMON_INDEX.out.index } else { - ch_salmon_index = Channel.fromPath(params.salmon_index).map { it -> [[id:it.name], it] } + ch_salmon_index = Channel.fromPath(params.salmon_index) } } } From 1aa8ff1afbcac749c21989c1ef2d7f98cbd11356 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 30 Apr 2025 12:28:11 +0000 Subject: [PATCH 475/887] Template update for nf-core/tools version 3.2.1 --- .github/workflows/awsfulltest.yml | 41 ++++++++----------------------- .github/workflows/ci.yml | 1 + .nf-core.yml | 2 +- nextflow.config | 2 +- ro-crate-metadata.json | 36 +++++++++++++-------------- 5 files changed, 31 insertions(+), 51 deletions(-) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 2281992a2..a733b9c77 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -4,44 +4,23 @@ name: nf-core AWS full size tests # It runs the -profile 'test_full' on AWS batch on: - pull_request: - branches: - - main - - master workflow_dispatch: pull_request_review: types: [submitted] + release: + types: [published] jobs: run-platform: name: Run AWS full tests - # run only if the PR is approved by at least 2 reviewers and against the master branch or manually triggered - if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' + # run only if the PR is approved by at least 2 reviewers and against the master/main branch or manually triggered + if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - - name: Get PR reviews - uses: octokit/request-action@v2.x - if: github.event_name != 'workflow_dispatch' - id: check_approvals - continue-on-error: true - with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews?per_page=100 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Check for approvals - if: ${{ failure() && github.event_name != 'workflow_dispatch' }} - run: | - echo "No review approvals found. At least 2 approvals are required to run this action automatically." - exit 1 - - - name: Check for enough approvals (>=2) - id: test_variables - if: github.event_name != 'workflow_dispatch' + - name: Set revision variable + id: revision run: | - JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' - CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') - test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required + echo "revision=${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'release') && github.sha || 'dev' }}" >> "$GITHUB_OUTPUT" - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 @@ -52,12 +31,12 @@ jobs: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/rnafusion/work-${{ github.sha }} + revision: ${{ steps.revision.outputs.revision }} + workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/rnafusion/work-${{ steps.revision.outputs.revision }} parameters: | { "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-${{ github.sha }}" + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-${{ steps.revision.outputs.revision }}" } profiles: test_full diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 78fb3b574..59b0d7c77 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,5 +83,6 @@ jobs: uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" + continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} run: | nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.nf-core.yml b/.nf-core.yml index dae5ba31d..4431e715a 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,7 +4,7 @@ lint: - .github/PULL_REQUEST_TEMPLATE.md - conf/igenomes.config - conf/igenomes_ignored.config -nf_core_version: 3.2.0 +nf_core_version: 3.2.1 repository_type: pipeline template: author: Martin Proks, Annick Renevey diff --git a/nextflow.config b/nextflow.config index a309f87e6..0322d3a80 100644 --- a/nextflow.config +++ b/nextflow.config @@ -257,7 +257,7 @@ manifest { // Nextflow plugins plugins { - id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.2.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 972b1a807..ccf7d6388 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-01-27T14:47:28+00:00", + "datePublished": "2025-04-30T12:27:54+00:00", "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#472b4f7d-c1ad-4a49-9ebc-abac03e60cd0" + "@id": "#2c818c4f-fbf7-42fa-9200-2b8dc9844428" } ], "name": "nf-core/rnafusion" @@ -124,20 +124,20 @@ "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], "creator": [ { - "@id": "#phil.ewels@scilifelab.se" + "@id": "https://orcid.org/0000-0001-9017-591X" }, { - "@id": "#max.u.garcia@gmail.com" + "@id": "#phil.ewels@scilifelab.se" }, { "@id": "https://orcid.org/0000-0002-8178-3128" }, { - "@id": "https://orcid.org/0000-0001-9017-591X" + "@id": "#max.u.garcia@gmail.com" } ], "dateCreated": "", - "dateModified": "2025-01-27T14:47:28Z", + "dateModified": "2025-04-30T12:27:54Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": ["nf-core", "nextflow", "fusion", "fusion-genes", "gene-fusion", "rna", "rna-seq"], "license": ["MIT"], @@ -169,11 +169,11 @@ "version": "!>=24.04.2" }, { - "@id": "#472b4f7d-c1ad-4a49-9ebc-abac03e60cd0", + "@id": "#2c818c4f-fbf7-42fa-9200-2b8dc9844428", "@type": "TestSuite", "instance": [ { - "@id": "#a52cf27d-3699-475d-b4c8-2eb08a2f0245" + "@id": "#c6d68ba1-a887-413a-b175-e9947384e9d7" } ], "mainEntity": { @@ -182,7 +182,7 @@ "name": "Test suite for nf-core/rnafusion" }, { - "@id": "#a52cf27d-3699-475d-b4c8-2eb08a2f0245", + "@id": "#c6d68ba1-a887-413a-b175-e9947384e9d7", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/rnafusion", "resource": "repos/nf-core/rnafusion/actions/workflows/ci.yml", @@ -311,16 +311,16 @@ "url": "https://nf-co.re/" }, { - "@id": "#phil.ewels@scilifelab.se", + "@id": "https://orcid.org/0000-0001-9017-591X", "@type": "Person", - "email": "phil.ewels@scilifelab.se", - "name": "Phil Ewels" + "email": "rickard.hammaren@scilifelab.se", + "name": "Rickard Hammar\u00e9n" }, { - "@id": "#max.u.garcia@gmail.com", + "@id": "#phil.ewels@scilifelab.se", "@type": "Person", - "email": "max.u.garcia@gmail.com", - "name": "Maxime Garcia" + "email": "phil.ewels@scilifelab.se", + "name": "Phil Ewels" }, { "@id": "https://orcid.org/0000-0002-8178-3128", @@ -329,10 +329,10 @@ "name": "Martin Proks" }, { - "@id": "https://orcid.org/0000-0001-9017-591X", + "@id": "#max.u.garcia@gmail.com", "@type": "Person", - "email": "rickard.hammaren@scilifelab.se", - "name": "Rickard Hammar\u00e9n" + "email": "max.u.garcia@gmail.com", + "name": "Maxime Garcia" } ] } From c2ac863971945947d5093f9c289cd247f1a3d21e Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 30 Apr 2025 15:39:35 +0000 Subject: [PATCH 476/887] fix linting error --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 779e7ac80..ecbefe6f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,9 +92,6 @@ jobs: - name: Clean up Disk space uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" - continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} - - uses: actions/setup-python@v4 with: python-version: "3.11" @@ -110,6 +107,7 @@ jobs: version: ${{ env.NFT_VER }} - name: Run Tests (${{matrix.NXF_VER}} | ${{matrix.test_profile}} | ${{matrix.compute_profile}}) + continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} run: | nf-test test \ --ci \ From 61c668fd6dc65969d0eb37e4b402e10c2f4795da Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 5 May 2025 09:30:49 +0200 Subject: [PATCH 477/887] update fastqc --- modules.json | 2 +- modules/nf-core/fastqc/environment.yml | 2 ++ modules/nf-core/fastqc/main.nf | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index 04fcccc52..151ea80e6 100644 --- a/modules.json +++ b/modules.json @@ -37,7 +37,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "08108058ea36a63f141c25c4e75f9f872a5b2296", + "git_sha": "b1966f36ec9de31927b2603d8f499960b2a4c294", "installed_by": ["modules"] }, "fusioncatcher/fusioncatcher": { diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 691d4c763..f9f54ee9b 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 033f4154a..23e16634c 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -29,7 +29,7 @@ process FASTQC { // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label - def memory_in_mb = task.memory ? task.memory.toUnit('MB').toFloat() / task.cpus : null + def memory_in_mb = task.memory ? task.memory.toUnit('MB') / task.cpus : null // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) From aa29fe99831cfd8accf9ca07e5a6ff6b0bba2616 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 5 May 2025 09:53:58 +0200 Subject: [PATCH 478/887] update fastp --- modules.json | 2 +- modules/nf-core/fastp/environment.yml | 4 +- modules/nf-core/fastp/main.nf | 4 +- modules/nf-core/fastp/meta.yml | 5 +- modules/nf-core/fastp/tests/main.nf.test.snap | 180 +++++++++--------- modules/nf-core/fastp/tests/tags.yml | 2 - 6 files changed, 99 insertions(+), 98 deletions(-) delete mode 100644 modules/nf-core/fastp/tests/tags.yml diff --git a/modules.json b/modules.json index 151ea80e6..e6453690e 100644 --- a/modules.json +++ b/modules.json @@ -32,7 +32,7 @@ }, "fastp": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "d082103d7976a2804f21225446cc110cbd822f4c", "installed_by": ["modules"] }, "fastqc": { diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml index 26d4aca5d..90adcd2c5 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -1,5 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::fastp=0.23.4 + - bioconda::fastp=0.24.0 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index e1b9f5656..1342741d5 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -4,8 +4,8 @@ process FASTP { 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' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/88/889a182b8066804f4799f3808a5813ad601381a8a0e3baa4ab8d73e739b97001/data' : + 'community.wave.seqera.io/library/fastp:0.24.0--62c97b06e8447690' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index 159404d08..9c4b24584 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -30,8 +30,9 @@ input: pattern: "*.{fasta,fna,fas,fa}" - - discard_trimmed_pass: type: boolean - description: Specify true to not write any reads that pass trimming thresholds. - | This can be used to use fastp for the output report only. + description: | + Specify true to not write any reads that pass trimming thresholds. + This can be used to use fastp for the output report only. - - save_trimmed_fail: type: boolean description: Specify true to save files that failed to pass trimming thresholds diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 54be7e45f..9e2aaf315 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -39,7 +39,7 @@ ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -78,15 +78,15 @@ ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T14:31:10.841098" + "timestamp": "2025-03-31T13:40:51.8619133" }, "test_fastp_paired_end": { "content": [ @@ -96,7 +96,7 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" ] ], [ @@ -118,14 +118,14 @@ ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:43:28.665779" + "timestamp": "2025-03-31T13:39:15.121411815" }, "test_fastp_paired_end_merged_adapterlist": { "content": [ @@ -135,7 +135,7 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" + "test.fastp.json:md5,533983f8c11cc3f2ccdcea01531f68ae" ] ], [ @@ -163,14 +163,14 @@ ] ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:44:18.210375" + "timestamp": "2025-03-31T13:39:51.561598206" }, "test_fastp_single_end_qc_only": { "content": [ @@ -180,7 +180,7 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" + "test.fastp.json:md5,93f407199ee8b94c023c291bddfc4dce" ] ], [ @@ -202,14 +202,14 @@ ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:44:27.380974" + "timestamp": "2025-03-31T13:39:56.392912049" }, "test_fastp_paired_end_trim_fail": { "content": [ @@ -247,18 +247,18 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + "test.fastp.json:md5,5009a892192f2084c2af69c153d88d6c" ] ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:43:58.749589" + "timestamp": "2025-03-31T13:39:38.690242568" }, "fastp - stub test_fastp_interleaved": { "content": [ @@ -306,7 +306,7 @@ ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -351,15 +351,15 @@ ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:50:00.270029" + "timestamp": "2025-03-31T13:40:23.678200076" }, "test_fastp_single_end - stub": { "content": [ @@ -407,7 +407,7 @@ ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -452,15 +452,15 @@ ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:49:42.502789" + "timestamp": "2025-03-31T13:40:08.756547678" }, "test_fastp_paired_end_merged_adapterlist - stub": { "content": [ @@ -517,7 +517,7 @@ ] ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -571,15 +571,15 @@ ] ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:54:53.458252" + "timestamp": "2025-03-31T13:40:47.596331823" }, "test_fastp_paired_end_merged - stub": { "content": [ @@ -636,7 +636,7 @@ ] ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -690,15 +690,15 @@ ] ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:50:27.689379" + "timestamp": "2025-03-31T13:40:39.962303534" }, "test_fastp_paired_end_merged": { "content": [ @@ -708,7 +708,7 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + "test.fastp.json:md5,8f99097bfa04b629891105b8af9c429f" ] ], [ @@ -736,14 +736,14 @@ ] ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:44:08.68476" + "timestamp": "2025-03-31T13:39:46.300238743" }, "test_fastp_paired_end - stub": { "content": [ @@ -794,7 +794,7 @@ ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -842,15 +842,15 @@ ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:49:51.679221" + "timestamp": "2025-03-31T13:40:16.309925689" }, "test_fastp_single_end": { "content": [ @@ -860,7 +860,7 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + "test.fastp.json:md5,81dc86dd695967bb5c015e0a978bf20c" ] ], [ @@ -879,14 +879,14 @@ ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:43:18.834322" + "timestamp": "2025-03-31T13:39:07.133909607" }, "test_fastp_single_end_trim_fail - stub": { "content": [ @@ -940,7 +940,7 @@ ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -991,15 +991,15 @@ ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T14:05:36.898142" + "timestamp": "2025-03-31T13:40:28.086573661" }, "test_fastp_paired_end_trim_fail - stub": { "content": [ @@ -1060,7 +1060,7 @@ ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -1118,15 +1118,15 @@ ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T14:05:49.212847" + "timestamp": "2025-03-31T13:40:35.606162029" }, "fastp test_fastp_interleaved": { "content": [ @@ -1145,18 +1145,18 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + "test.fastp.json:md5,101003b8ac634ca5fd381656ac2b8b9f" ] ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:43:38.910832" + "timestamp": "2025-03-31T13:39:23.114582408" }, "test_fastp_single_end_trim_fail": { "content": [ @@ -1166,7 +1166,7 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + "test.fastp.json:md5,d721f75d68a382c819b6499e6325a942" ] ], [ @@ -1191,14 +1191,14 @@ ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:43:48.22378" + "timestamp": "2025-03-31T13:39:30.757538842" }, "test_fastp_paired_end_qc_only": { "content": [ @@ -1208,7 +1208,7 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" + "test.fastp.json:md5,1ad31d6559ff5d4d275f501f3f5c02b9" ] ], [ @@ -1230,14 +1230,14 @@ ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T13:44:36.334938" + "timestamp": "2025-03-31T13:40:01.381972575" }, "test_fastp_paired_end_qc_only - stub": { "content": [ @@ -1279,7 +1279,7 @@ ], "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ], "html": [ [ @@ -1318,14 +1318,14 @@ ], "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2024-07-05T14:31:27.096468" + "timestamp": "2025-03-31T13:40:56.392034947" } } \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/tags.yml b/modules/nf-core/fastp/tests/tags.yml deleted file mode 100644 index c1afcce75..000000000 --- a/modules/nf-core/fastp/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastp: - - modules/nf-core/fastp/** From 1f421d768ecae0fa9794561adb011c0aba996589 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 08:50:38 +0200 Subject: [PATCH 479/887] update starfusion --- modules/local/starfusion/build/environment.yml | 4 ++-- modules/local/starfusion/build/main.nf | 4 ++-- modules/local/starfusion/detect/main.nf | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/local/starfusion/build/environment.yml b/modules/local/starfusion/build/environment.yml index ef7f93160..8ad0c17bf 100644 --- a/modules/local/starfusion/build/environment.yml +++ b/modules/local/starfusion/build/environment.yml @@ -4,5 +4,5 @@ channels: dependencies: - bioconda::dfam=3.7 - bioconda::hmmer=3.4 - - bioconda::minimap2=2.28 - - bioconda::star-fusion=1.14.0 + - bioconda::minimap2=2.29 + - bioconda::star-fusion=1.15.0 diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 57ac49de7..ecd8a71a8 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -4,8 +4,8 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 00c78efc7..0bf271541 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -4,8 +4,8 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" input: tuple val(meta), path(reads), path(junction) From f6dc429383b4368bfe6240d56002e0ed2ec6b367 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 08:57:50 +0200 Subject: [PATCH 480/887] dfam_version to 3.8 only --- nextflow_schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 101e82c68..be565ef1f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -363,7 +363,6 @@ }, "dfam_version": { "type": "string", - "default": "3.9", "description": "Version of dfam to use" } } From d6c3a470f5110d1d2f1da6caae1953cd22a98e56 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 10:15:49 +0200 Subject: [PATCH 481/887] update fusionreport --- modules/local/fusionreport/detect/environment.yml | 2 +- modules/local/fusionreport/detect/main.nf | 4 ++-- modules/local/fusionreport/download/environment.yml | 2 +- modules/local/fusionreport/download/main.nf | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/local/fusionreport/detect/environment.yml b/modules/local/fusionreport/detect/environment.yml index 0d260fdb8..b3d78e480 100644 --- a/modules/local/fusionreport/detect/environment.yml +++ b/modules/local/fusionreport/detect/environment.yml @@ -2,5 +2,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::fusion-report=3.1.1 + - bioconda::fusion-report=4.0.0 - conda-forge::openpyxl=3.1.5 diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index bcb59877c..f912fcdb7 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -4,8 +4,8 @@ process FUSIONREPORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d9d1075dc45da6b08ec99c6e8bcc83e0ab71a674e7efdc7a36e459539793fcf9/data' : - 'community.wave.seqera.io/library/fusion-report_openpyxl:6748677442b83a9a'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/df/df38cfae9eebc99efdcd10782598f0d56320f17b66d173714e5fc99638ad88f3/data' : + 'community.wave.seqera.io/library/fusion-report:4.0.0--9d994e2b7da545ce'}" input: diff --git a/modules/local/fusionreport/download/environment.yml b/modules/local/fusionreport/download/environment.yml index 0d260fdb8..b3d78e480 100644 --- a/modules/local/fusionreport/download/environment.yml +++ b/modules/local/fusionreport/download/environment.yml @@ -2,5 +2,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::fusion-report=3.1.1 + - bioconda::fusion-report=4.0.0 - conda-forge::openpyxl=3.1.5 diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index ec62c75eb..fe3f3df7d 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -4,8 +4,8 @@ process FUSIONREPORT_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d9d1075dc45da6b08ec99c6e8bcc83e0ab71a674e7efdc7a36e459539793fcf9/data' : - 'community.wave.seqera.io/library/fusion-report_openpyxl:6748677442b83a9a'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/df/df38cfae9eebc99efdcd10782598f0d56320f17b66d173714e5fc99638ad88f3/data' : + 'community.wave.seqera.io/library/fusion-report:4.0.0--9d994e2b7da545ce'}" output: tuple val(meta), path("fusion_report_db"), emit: fusionreport_ref From 03231fd23bc9b7bcf10140e5eebc3dc40bea5607 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 11:44:59 +0200 Subject: [PATCH 482/887] add args2 --- modules/local/fusionreport/download/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index fe3f3df7d..460963024 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -16,7 +16,7 @@ process FUSIONREPORT_DOWNLOAD { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' """ - fusion_report download $args ./ + fusion_report download $args $args2 ./ mkdir fusion_report_db mv *.txt *.log *.db fusion_report_db/ From b6ddefe71256f7f7b21f59bc770008b28983ae16 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 12:10:04 +0200 Subject: [PATCH 483/887] fix untriggered condition --- conf/modules.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a97d0806c..c9d614eb1 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -65,7 +65,7 @@ process { } withName: 'FASTP' { - ext.args = params.trim_tail ? "--trim_tail1 ${params.trim_tail} --trim_tail2 ${params.trim_tail} " : '' + ext.args = { params.trim_tail ? "--trim_tail1 ${params.trim_tail} --trim_tail2 ${params.trim_tail} " : '' } } withName: 'FASTQC' { @@ -104,12 +104,12 @@ process { } withName: '.*FUSIONINSPECTOR_WORKFLOW:.*:FUSIONINSPECTOR' { - ext.args = { ${params.fusioninspector_limitSjdbInsertNsj} != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' } + ext.args = { params.fusioninspector_limitSjdbInsertNsj != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' } ext.args2 = '--annotate --examine_coding_effect' } withName: 'FUSIONREPORT' { - ext.args = { {params.no_cosmic} ? "--no-cosmic" : "" } + ext.args = { params.no_cosmic ? "--no-cosmic" : "" } ext.args2 = "--export csv" publishDir = [ path: { "${params.outdir}/fusionreport/${meta.id}" }, @@ -119,7 +119,7 @@ process { } withName: 'FUSIONREPORT_DOWNLOAD' { - ext.args = { {params.no_cosmic} ? "--no-cosmic" : " --cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } + ext.args = { params.no_cosmic ? "--no-cosmic" : " --cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } ext.args2 = { params.qiagen ? "--qiagen" : "" } publishDir = [ path: { "${params.genomes_base}" }, @@ -171,7 +171,7 @@ process { } withName: 'MULTIQC' { - ext.args = {params.multiqc_title} ? "--title \"$params.multiqc_title\"" : '' + ext.args = {params.multiqc_title ? "--title \"$params.multiqc_title\"" : ''} publishDir = [ path: { "${params.outdir}/multiqc" }, mode: params.publish_dir_mode, From 6b0900562df5f4e4e7140ad940ef45c901a97bb5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 12:39:39 +0200 Subject: [PATCH 484/887] update containers --- modules/local/fusionreport/detect/main.nf | 4 ++-- modules/local/fusionreport/download/main.nf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index f912fcdb7..5143d53c8 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -4,8 +4,8 @@ process FUSIONREPORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/df/df38cfae9eebc99efdcd10782598f0d56320f17b66d173714e5fc99638ad88f3/data' : - 'community.wave.seqera.io/library/fusion-report:4.0.0--9d994e2b7da545ce'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d99b7576d14caafd0494d6e2c1453edd161a933ccb62940701074128d3718bc5/data' : + 'community.wave.seqera.io/library/fusion-report_openpyxl:77a2ba7e76ae0694'}" input: diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 460963024..9c19a64fc 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -4,8 +4,8 @@ process FUSIONREPORT_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/df/df38cfae9eebc99efdcd10782598f0d56320f17b66d173714e5fc99638ad88f3/data' : - 'community.wave.seqera.io/library/fusion-report:4.0.0--9d994e2b7da545ce'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d99b7576d14caafd0494d6e2c1453edd161a933ccb62940701074128d3718bc5/data'' : + 'community.wave.seqera.io/library/fusion-report_openpyxl:77a2ba7e76ae0694'}" output: tuple val(meta), path("fusion_report_db"), emit: fusionreport_ref From 85a1031ded7d40d7be8bae3e348eb30c36a9d532 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 13:27:20 +0200 Subject: [PATCH 485/887] update container --- modules/local/fusionreport/download/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 9c19a64fc..3b9072c3d 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -4,7 +4,7 @@ process FUSIONREPORT_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d99b7576d14caafd0494d6e2c1453edd161a933ccb62940701074128d3718bc5/data'' : + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/71/71ff06a821ba96a2c6b75af8d2b9aff969756b90af2d04a9a5ea1e9c60bb4be0/data'' : 'community.wave.seqera.io/library/fusion-report_openpyxl:77a2ba7e76ae0694'}" output: From 52bc57c74d2529fe0a0ac51fbcd2d24ba49dfec6 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 14:00:26 +0200 Subject: [PATCH 486/887] update container --- modules/local/fusionreport/download/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 3b9072c3d..125c0d2fb 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -4,7 +4,7 @@ process FUSIONREPORT_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/71/71ff06a821ba96a2c6b75af8d2b9aff969756b90af2d04a9a5ea1e9c60bb4be0/data'' : + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d9/d99b7576d14caafd0494d6e2c1453edd161a933ccb62940701074128d3718bc5/data' : 'community.wave.seqera.io/library/fusion-report_openpyxl:77a2ba7e76ae0694'}" output: From 111d20b174e9a2f66d3767dc75149637b2c31905 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 14:50:22 +0200 Subject: [PATCH 487/887] update config --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index c9d614eb1..edfac8a0e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -119,7 +119,7 @@ process { } withName: 'FUSIONREPORT_DOWNLOAD' { - ext.args = { params.no_cosmic ? "--no-cosmic" : " --cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } + ext.args = { params.no_cosmic ? "--no-cosmic" : "--cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } ext.args2 = { params.qiagen ? "--qiagen" : "" } publishDir = [ path: { "${params.genomes_base}" }, From f8ef0c0cec0988f20ca670de1091fef21f533a24 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 6 May 2025 15:02:01 +0200 Subject: [PATCH 488/887] reshuffle arguments --- conf/modules.config | 3 +-- modules/local/fusionreport/download/main.nf | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index edfac8a0e..4bc495eb9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -119,8 +119,7 @@ process { } withName: 'FUSIONREPORT_DOWNLOAD' { - ext.args = { params.no_cosmic ? "--no-cosmic" : "--cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } - ext.args2 = { params.qiagen ? "--qiagen" : "" } + ext.args = { params.no_cosmic ? "--no-cosmic" : params.qiagen ? "--qiagen --cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" : "--cosmic_usr ${params.cosmic_username} --cosmic_passwd ${params.cosmic_passwd}" } publishDir = [ path: { "${params.genomes_base}" }, mode: params.publish_dir_mode, diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 125c0d2fb..839c20151 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -14,9 +14,8 @@ process FUSIONREPORT_DOWNLOAD { script: meta = [id: 'fusion_report_db'] def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' """ - fusion_report download $args $args2 ./ + fusion_report download $args ./ mkdir fusion_report_db mv *.txt *.log *.db fusion_report_db/ From 93dc8e15e96555b58ced22f6992ee7b828ec39a8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 09:34:38 +0200 Subject: [PATCH 489/887] update fusionreport version --- tests/test_build.nf.test.snap | 4 ++-- tests/test_stub.nf.test.snap | 14 +++++++------- tests/test_stub_bam.nf.test.snap | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index b59e6e189..5c5d08924 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -7,7 +7,7 @@ "arriba_download": "2.4.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -282,4 +282,4 @@ }, "timestamp": "2025-04-23T10:08:10.68706064" } -} \ No newline at end of file +} diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 8ab99e9b8..7495d02c4 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -514,10 +514,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1210,10 +1210,10 @@ "fusioncatcher": "1.33" }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1637,10 +1637,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -2076,4 +2076,4 @@ }, "timestamp": "2025-04-23T10:46:29.001694439" } -} \ No newline at end of file +} diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 64d3b67a7..99b8e5e31 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -436,10 +436,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1103,10 +1103,10 @@ "fusioncatcher": "1.33" }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1541,10 +1541,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1956,4 +1956,4 @@ }, "timestamp": "2025-04-23T11:13:24.397441064" } -} \ No newline at end of file +} From fed55fb2d77dd782726f89d7557de8db52a1b51e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 10:00:02 +0200 Subject: [PATCH 490/887] update cli call --- modules/local/starfusion/build/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index ecd8a71a8..0d7ab3230 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -31,7 +31,7 @@ process STARFUSION_BUILD { wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm -O AnnotFilterRule.pm --no-check-certificate - /usr/local/src/STAR-Fusion/ctat-genome-lib-builder/prep_genome_lib.pl \\ + prep_genome_lib.pl \\ --genome_fa $fasta \\ --gtf $gtf \\ --dfam_db ${dfam_species}_dfam.hmm \\ From b82b302fa042b01619f704baaa2946c995bc5048 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 10:59:05 +0200 Subject: [PATCH 491/887] update stub bam snaps --- tests/test_stub_bam.nf.test.snap | 56 ++++++++++++++++---------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 64d3b67a7..c84fb94ab 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -35,11 +35,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", @@ -181,10 +181,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:16:16.851201431" + "timestamp": "2025-05-07T10:45:30.913775592" }, "stub test stringtie": { "content": [ @@ -474,7 +474,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", @@ -761,10 +761,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:20:00.302967276" + "timestamp": "2025-05-07T10:47:54.208994663" }, "stub test salmon": { "content": [ @@ -919,7 +919,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", @@ -1077,10 +1077,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:14:53.085896038" + "timestamp": "2025-05-07T10:44:30.208342353" }, "stub test fusionreport": { "content": [ @@ -1137,11 +1137,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", @@ -1312,17 +1312,17 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:17:44.757543251" + "timestamp": "2025-05-07T10:46:25.615179804" }, "stub test fastp": { "content": [ 13, { "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1405,10 +1405,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:18:29.048528226" + "timestamp": "2025-05-07T10:46:52.127766054" }, "stub test fusioncatcher": { "content": [ @@ -1522,7 +1522,7 @@ "ctat-splicing": "0.0.2" }, "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1587,11 +1587,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", @@ -1951,9 +1951,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:13:24.397441064" + "timestamp": "2025-05-07T10:43:25.04013859" } } \ No newline at end of file From 8ad7def56fc957ef5fa7e693c3fa40cf29c30899 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 11:48:47 +0200 Subject: [PATCH 492/887] update snap --- tests/test_build.nf.test.snap | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index b59e6e189..db01143fb 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -35,7 +35,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", @@ -220,7 +220,7 @@ "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", - "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "AnnotFilterRule.pm:md5,f94966013cd0df9624a6dda0b75fefa0", "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -277,9 +277,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:08:10.68706064" + "timestamp": "2025-05-07T11:43:30.893014622" } } \ No newline at end of file From e1a5295819c5a43cc194ae1fe0918a6b0c4ae4ce Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 13:18:52 +0200 Subject: [PATCH 493/887] update modules, remove unused modules --- CHANGELOG.md | 1 + modules.json | 179 +++--- .../agat/convertspgff2tsv/environment.yml | 4 +- modules/nf-core/agat/convertspgff2tsv/main.nf | 5 +- .../convertspgff2tsv/tests/main.nf.test.snap | 18 +- .../agat/convertspgff2tsv/tests/tags.yml | 2 - .../nf-core/arriba/download/environment.yml | 2 + modules/nf-core/arriba/download/meta.yml | 4 +- .../arriba/download/tests/main.nf.test.snap | 8 +- .../nf-core/arriba/download/tests/tags.yml | 2 - modules/nf-core/cat/cat/environment.yml | 2 + modules/nf-core/cat/cat/tests/tags.yml | 2 - modules/nf-core/cat/fastq/environment.yml | 7 + modules/nf-core/cat/fastq/main.nf | 31 +- modules/nf-core/cat/fastq/tests/main.nf.test | 90 ++- .../nf-core/cat/fastq/tests/main.nf.test.snap | 176 +++--- modules/nf-core/cat/fastq/tests/tags.yml | 2 - .../gatk4/bedtointervallist/environment.yml | 1 - .../gatk4/bedtointervallist/tests/tags.yml | 2 - .../createsequencedictionary/environment.yml | 1 - .../createsequencedictionary/tests/tags.yml | 2 - .../gatk4/markduplicates/environment.yml | 7 +- modules/nf-core/gatk4/markduplicates/main.nf | 35 +- .../markduplicates/tests/main.nf.test.snap | 56 +- .../gatk4/markduplicates/tests/tags.yml | 2 - modules/nf-core/gffread/environment.yml | 2 + modules/nf-core/gffread/tests/tags.yml | 2 - modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 18 +- modules/nf-core/multiqc/tests/tags.yml | 2 - .../collectinsertsizemetrics/environment.yml | 2 + .../picard/collectinsertsizemetrics/main.nf | 2 - .../collectrnaseqmetrics/environment.yml | 2 + .../picard/collectwgsmetrics/environment.yml | 2 + .../nf-core/rrnatranscripts/environment.yml | 7 - modules/nf-core/rrnatranscripts/main.nf | 43 -- modules/nf-core/rrnatranscripts/meta.yml | 34 -- .../templates/get_rrna_transcripts.py | 83 --- .../rrnatranscripts/tests/main.nf.test | 53 -- .../rrnatranscripts/tests/main.nf.test.snap | 40 -- .../nf-core/rrnatranscripts/tests/tags.yml | 2 - modules/nf-core/salmon/index/environment.yml | 2 + modules/nf-core/salmon/index/main.nf | 27 +- .../nf-core/salmon/index/tests/main.nf.test | 39 +- .../salmon/index/tests/main.nf.test.snap | 31 +- modules/nf-core/salmon/index/tests/tags.yml | 2 - modules/nf-core/salmon/quant/main.nf | 91 +-- modules/nf-core/salmon/quant/tests/tags.yml | 2 - .../nf-core/samtools/convert/tests/tags.yml | 2 - modules/nf-core/samtools/faidx/main.nf | 13 +- modules/nf-core/samtools/faidx/meta.yml | 20 +- .../nf-core/samtools/faidx/tests/main.nf.test | 107 +++- .../samtools/faidx/tests/main.nf.test.snap | 336 ++++++++++- modules/nf-core/samtools/faidx/tests/tags.yml | 2 - modules/nf-core/samtools/index/tests/tags.yml | 2 - modules/nf-core/samtools/sort/tests/tags.yml | 3 - modules/nf-core/samtools/view/environment.yml | 10 - modules/nf-core/samtools/view/main.nf | 77 --- modules/nf-core/samtools/view/meta.yml | 141 ----- .../nf-core/samtools/view/tests/bam.config | 3 - .../samtools/view/tests/bam_index.config | 3 - .../nf-core/samtools/view/tests/main.nf.test | 214 ------- .../samtools/view/tests/main.nf.test.snap | 528 ------------------ modules/nf-core/samtools/view/tests/tags.yml | 2 - modules/nf-core/star/align/tests/tags.yml | 2 - .../star/genomegenerate/environment.yml | 6 +- modules/nf-core/star/genomegenerate/main.nf | 4 +- .../genomegenerate/tests/main.nf.test.snap | 36 +- .../star/genomegenerate/tests/tags.yml | 2 - .../nf-core/stringtie/merge/environment.yml | 2 + .../nf-core/stringtie/merge/tests/tags.yml | 2 - .../stringtie/stringtie/environment.yml | 2 + .../stringtie/stringtie/tests/tags.yml | 2 - .../ucsc/gtftogenepred/environment.yml | 2 + subworkflows/local/build_references/main.nf | 2 +- .../starfusion_workflow/tests/nextflow.config | 4 - 77 files changed, 1040 insertions(+), 1626 deletions(-) delete mode 100644 modules/nf-core/agat/convertspgff2tsv/tests/tags.yml delete mode 100644 modules/nf-core/arriba/download/tests/tags.yml delete mode 100644 modules/nf-core/cat/cat/tests/tags.yml delete mode 100644 modules/nf-core/cat/fastq/tests/tags.yml delete mode 100644 modules/nf-core/gatk4/bedtointervallist/tests/tags.yml delete mode 100644 modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml delete mode 100644 modules/nf-core/gatk4/markduplicates/tests/tags.yml delete mode 100644 modules/nf-core/gffread/tests/tags.yml delete mode 100644 modules/nf-core/multiqc/tests/tags.yml delete mode 100644 modules/nf-core/rrnatranscripts/environment.yml delete mode 100644 modules/nf-core/rrnatranscripts/main.nf delete mode 100644 modules/nf-core/rrnatranscripts/meta.yml delete mode 100644 modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py delete mode 100644 modules/nf-core/rrnatranscripts/tests/main.nf.test delete mode 100644 modules/nf-core/rrnatranscripts/tests/main.nf.test.snap delete mode 100644 modules/nf-core/rrnatranscripts/tests/tags.yml delete mode 100644 modules/nf-core/salmon/index/tests/tags.yml delete mode 100644 modules/nf-core/salmon/quant/tests/tags.yml delete mode 100644 modules/nf-core/samtools/convert/tests/tags.yml delete mode 100644 modules/nf-core/samtools/faidx/tests/tags.yml delete mode 100644 modules/nf-core/samtools/index/tests/tags.yml delete mode 100644 modules/nf-core/samtools/sort/tests/tags.yml delete mode 100644 modules/nf-core/samtools/view/environment.yml delete mode 100644 modules/nf-core/samtools/view/main.nf delete mode 100644 modules/nf-core/samtools/view/meta.yml delete mode 100644 modules/nf-core/samtools/view/tests/bam.config delete mode 100644 modules/nf-core/samtools/view/tests/bam_index.config delete mode 100644 modules/nf-core/samtools/view/tests/main.nf.test delete mode 100644 modules/nf-core/samtools/view/tests/main.nf.test.snap delete mode 100644 modules/nf-core/samtools/view/tests/tags.yml delete mode 100644 modules/nf-core/star/align/tests/tags.yml delete mode 100644 modules/nf-core/star/genomegenerate/tests/tags.yml delete mode 100644 modules/nf-core/stringtie/merge/tests/tags.yml delete mode 100644 modules/nf-core/stringtie/stringtie/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 83516b786..34e3932c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) - Moved strandedness determination for picard collectrnaseqmetrics into modules.config [#658](https://github.com/nf-core/rnafusion/pull/658) - Using option `--human_gencode_filter` while building STARFusion references for human species [#657](https://github.com/nf-core/rnafusion/pull/657) +- Update STAR-Fusion to 1.15.0 and using human filtering when species is human [#664](https://github.com/nf-core/rnafusion/pull/664) ### Changed diff --git a/modules.json b/modules.json index e6453690e..8bb54eef5 100644 --- a/modules.json +++ b/modules.json @@ -7,149 +7,192 @@ "nf-core": { "agat/convertspgff2tsv": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "arriba/arriba": { "branch": "master", "git_sha": "1719e20e3881b37b9e1e8498ea669a2b92e54b9a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba/download": { "branch": "master", - "git_sha": "467c202a876d26af544fa8c4b22a050a535462a7", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "cat/fastq": { "branch": "master", - "git_sha": "a1abf90966a2a4016d3c3e41e228bfcbd4811ccc", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "fastp": { "branch": "master", "git_sha": "d082103d7976a2804f21225446cc110cbd822f4c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "b1966f36ec9de31927b2603d8f499960b2a4c294", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fusioncatcher/fusioncatcher": { "branch": "master", "git_sha": "2a227f75f33415f74a884ef8b33555b151e33de9", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "gatk4/markduplicates": { "branch": "master", - "git_sha": "1999eff2c530b2b185a25cc42117a1686f09b685", - "installed_by": ["modules"] + "git_sha": "1ec937ab3edc307bc0d79a2200d784e9f0868359", + "installed_by": [ + "modules" + ] }, "gffread": { "branch": "master", - "git_sha": "bd5f75ccaf2345269810e66e85de8a70e4de8764", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", - "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", - "installed_by": ["modules"] + "git_sha": "7b50cb7be890e4b28cffb82e438cc6a8d7805d3f", + "installed_by": [ + "modules" + ] }, "picard/collectinsertsizemetrics": { "branch": "master", - "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "git_sha": "980a4964be91da75fb3ccf576118a18e247f6d15", + "installed_by": [ + "modules" + ] }, "picard/collectrnaseqmetrics": { "branch": "master", - "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] - }, - "rrnatranscripts": { - "branch": "master", - "git_sha": "812edf8cf702de42d2d8c7314d6f03b97e20abeb", - "installed_by": ["modules"], - "patch": "modules/nf-core/rrnatranscripts/rrnatranscripts.diff" + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "installed_by": [ + "modules" + ] }, "salmon/index": { "branch": "master", - "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "salmon/quant": { "branch": "master", - "git_sha": "85b5f8a0d9df9ce7587af50e2ee75b37c97515c6", - "installed_by": ["modules"] + "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", + "installed_by": [ + "modules" + ] }, "samtools/convert": { "branch": "master", - "git_sha": "b823b7220bac94079f9ea65113401956ca7d633e", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", - "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", - "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", - "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": ["modules"] - }, - "samtools/view": { - "branch": "master", - "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "star/align": { "branch": "master", - "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "star/genomegenerate": { "branch": "master", - "git_sha": "a5ad53288c79fa52c5ae708c317e09ec2dd149ab", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "stringtie/merge": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": [ + "modules" + ] }, "ucsc/gtftogenepred": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "installed_by": [ + "modules" + ] } } }, @@ -158,20 +201,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/agat/convertspgff2tsv/environment.yml b/modules/nf-core/agat/convertspgff2tsv/environment.yml index 0410ee765..072565894 100644 --- a/modules/nf-core/agat/convertspgff2tsv/environment.yml +++ b/modules/nf-core/agat/convertspgff2tsv/environment.yml @@ -1,5 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::agat=1.4.0 + - bioconda::agat=1.4.2 diff --git a/modules/nf-core/agat/convertspgff2tsv/main.nf b/modules/nf-core/agat/convertspgff2tsv/main.nf index a6f73b6c1..772c7bd0b 100644 --- a/modules/nf-core/agat/convertspgff2tsv/main.nf +++ b/modules/nf-core/agat/convertspgff2tsv/main.nf @@ -4,8 +4,8 @@ process AGAT_CONVERTSPGFF2TSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : - 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/agat:1.4.2--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.2--pl5321hdfd78af_0' }" input: tuple val(meta), path(gff) @@ -33,7 +33,6 @@ process AGAT_CONVERTSPGFF2TSV { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.tsv diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap index 71ed6205c..50a428d62 100644 --- a/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap +++ b/modules/nf-core/agat/convertspgff2tsv/tests/main.nf.test.snap @@ -3,14 +3,14 @@ "content": [ [ "test.tsv", - "versions.yml:md5,b81565a6ff8911848806128b3bec8508" + "versions.yml:md5,1866660991c9d87acc28236b9d026438" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T10:06:55.853319" + "timestamp": "2025-01-15T13:13:51.099041" }, "sarscov2 - genome [gff3]": { "content": [ @@ -24,7 +24,7 @@ ] ], "1": [ - "versions.yml:md5,b81565a6ff8911848806128b3bec8508" + "versions.yml:md5,1866660991c9d87acc28236b9d026438" ], "tsv": [ [ @@ -35,14 +35,14 @@ ] ], "versions": [ - "versions.yml:md5,b81565a6ff8911848806128b3bec8508" + "versions.yml:md5,1866660991c9d87acc28236b9d026438" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T10:06:51.415395" + "timestamp": "2025-01-15T13:13:44.904263" } } \ No newline at end of file diff --git a/modules/nf-core/agat/convertspgff2tsv/tests/tags.yml b/modules/nf-core/agat/convertspgff2tsv/tests/tags.yml deleted file mode 100644 index d2ee37213..000000000 --- a/modules/nf-core/agat/convertspgff2tsv/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/convertspgff2tsv: - - "modules/nf-core/agat/convertspgff2tsv/**" diff --git a/modules/nf-core/arriba/download/environment.yml b/modules/nf-core/arriba/download/environment.yml index d0883a0d2..e8f5b278f 100644 --- a/modules/nf-core/arriba/download/environment.yml +++ b/modules/nf-core/arriba/download/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/arriba/download/meta.yml b/modules/nf-core/arriba/download/meta.yml index bdf542ebc..d9e28cc06 100644 --- a/modules/nf-core/arriba/download/meta.yml +++ b/modules/nf-core/arriba/download/meta.yml @@ -36,13 +36,13 @@ output: - protein_domains*${genome}*.gff3: type: file description: Protein domain annotations - patter: "*.gff3" + pattern: "*.gff3" - known_fusions: - known_fusions*${genome}*.tsv.gz: type: file description: Arriba is more sensitive to those fusions to improve the detection rate of expected or highly relevant events, such as recurrent fusions - patter: "*.tsv.gz" + pattern: "*.tsv.gz" - versions: - versions.yml: type: file diff --git a/modules/nf-core/arriba/download/tests/main.nf.test.snap b/modules/nf-core/arriba/download/tests/main.nf.test.snap index fe9b18b94..d12a38bbf 100644 --- a/modules/nf-core/arriba/download/tests/main.nf.test.snap +++ b/modules/nf-core/arriba/download/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "download": { + "test-arriba-download": { "content": [ { "0": [ @@ -35,9 +35,9 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-08T11:12:17.010496" + "timestamp": "2024-12-16T01:46:32.110653034" } } \ No newline at end of file diff --git a/modules/nf-core/arriba/download/tests/tags.yml b/modules/nf-core/arriba/download/tests/tags.yml deleted file mode 100644 index f510bbf1a..000000000 --- a/modules/nf-core/arriba/download/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -arriba/download: - - "modules/nf-core/arriba/download/**" diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml index 9b01c865a..50c2059af 100644 --- a/modules/nf-core/cat/cat/environment.yml +++ b/modules/nf-core/cat/cat/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/cat/cat/tests/tags.yml b/modules/nf-core/cat/cat/tests/tags.yml deleted file mode 100644 index 37b578f52..000000000 --- a/modules/nf-core/cat/cat/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -cat/cat: - - modules/nf-core/cat/cat/** diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml index 71e04c3d7..9b926b1ff 100644 --- a/modules/nf-core/cat/fastq/environment.yml +++ b/modules/nf-core/cat/fastq/environment.yml @@ -1,5 +1,12 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - conda-forge::coreutils=9.5 + - conda-forge::grep=3.11 + - conda-forge::gzip=1.13 + - conda-forge::lbzip2=2.5 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index 4364a389b..acfb6d0e6 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -1,26 +1,25 @@ process CAT_FASTQ { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c2/c262fc09eca59edb5a724080eeceb00fb06396f510aefb229c2d2c6897e63975/data' : - 'community.wave.seqera.io/library/coreutils:9.5--ae99c88a9b28c264' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' + : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" input: tuple val(meta), path(reads, stageAs: "input*/*") output: tuple val(meta), path("*.merged.fastq.gz"), emit: reads - path "versions.yml" , emit: versions + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] + def readList = reads instanceof List ? reads.collect { it.toString() } : [reads.toString()] if (meta.single_end) { if (readList.size >= 1) { """ @@ -31,12 +30,15 @@ process CAT_FASTQ { cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') END_VERSIONS """ + } else { + error("Could not find any FASTQ files to concatenate in the process input") } - } else { + } + else { if (readList.size >= 2) { def read1 = [] def read2 = [] - readList.eachWithIndex{ v, ix -> ( ix & 1 ? read2 : read1 ) << v } + readList.eachWithIndex { v, ix -> (ix & 1 ? read2 : read1) << v } """ cat ${read1.join(' ')} > ${prefix}_1.merged.fastq.gz cat ${read2.join(' ')} > ${prefix}_2.merged.fastq.gz @@ -46,12 +48,14 @@ process CAT_FASTQ { cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') END_VERSIONS """ + } else { + error("Could not find any FASTQ file pairs to concatenate in the process input") } } stub: def prefix = task.ext.prefix ?: "${meta.id}" - def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] + def readList = reads instanceof List ? reads.collect { it.toString() } : [reads.toString()] if (meta.single_end) { if (readList.size >= 1) { """ @@ -62,8 +66,11 @@ process CAT_FASTQ { cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') END_VERSIONS """ + } else { + error("Could not find any FASTQ files to concatenate in the process input") } - } else { + } + else { if (readList.size >= 2) { """ echo '' | gzip > ${prefix}_1.merged.fastq.gz @@ -74,6 +81,8 @@ process CAT_FASTQ { cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') END_VERSIONS """ + } else { + error("Could not find any FASTQ file pairs to concatenate in the process input") } } } diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index f88a78b6c..013c1d0f4 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -1,5 +1,3 @@ -// NOTE The version snaps may not be consistant -// https://github.com/nf-core/modules/pull/4087#issuecomment-1767948035 nextflow_process { name "Test Process CAT_FASTQ" @@ -245,4 +243,92 @@ nextflow_process { ) } } + + test("test_cat_fastq_single_end_no_files") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [] + ]) + """ + } + } + + then { + assertAll( + { assert process.failed }, + { assert snapshot(process.stdout.find { it.contains("-- Check script") }.split(" -- Check script")[0]).match() } + ) + } + } + + test("test_cat_fastq_paired_end_no_files") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [] + ]) + """ + } + } + + then { + assertAll( + { assert process.failed }, + { assert snapshot(process.stdout.find { it.contains("-- Check script") }.split(" -- Check script")[0]).match() } + ) + } + } + + test("test_cat_fastq_single_end_no_files - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [] + ]) + """ + } + } + + then { + assertAll( + { assert process.failed }, + { assert snapshot(process.stdout.find { it.contains("-- Check script") }.split(" -- Check script")[0]).match() } + ) + } + } + + test("test_cat_fastq_paired_end_no_files - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [] + ]) + """ + } + } + + then { + assertAll( + { assert process.failed }, + { assert snapshot(process.stdout.find { it.contains("-- Check script") }.split(" -- Check script")[0]).match() } + ) + } + } } diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap index f8689a1ce..ee5ab3647 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -1,5 +1,15 @@ { - "test_cat_fastq_single_end": { + "test_cat_fastq_paired_end_no_files - stub": { + "content": [ + " Could not find any FASTQ file pairs to concatenate in the process input" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.4" + }, + "timestamp": "2025-02-25T17:14:51.248685461" + }, + "test_cat_fastq_single_end_single_file": { "content": [ { "0": [ @@ -8,7 +18,7 @@ "id": "test", "single_end": true }, - "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], "1": [ @@ -20,7 +30,7 @@ "id": "test", "single_end": true }, - "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], "versions": [ @@ -29,21 +39,24 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:02:07.519211144" + "timestamp": "2025-02-25T17:24:04.902821069" }, - "test_cat_fastq_single_end_same_name": { + "test_cat_fastq_paired_end_same_name": { "content": [ { "0": [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] ] ], "1": [ @@ -53,9 +66,12 @@ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] ] ], "versions": [ @@ -64,21 +80,24 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:02:31.618628921" + "timestamp": "2025-02-25T17:23:57.476357974" }, - "test_cat_fastq_single_end_single_file": { + "test_cat_fastq_paired_end_same_name - stub": { "content": [ { "0": [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ] ], "1": [ @@ -88,9 +107,12 @@ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ] ], "versions": [ @@ -99,24 +121,21 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:02:57.904149581" + "timestamp": "2025-02-25T17:24:34.615815265" }, - "test_cat_fastq_paired_end_same_name": { + "test_cat_fastq_single_end": { "content": [ { "0": [ [ { "id": "test", - "single_end": false + "single_end": true }, - [ - "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", - "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" - ] + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" ] ], "1": [ @@ -126,12 +145,9 @@ [ { "id": "test", - "single_end": false + "single_end": true }, - [ - "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", - "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" - ] + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" ] ], "versions": [ @@ -140,12 +156,12 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:02:44.577183829" + "timestamp": "2025-02-25T17:23:32.489874386" }, - "test_cat_fastq_single_end - stub": { + "test_cat_fastq_single_end_same_name": { "content": [ { "0": [ @@ -154,7 +170,7 @@ "id": "test", "single_end": true }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" ] ], "1": [ @@ -166,7 +182,7 @@ "id": "test", "single_end": true }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" ] ], "versions": [ @@ -175,24 +191,21 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:03:10.603734777" + "timestamp": "2025-02-25T17:23:49.184759506" }, - "test_cat_fastq_paired_end_same_name - stub": { + "test_cat_fastq_single_end - stub": { "content": [ { "0": [ [ { "id": "test", - "single_end": false + "single_end": true }, - [ - "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "1": [ @@ -202,12 +215,9 @@ [ { "id": "test", - "single_end": false + "single_end": true }, - [ - "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "versions": [ @@ -216,10 +226,30 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" + }, + "timestamp": "2025-02-25T17:24:12.857293744" + }, + "test_cat_fastq_paired_end_no_files": { + "content": [ + " Could not find any FASTQ file pairs to concatenate in the process input" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.4" + }, + "timestamp": "2025-02-25T17:14:40.806088747" + }, + "test_cat_fastq_single_end_no_files - stub": { + "content": [ + " Could not find any FASTQ files to concatenate in the process input" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:03:46.041808828" + "timestamp": "2025-02-25T17:14:45.852365218" }, "test_cat_fastq_single_end_same_name - stub": { "content": [ @@ -251,10 +281,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:03:34.13865402" + "timestamp": "2025-02-25T17:24:27.816080065" }, "test_cat_fastq_paired_end": { "content": [ @@ -292,10 +322,20 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" + }, + "timestamp": "2025-02-25T17:23:41.739469187" + }, + "test_cat_fastq_single_end_no_files": { + "content": [ + " Could not find any FASTQ files to concatenate in the process input" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:02:19.64383573" + "timestamp": "2025-02-25T17:14:35.695192409" }, "test_cat_fastq_paired_end - stub": { "content": [ @@ -333,10 +373,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:03:22.597246066" + "timestamp": "2025-02-25T17:24:21.178950408" }, "test_cat_fastq_single_end_single_file - stub": { "content": [ @@ -368,9 +408,9 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-19T20:03:58.44849001" + "timestamp": "2025-02-25T17:24:40.851404993" } } \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/tests/tags.yml b/modules/nf-core/cat/fastq/tests/tags.yml deleted file mode 100644 index 6ac436140..000000000 --- a/modules/nf-core/cat/fastq/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -cat/fastq: - - modules/nf-core/cat/fastq/** diff --git a/modules/nf-core/gatk4/bedtointervallist/environment.yml b/modules/nf-core/gatk4/bedtointervallist/environment.yml index 1f7d08246..b562b72c7 100644 --- a/modules/nf-core/gatk4/bedtointervallist/environment.yml +++ b/modules/nf-core/gatk4/bedtointervallist/environment.yml @@ -6,5 +6,4 @@ channels: dependencies: # renovate: datasource=conda depName=bioconda/gatk4 - bioconda::gatk4=4.6.1.0 - # renovate: datasource=conda depName=bioconda/gcnvkernel - bioconda::gcnvkernel=0.9 diff --git a/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml b/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml deleted file mode 100644 index b4d54f129..000000000 --- a/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gatk4/bedtointervallist: - - "modules/nf-core/gatk4/bedtointervallist/**" diff --git a/modules/nf-core/gatk4/createsequencedictionary/environment.yml b/modules/nf-core/gatk4/createsequencedictionary/environment.yml index 1f7d08246..b562b72c7 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/environment.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/environment.yml @@ -6,5 +6,4 @@ channels: dependencies: # renovate: datasource=conda depName=bioconda/gatk4 - bioconda::gatk4=4.6.1.0 - # renovate: datasource=conda depName=bioconda/gcnvkernel - bioconda::gcnvkernel=0.9 diff --git a/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml b/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml deleted file mode 100644 index 035c5e4c7..000000000 --- a/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gatk4/createsequencedictionary: - - "modules/nf-core/gatk4/createsequencedictionary/**" diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml index ec65c32da..352d20f83 100644 --- a/modules/nf-core/gatk4/markduplicates/environment.yml +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -7,9 +7,6 @@ channels: dependencies: # renovate: datasource=conda depName=bioconda/gatk4 - bioconda::gatk4=4.6.1.0 - # renovate: datasource=conda depName=bioconda/gcnvkernel - bioconda::gcnvkernel=0.9 - # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.19.1 - # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.19.2 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 \ No newline at end of file diff --git a/modules/nf-core/gatk4/markduplicates/main.nf b/modules/nf-core/gatk4/markduplicates/main.nf index cf770308d..f4bd896bf 100644 --- a/modules/nf-core/gatk4/markduplicates/main.nf +++ b/modules/nf-core/gatk4/markduplicates/main.nf @@ -1,24 +1,24 @@ process GATK4_MARKDUPLICATES { - tag "$meta.id" + 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/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0': - 'biocontainers/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/92/927ff9bb80d65b425cbe752db6648a84043feff6e8ca90e60f9ff6ddbe8938d5/data' + : 'community.wave.seqera.io/library/gatk4_gcnvkernel_htslib_samtools:c1e4292d6ee27439'}" input: tuple val(meta), path(bam) - path fasta - path fasta_fai + path fasta + path fasta_fai output: - tuple val(meta), path("*cram"), emit: cram, optional: true - tuple val(meta), path("*bam"), emit: bam, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - tuple val(meta), path("*.bai"), emit: bai, optional: true + tuple val(meta), path("*cram"), emit: cram, optional: true + tuple val(meta), path("*bam"), emit: bam, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.bai"), emit: bai, optional: true tuple val(meta), path("*.metrics"), emit: metrics - path "versions.yml", emit: versions + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -30,14 +30,15 @@ process GATK4_MARKDUPLICATES { // If the extension is CRAM, then change it to BAM prefix_bam = prefix.tokenize('.')[-1] == 'cram' ? "${prefix.substring(0, prefix.lastIndexOf('.'))}.bam" : prefix - def input_list = bam.collect{"--INPUT $it"}.join(' ') + def input_list = bam.collect { "--INPUT ${it}" }.join(' ') def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { - log.info '[GATK MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[GATK MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } // Using samtools and not Markduplicates to compress to CRAM speeds up computation: @@ -45,12 +46,12 @@ process GATK4_MARKDUPLICATES { """ gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ MarkDuplicates \\ - $input_list \\ + ${input_list} \\ --OUTPUT ${prefix_bam} \\ --METRICS_FILE ${prefix}.metrics \\ --TMP_DIR . \\ ${reference} \\ - $args + ${args} # If cram files are wished as output, the run samtools for conversion if [[ ${prefix} == *.cram ]]; then diff --git a/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap index 336bb3735..227ce6985 100644 --- a/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap +++ b/modules/nf-core/gatk4/markduplicates/tests/main.nf.test.snap @@ -7,15 +7,15 @@ "id": "test", "single_end": false }, - "test.bam:md5,8a808b1a94d2627c4d659a2151c4cb9f" + "test.bam:md5,d4c87a668273b589b59cf88b5a00bceb" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nf-test": "0.9.2", + "nextflow": "25.03.1" }, - "timestamp": "2024-02-13T15:21:36.059923" + "timestamp": "2025-05-06T19:13:35.646267615" }, "multi crai": { "content": [ @@ -35,27 +35,27 @@ "id": "test", "single_end": false }, - "test.bai:md5,38b99c5f771895ecf5324c3186b9d452" + "test.bai:md5,2b1603773979ad06f4dbcbaa90e93e8c" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nf-test": "0.9.2", + "nextflow": "25.03.1" }, - "timestamp": "2024-02-13T15:21:36.09642" + "timestamp": "2025-05-06T19:13:35.773636892" }, "versions": { "content": [ [ - "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + "versions.yml:md5,836be8dcb8e596b2e5eeb2d667db0832" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nf-test": "0.9.2", + "nextflow": "25.03.1" }, - "timestamp": "2024-02-13T15:21:08.710549" + "timestamp": "2025-05-06T19:37:41.921624379" }, "multi test.metrics": { "content": [ @@ -75,39 +75,39 @@ "id": "test", "single_end": false }, - "test.bai:md5,26001bcdbce12e9f07557d8f7b8d360e" + "test.bai:md5,fd1c3cc02f4e223d32eedeed842b86c7" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nf-test": "0.9.2", + "nextflow": "25.03.1" }, - "timestamp": "2023-12-12T17:42:39.651888758" + "timestamp": "2025-05-06T19:13:21.104275114" }, "multi cram versions": { "content": [ [ - "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + "versions.yml:md5,836be8dcb8e596b2e5eeb2d667db0832" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nf-test": "0.9.2", + "nextflow": "25.03.1" }, - "timestamp": "2024-02-13T15:21:56.966376" + "timestamp": "2025-05-06T19:38:08.855960769" }, "multi versions": { "content": [ [ - "versions.yml:md5,c58bf16c6e3786cc4d17bb7249f9ffe5" + "versions.yml:md5,836be8dcb8e596b2e5eeb2d667db0832" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nf-test": "0.9.2", + "nextflow": "25.03.1" }, - "timestamp": "2024-02-13T15:21:36.138095" + "timestamp": "2025-05-06T19:37:55.051564286" }, "multi cram test.metrics": { "content": [ @@ -137,15 +137,15 @@ "id": "test", "single_end": false }, - "test.bam:md5,75d914ba8804eaf2acf02ab432197ec9" + "test.bam:md5,5542c553af351a43b97e84181c51a84e" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nf-test": "0.9.2", + "nextflow": "25.03.1" }, - "timestamp": "2024-02-13T15:21:08.645892" + "timestamp": "2025-05-06T19:13:21.060566406" }, "test.metrics": { "content": [ diff --git a/modules/nf-core/gatk4/markduplicates/tests/tags.yml b/modules/nf-core/gatk4/markduplicates/tests/tags.yml deleted file mode 100644 index 8632e32b3..000000000 --- a/modules/nf-core/gatk4/markduplicates/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gatk4/markduplicates: - - "modules/nf-core/gatk4/markduplicates/**" diff --git a/modules/nf-core/gffread/environment.yml b/modules/nf-core/gffread/environment.yml index ee2398416..46c5faece 100644 --- a/modules/nf-core/gffread/environment.yml +++ b/modules/nf-core/gffread/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/gffread/tests/tags.yml b/modules/nf-core/gffread/tests/tags.yml deleted file mode 100644 index 055760656..000000000 --- a/modules/nf-core/gffread/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gffread: - - modules/nf-core/gffread/** diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index a27122ce1..d430da5f7 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,5 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.27 + - bioconda::multiqc=1.28 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 58d9313c6..f3b570472 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.27--pyhdfd78af_0' : - 'biocontainers/multiqc:1.27--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.28--pyhdfd78af_0' : + 'biocontainers/multiqc:1.28--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 7b7c13220..26d74307d 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" + "versions.yml:md5,b05075d2d2b4f485c0d627a5c8e475b2" ] ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.0", "nextflow": "24.10.4" }, - "timestamp": "2025-01-27T09:29:57.631982377" + "timestamp": "2025-03-26T16:05:18.927925" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" + "versions.yml:md5,b05075d2d2b4f485c0d627a5c8e475b2" ] ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.0", "nextflow": "24.10.4" }, - "timestamp": "2025-01-27T09:30:34.743726958" + "timestamp": "2025-03-26T16:05:55.639955" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" + "versions.yml:md5,b05075d2d2b4f485c0d627a5c8e475b2" ] ], "meta": { - "nf-test": "0.9.2", + "nf-test": "0.9.0", "nextflow": "24.10.4" }, - "timestamp": "2025-01-27T09:30:21.44383553" + "timestamp": "2025-03-26T16:05:44.067369" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml deleted file mode 100644 index bea6c0d37..000000000 --- a/modules/nf-core/multiqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -multiqc: - - modules/nf-core/multiqc/** diff --git a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml index 1d715d564..8f34e975c 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/environment.yml +++ b/modules/nf-core/picard/collectinsertsizemetrics/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/picard/collectinsertsizemetrics/main.nf b/modules/nf-core/picard/collectinsertsizemetrics/main.nf index c3014d806..bed044028 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/main.nf +++ b/modules/nf-core/picard/collectinsertsizemetrics/main.nf @@ -32,7 +32,6 @@ process PICARD_COLLECTINSERTSIZEMETRICS { picard \\ -Xmx${avail_mem}M \\ CollectInsertSizeMetrics \\ - $args \\ --INPUT $bam \\ --OUTPUT ${prefix}.txt \\ --Histogram_FILE ${prefix}.pdf \\ @@ -47,7 +46,6 @@ process PICARD_COLLECTINSERTSIZEMETRICS { stub: def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3072 if (!task.memory) { log.info '[Picard CollectInsertSizeMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } diff --git a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml index 1d715d564..8f34e975c 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/environment.yml +++ b/modules/nf-core/picard/collectrnaseqmetrics/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/picard/collectwgsmetrics/environment.yml b/modules/nf-core/picard/collectwgsmetrics/environment.yml index 13265842f..5f2dfc031 100644 --- a/modules/nf-core/picard/collectwgsmetrics/environment.yml +++ b/modules/nf-core/picard/collectwgsmetrics/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/rrnatranscripts/environment.yml b/modules/nf-core/rrnatranscripts/environment.yml deleted file mode 100644 index 6f09494b4..000000000 --- a/modules/nf-core/rrnatranscripts/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -channels: - - conda-forge - - bioconda -dependencies: - - python=3.12.2 diff --git a/modules/nf-core/rrnatranscripts/main.nf b/modules/nf-core/rrnatranscripts/main.nf deleted file mode 100644 index 982c53cd4..000000000 --- a/modules/nf-core/rrnatranscripts/main.nf +++ /dev/null @@ -1,43 +0,0 @@ -process RRNATRANSCRIPTS { - tag "$gtf" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.12' : - 'biocontainers/python:3.12' }" - - input: - path(gtf) - - output: - path("*rrna_intervals.gtf") , emit: rrna_gtf, optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def prefix = task.ext.prefix ?: "${gtf.baseName}" - """ - grep -E '^#|rRNA' ${gtf} > ${prefix}_rrna_intervals.gtf || true - if [ ! -s ${prefix}_rrna_intervals.gtf ]; then - rm ${prefix}_rrna_intervals.gtf - fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed -e "s/Python //g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${gtf.baseName}" - """ - touch ${prefix}_rrna_intervals.gtf - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed -e "s/Python //g") - END_VERSIONS - """ -} diff --git a/modules/nf-core/rrnatranscripts/meta.yml b/modules/nf-core/rrnatranscripts/meta.yml deleted file mode 100644 index 93f6a10ef..000000000 --- a/modules/nf-core/rrnatranscripts/meta.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: rrnatranscripts -description: Ribosomal RNA extraction from a GTF file. -keywords: - - ribosomal - - rna - - genomics -tools: - - rrnatranscripts: - description: | - Extraction of ribosomal RNA - homepage: https://github.com/nf-core/rnafusion - licence: ["GPL-3.0-or-later"] - identifier: "" -input: - - - gtf: - type: file - description: GTF file - pattern: "*.{gtf}" -output: - # - - rrna_gtf: - - "*rrna_intervals.gtf": - type: file - description: GTF file with ribosomal RNA only - pattern: "*.{gtf}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@rannick" -maintainers: - - "@rannick" diff --git a/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py b/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py deleted file mode 100644 index ea3ce0f49..000000000 --- a/modules/nf-core/rrnatranscripts/templates/get_rrna_transcripts.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python3 - -import logging -import platform -import sys -from pathlib import Path - -# Configure logging -logging.basicConfig(format="%(name)s - %(asctime)s %(levelname)s: %(message)s") -logger = logging.getLogger(__name__) -logger.setLevel(logging.INFO) - - -def get_rrna_intervals(gtf: str, rrna_transcripts: str): - """ - Get lines containing ``#`` or ``gene_type rRNA`` or ```` or ``gene_type rRNA_pseudogene`` or ``gene_type MT_rRNA`` - Create output file - - Args: - file_in (pathlib.Path): The given GTF file. - file_out (pathlib.Path): Where the ribosomal RNA GTF file should - be created; always in GTF format. - """ - patterns = { - "#", - 'transcript_biotype "Mt_rRNA"', - 'transcript_biotype "rRNA"', - 'transcript_biotype "rRNA_pseudogene"', - } - line_starts = {"MT", "1", "2", "3", "4", "5", "6", "7", "8", "9"} - out_lines = [] - path_gtf = Path(gtf) - path_rrna_transcripts = Path(rrna_transcripts) - if not path_gtf.is_file(): - logger.error(f"The given input file {gtf} was not found!") - sys.exit(2) - with path_gtf.open() as f: - data = f.readlines() - for line in data: - for pattern in patterns: - if pattern in line: - for line_start in line_starts: - if line.startswith(line_start): - out_lines.append(line) - if out_lines != []: - with path_rrna_transcripts.open(mode="w") as out_file: - out_file.writelines(out_lines) - - -def format_yaml_like(data: dict, indent: int = 0) -> str: - """Formats a dictionary to a YAML-like string. - - Args: - data (dict): The dictionary to format. - indent (int): The current indentation level. - - Returns: - str: A string formatted as YAML. - """ - yaml_str = "" - for key, value in data.items(): - spaces = " " * indent - if isinstance(value, dict): - yaml_str += f"{spaces}{key}:\\n{format_yaml_like(value, indent + 1)}" - else: - yaml_str += f"{spaces}{key}: {value}\\n" - return yaml_str - - -if __name__ == "__main__": - if "${task.ext.prefix}" != "null": - prefix = "${task.ext.prefix}." - else: - prefix = "${task.ext.gtf}." - - if not get_rrna_intervals("$gtf", f"{prefix}_rrna_intervals.gtf"): - logging.error("Failed to extract rrna transcipts.") - - # Write the versions - versions_this_module = {} - versions_this_module["${task.process}"] = {"python": platform.python_version()} - with open("versions.yml", "w") as f: - f.write(format_yaml_like(versions_this_module)) diff --git a/modules/nf-core/rrnatranscripts/tests/main.nf.test b/modules/nf-core/rrnatranscripts/tests/main.nf.test deleted file mode 100644 index db0d55652..000000000 --- a/modules/nf-core/rrnatranscripts/tests/main.nf.test +++ /dev/null @@ -1,53 +0,0 @@ -nextflow_process { - - name "Test Process RRNATRANSCRIPTS" - script "../main.nf" - process "RRNATRANSCRIPTS" - - tag "modules" - tag "modules_nfcore" - tag "rrnatranscripts" - - test("homo_sapiens - gtf") { - - when { - process { - """ - input[0] = [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) - ] """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("homo_sapiens - gtf - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) - ] """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/rrnatranscripts/tests/main.nf.test.snap b/modules/nf-core/rrnatranscripts/tests/main.nf.test.snap deleted file mode 100644 index a190ddcbf..000000000 --- a/modules/nf-core/rrnatranscripts/tests/main.nf.test.snap +++ /dev/null @@ -1,40 +0,0 @@ -{ - "homo_sapiens - gtf": { - "content": [ - { - "0": [ - - ], - "1": [ - "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" - ], - "rrna_gtf": [ - - ], - "versions": [ - "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" - ] - } - ], - "timestamp": "2024-05-21T13:55:44.831609" - }, - "homo_sapiens - gtf - stub": { - "content": [ - { - "0": [ - "genome_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "1": [ - "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" - ], - "rrna_gtf": [ - "genome_rrna_intervals.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "versions": [ - "versions.yml:md5,fa2f785dbbe87a180f4254910957e01e" - ] - } - ], - "timestamp": "2024-05-21T13:55:56.134136" - } -} \ No newline at end of file diff --git a/modules/nf-core/rrnatranscripts/tests/tags.yml b/modules/nf-core/rrnatranscripts/tests/tags.yml deleted file mode 100644 index ade15226a..000000000 --- a/modules/nf-core/rrnatranscripts/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -rrnatranscripts: - - "modules/nf-core/rrnatranscripts/**" diff --git a/modules/nf-core/salmon/index/environment.yml b/modules/nf-core/salmon/index/environment.yml index b3f75777e..c9d531434 100644 --- a/modules/nf-core/salmon/index/environment.yml +++ b/modules/nf-core/salmon/index/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/salmon/index/main.nf b/modules/nf-core/salmon/index/main.nf index 3d653c0d0..2e9c6224c 100644 --- a/modules/nf-core/salmon/index/main.nf +++ b/modules/nf-core/salmon/index/main.nf @@ -20,22 +20,29 @@ process SALMON_INDEX { script: def args = task.ext.args ?: '' - def get_decoy_ids = "grep '^>' $genome_fasta | cut -d ' ' -f 1 | cut -d \$'\\t' -f 1 > decoys.txt" - def gentrome = "gentrome.fa" - if (genome_fasta.endsWith('.gz')) { - get_decoy_ids = "grep '^>' <(gunzip -c $genome_fasta) | cut -d ' ' -f 1 | cut -d \$'\\t' -f 1 > decoys.txt" - gentrome = "gentrome.fa.gz" + def decoys = '' + def fasta = transcript_fasta + if (genome_fasta){ + if (genome_fasta.endsWith('.gz')) { + genome_fasta = "<(gunzip -c $genome_fasta)" + } + decoys='-d decoys.txt' + fasta='gentrome.fa' + } + if (transcript_fasta.endsWith('.gz')) { + transcript_fasta = "<(gunzip -c $transcript_fasta)" } """ - $get_decoy_ids - sed -i.bak -e 's/>//g' decoys.txt - cat $transcript_fasta $genome_fasta > $gentrome + if [ -n '$genome_fasta' ]; then + grep '^>' $genome_fasta | cut -d ' ' -f 1 | cut -d \$'\\t' -f 1 | sed 's/>//g' > decoys.txt + cat $transcript_fasta $genome_fasta > $fasta + fi salmon \\ index \\ --threads $task.cpus \\ - -t $gentrome \\ - -d decoys.txt \\ + -t $fasta \\ + $decoys \\ $args \\ -i salmon diff --git a/modules/nf-core/salmon/index/tests/main.nf.test b/modules/nf-core/salmon/index/tests/main.nf.test index 16b3c1a79..30b7359b9 100644 --- a/modules/nf-core/salmon/index/tests/main.nf.test +++ b/modules/nf-core/salmon/index/tests/main.nf.test @@ -26,13 +26,43 @@ nextflow_process { assertAll( { assert process.success }, { assert path(process.out.index.get(0)).exists() }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + file(process.out.index[0]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions + ).match()} ) } } - test("sarscov2 stub") { + test("sarscov2 transcriptome only") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([]) + input[1] = Channel.of([file(params.modules_testdata_base_path + "genomics/sarscov2/genome/transcriptome.fasta", checkIfExists: true)]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.index.get(0)).exists() }, + { assert snapshot( + file(process.out.index[0]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions + ).match()} + ) + } + + } + + test("sarscov2 stub") { options "-stub" when { params { @@ -50,7 +80,10 @@ nextflow_process { assertAll( { assert process.success }, { assert path(process.out.index.get(0)).exists() }, - { assert snapshot(process.out.versions).match("versions stub") } + { assert snapshot( + file(process.out.index[0]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions + ).match()} ) } diff --git a/modules/nf-core/salmon/index/tests/main.nf.test.snap b/modules/nf-core/salmon/index/tests/main.nf.test.snap index e5899b511..f8ed44d7d 100644 --- a/modules/nf-core/salmon/index/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/index/tests/main.nf.test.snap @@ -1,26 +1,41 @@ { - "versions": { + "sarscov2 stub": { "content": [ + "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]", [ "versions.yml:md5,85337fa0a286ea35073ee5260974e307" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-18T10:00:47.087293189" + "timestamp": "2025-01-20T12:57:51.498323" }, - "versions stub": { + "sarscov2": { "content": [ + "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]", [ "versions.yml:md5,85337fa0a286ea35073ee5260974e307" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-18T10:01:03.89824494" + "timestamp": "2025-01-20T12:57:33.474302" + }, + "sarscov2 transcriptome only": { + "content": [ + "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]", + [ + "versions.yml:md5,85337fa0a286ea35073ee5260974e307" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2025-01-20T12:57:42.420247" } } \ No newline at end of file diff --git a/modules/nf-core/salmon/index/tests/tags.yml b/modules/nf-core/salmon/index/tests/tags.yml deleted file mode 100644 index 02997890f..000000000 --- a/modules/nf-core/salmon/index/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -salmon/index: - - modules/nf-core/salmon/index/** diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index e2d273525..b7c71871c 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -1,79 +1,94 @@ process SALMON_QUANT { - tag "$meta.id" + tag "${meta.id}" label "process_medium" conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/salmon:1.10.3--h6dccd9a_2' : - 'biocontainers/salmon:1.10.3--h6dccd9a_2' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/salmon:1.10.3--h6dccd9a_2' + : 'biocontainers/salmon:1.10.3--h6dccd9a_2'}" input: tuple val(meta), path(reads) - path index - path gtf - path transcript_fasta - val alignment_mode - val lib_type + path index + path gtf + path transcript_fasta + val alignment_mode + val lib_type output: - tuple val(meta), path("${prefix}") , emit: results - tuple val(meta), path("*info.json") , emit: json_info, optional: true + tuple val(meta), path("${prefix}"), emit: results + tuple val(meta), path("*info.json"), emit: json_info, optional: true tuple val(meta), path("*lib_format_counts.json"), emit: lib_format_counts, optional: true - path "versions.yml" , emit: versions + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" - def reference = "--index $index" + def reference = "--index ${index}" def reads1 = [] def reads2 = [] - meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } + meta.single_end ? [reads].flatten().each { reads1 << it } : reads.eachWithIndex { v, ix -> (ix & 1 ? reads2 : reads1) << v } def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" if (alignment_mode) { - reference = "-t $transcript_fasta" - input_reads = "-a $reads" + reference = "-t ${transcript_fasta}" + input_reads = "-a ${reads}" } def strandedness_opts = [ - 'A', 'U', 'SF', 'SR', - 'IS', 'IU' , 'ISF', 'ISR', - 'OS', 'OU' , 'OSF', 'OSR', - 'MS', 'MU' , 'MSF', 'MSR' + 'A', + 'U', + 'SF', + 'SR', + 'IS', + 'IU', + 'ISF', + 'ISR', + 'OS', + 'OU', + 'OSF', + 'OSR', + 'MS', + 'MU', + 'MSF', + 'MSR', ] - def strandedness = 'A' + def strandedness = 'A' if (lib_type) { if (strandedness_opts.contains(lib_type)) { strandedness = lib_type - } else { - log.info "[Salmon Quant] Invalid library type specified '--libType=${lib_type}', defaulting to auto-detection with '--libType=A'." } - } else { + else { + log.info("[Salmon Quant] Invalid library type specified '--libType=${lib_type}', defaulting to auto-detection with '--libType=A'.") + } + } + else { strandedness = meta.single_end ? 'U' : 'IU' if (meta.strandedness == 'forward') { strandedness = meta.single_end ? 'SF' : 'ISF' - } else if (meta.strandedness == 'reverse') { + } + else if (meta.strandedness == 'reverse') { strandedness = meta.single_end ? 'SR' : 'ISR' } } """ salmon quant \\ - --geneMap $gtf \\ - --threads $task.cpus \\ - --libType=$strandedness \\ - $reference \\ - $input_reads \\ - $args \\ - -o $prefix + --geneMap ${gtf} \\ + --threads ${task.cpus} \\ + --libType=${strandedness} \\ + ${reference} \\ + ${input_reads} \\ + ${args} \\ + -o ${prefix} - if [ -f $prefix/aux_info/meta_info.json ]; then - cp $prefix/aux_info/meta_info.json "${prefix}_meta_info.json" + if [ -f ${prefix}/aux_info/meta_info.json ]; then + cp ${prefix}/aux_info/meta_info.json "${prefix}_meta_info.json" fi - if [ -f $prefix/lib_format_counts.json ]; then - cp $prefix/lib_format_counts.json "${prefix}_lib_format_counts.json" + if [ -f ${prefix}/lib_format_counts.json ]; then + cp ${prefix}/lib_format_counts.json "${prefix}_lib_format_counts.json" fi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/salmon/quant/tests/tags.yml b/modules/nf-core/salmon/quant/tests/tags.yml deleted file mode 100644 index 048d81642..000000000 --- a/modules/nf-core/salmon/quant/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -salmon/quant: - - modules/nf-core/salmon/quant/** diff --git a/modules/nf-core/samtools/convert/tests/tags.yml b/modules/nf-core/samtools/convert/tests/tags.yml deleted file mode 100644 index 030d5eb5e..000000000 --- a/modules/nf-core/samtools/convert/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/convert: - - "modules/nf-core/samtools/convert/**" diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 28c0a81cf..6de0095d8 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -10,9 +10,11 @@ process SAMTOOLS_FAIDX { input: tuple val(meta), path(fasta) tuple val(meta2), path(fai) + val get_sizes output: - tuple val(meta), path ("*.{fa,fasta}") , emit: fa , optional: true + tuple val(meta), path ("*.{fa,fasta}") , emit: fa, optional: true + tuple val(meta), path ("*.sizes") , emit: sizes, optional: true tuple val(meta), path ("*.fai") , emit: fai, optional: true tuple val(meta), path ("*.gzi") , emit: gzi, optional: true path "versions.yml" , emit: versions @@ -22,12 +24,15 @@ process SAMTOOLS_FAIDX { script: def args = task.ext.args ?: '' + def get_sizes_command = get_sizes ? "cut -f 1,2 ${fasta}.fai > ${fasta}.sizes" : '' """ samtools \\ faidx \\ $fasta \\ $args + ${get_sizes_command} + cat <<-END_VERSIONS > versions.yml "${task.process}": samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') @@ -37,9 +42,15 @@ process SAMTOOLS_FAIDX { stub: def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll() def fastacmd = match[0] ? "touch ${match[0][1]}" : '' + def get_sizes_command = get_sizes ? "touch ${fasta}.sizes" : '' """ ${fastacmd} touch ${fasta}.fai + if [[ "${fasta.extension}" == "gz" ]]; then + touch ${fasta}.gzi + fi + + ${get_sizes_command} cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index 6721b2cb8..256a330a1 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -1,9 +1,10 @@ name: samtools_faidx -description: Index FASTA file +description: Index FASTA file, and optionally generate a file of chromosome sizes keywords: - index - fasta - faidx + - chromosome tools: - samtools: description: | @@ -34,6 +35,10 @@ input: type: file description: FASTA index file pattern: "*.{fai}" + - - get_sizes: + type: boolean + description: use cut to get the sizes of the index (true) or not (false) + output: - fa: - meta: @@ -55,6 +60,16 @@ output: type: file description: FASTA index file pattern: "*.{fai}" + - sizes: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sizes": + type: file + description: File containing chromosome lengths + pattern: "*.{sizes}" - gzi: - meta: type: map @@ -75,6 +90,5 @@ authors: - "@ewels" - "@phue" maintainers: - - "@drpatelh" - - "@ewels" + - "@maxulysse" - "@phue" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test index 17244ef2e..64219b7d9 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -16,8 +16,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [[],[]] + input[2] = false """ } } @@ -37,8 +37,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] - input[1] = [[],[]] + input[2] = false """ } } @@ -60,9 +60,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + input[2] = false """ } } @@ -84,9 +84,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + input[2] = false """ } } @@ -106,8 +106,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] - input[1] = [[],[]] + input[2] = false """ } } @@ -119,4 +119,101 @@ nextflow_process { ) } } + + test("test_samtools_faidx_get_sizes") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_get_sizes_bgzip") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_get_sizes - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_get_sizes_bgzip - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 1bbb3ec2b..737224148 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -6,6 +6,9 @@ ], "1": [ + + ], + "2": [ [ { "id": "test", @@ -14,10 +17,10 @@ "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" ] ], - "2": [ + "3": [ ], - "3": [ + "4": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -34,6 +37,9 @@ ], "gzi": [ + ], + "sizes": [ + ], "versions": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" @@ -41,10 +47,142 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-20T17:31:48.258623157" + }, + "test_samtools_faidx_get_sizes_bgzip - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" }, - "timestamp": "2024-09-16T07:57:47.450887871" + "timestamp": "2024-11-20T17:32:41.122428188" + }, + "test_samtools_faidx_get_sizes": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-20T17:34:02.353546697" }, "test_samtools_faidx_bgzip": { "content": [ @@ -53,6 +191,9 @@ ], "1": [ + + ], + "2": [ [ { "id": "test", @@ -61,7 +202,7 @@ "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" ] ], - "2": [ + "3": [ [ { "id": "test", @@ -70,7 +211,7 @@ "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" ] ], - "3": [ + "4": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -93,6 +234,9 @@ }, "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" ] + ], + "sizes": [ + ], "versions": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" @@ -100,10 +244,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.1" }, - "timestamp": "2024-09-16T07:58:04.804905659" + "timestamp": "2024-11-20T17:31:55.157487176" }, "test_samtools_faidx_fasta": { "content": [ @@ -124,6 +268,9 @@ ], "3": [ + + ], + "4": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -140,6 +287,9 @@ ], "gzi": [ + ], + "sizes": [ + ], "versions": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" @@ -147,10 +297,71 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.1" }, - "timestamp": "2024-09-16T07:58:23.831268154" + "timestamp": "2024-11-20T17:32:02.149455586" + }, + "test_samtools_faidx_get_sizes - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-20T17:32:34.29376776" }, "test_samtools_faidx_stub_fasta": { "content": [ @@ -171,6 +382,9 @@ ], "3": [ + + ], + "4": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -187,6 +401,9 @@ ], "gzi": [ + ], + "sizes": [ + ], "versions": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" @@ -194,10 +411,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.1" }, - "timestamp": "2024-09-16T07:58:35.600243706" + "timestamp": "2024-11-20T17:32:09.125065185" }, "test_samtools_faidx_stub_fai": { "content": [ @@ -206,6 +423,9 @@ ], "1": [ + + ], + "2": [ [ { "id": "test", @@ -214,10 +434,10 @@ "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" ] ], - "2": [ + "3": [ ], - "3": [ + "4": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -234,6 +454,80 @@ ], "gzi": [ + ], + "sizes": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-20T17:32:16.274287863" + }, + "test_samtools_faidx_get_sizes_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "4": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] ], "versions": [ "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" @@ -241,9 +535,9 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.1" }, - "timestamp": "2024-09-16T07:58:54.705460167" + "timestamp": "2024-11-20T17:32:28.117654855" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/tags.yml b/modules/nf-core/samtools/faidx/tests/tags.yml deleted file mode 100644 index e4a839481..000000000 --- a/modules/nf-core/samtools/faidx/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/faidx: - - modules/nf-core/samtools/faidx/** diff --git a/modules/nf-core/samtools/index/tests/tags.yml b/modules/nf-core/samtools/index/tests/tags.yml deleted file mode 100644 index e0f58a7a3..000000000 --- a/modules/nf-core/samtools/index/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/index: - - modules/nf-core/samtools/index/** diff --git a/modules/nf-core/samtools/sort/tests/tags.yml b/modules/nf-core/samtools/sort/tests/tags.yml deleted file mode 100644 index cd63ea208..000000000 --- a/modules/nf-core/samtools/sort/tests/tags.yml +++ /dev/null @@ -1,3 +0,0 @@ -samtools/sort: - - modules/nf-core/samtools/sort/** - - tests/modules/nf-core/samtools/sort/** diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml deleted file mode 100644 index 02cda6e6a..000000000 --- a/modules/nf-core/samtools/view/environment.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -channels: - - conda-forge - - bioconda -dependencies: - # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.21 - # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf deleted file mode 100644 index a6941e638..000000000 --- a/modules/nf-core/samtools/view/main.nf +++ /dev/null @@ -1,77 +0,0 @@ -process SAMTOOLS_VIEW { - tag "$meta.id" - label 'process_low' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/9e/9edc2564215d5cd137a8b25ca8a311600987186d406b092022444adf3c4447f7/data' : - 'community.wave.seqera.io/library/htslib_samtools:1.21--6cb89bfd40cbaabf' }" - - input: - tuple val(meta), path(input), path(index) - tuple val(meta2), path(fasta) - path qname - - output: - tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true - tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true - tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true - tuple val(meta), path("${prefix}.${file_type}.bai"), emit: bai, optional: true - tuple val(meta), path("${prefix}.${file_type}.csi"), emit: csi, optional: true - tuple val(meta), path("${prefix}.${file_type}.crai"), emit: crai, optional: true - tuple val(meta), path("${prefix}.unselected.${file_type}"), emit: unselected, optional: true - tuple val(meta), path("${prefix}.unselected.${file_type}.{bai,csi,crsi}"), emit: unselected_index, optional: true - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def reference = fasta ? "--reference ${fasta}" : "" - file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() - readnames = qname ? "--qname-file ${qname} --output-unselected ${prefix}.unselected.${file_type}": "" - if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - samtools \\ - view \\ - --threads ${task.cpus-1} \\ - ${reference} \\ - ${readnames} \\ - $args \\ - -o ${prefix}.${file_type} \\ - $input \\ - $args2 - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() - if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - - index = args.contains("--write-index") ? "touch ${prefix}.${file_type}.csi" : "" - - """ - touch ${prefix}.${file_type} - ${index} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml deleted file mode 100644 index caa7b0150..000000000 --- a/modules/nf-core/samtools/view/meta.yml +++ /dev/null @@ -1,141 +0,0 @@ -name: samtools_view -description: filter/convert SAM/BAM/CRAM file -keywords: - - view - - bam - - sam - - cram -tools: - - samtools: - description: | - SAMtools is a set of utilities for interacting with and post-processing - short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. - These files are generated as output by short read aligners like BWA. - homepage: http://www.htslib.org/ - documentation: http://www.htslib.org/doc/samtools.html - doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] - identifier: biotools:samtools -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - index: - type: file - description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) - pattern: "*.{.bai,.csi,.crai}" - - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - - qname: - type: file - description: Optional file with read names to output only select alignments - pattern: "*.{txt,list}" -output: - - bam: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.bam: - type: file - description: optional filtered/converted BAM file - pattern: "*.{bam}" - - cram: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.cram: - type: file - description: optional filtered/converted CRAM file - pattern: "*.{cram}" - - sam: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.sam: - type: file - description: optional filtered/converted SAM file - pattern: "*.{sam}" - - bai: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.${file_type}.bai: - type: file - description: optional BAM file index - pattern: "*.{bai}" - - csi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.${file_type}.csi: - type: file - description: optional tabix BAM file index - pattern: "*.{csi}" - - crai: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.${file_type}.crai: - type: file - description: optional CRAM file index - pattern: "*.{crai}" - - unselected: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.unselected.${file_type}: - type: file - description: optional file with unselected alignments - pattern: "*.unselected.{bam,cram,sam}" - - unselected_index: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.unselected.${file_type}.{bai,csi,crsi}: - type: file - description: index for the "unselected" file - pattern: "*.unselected.{bai,csi,crai}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@joseespinosa" - - "@FriederikeHanssen" - - "@priyanka-surana" -maintainers: - - "@drpatelh" - - "@joseespinosa" - - "@FriederikeHanssen" - - "@priyanka-surana" diff --git a/modules/nf-core/samtools/view/tests/bam.config b/modules/nf-core/samtools/view/tests/bam.config deleted file mode 100644 index c10d10811..000000000 --- a/modules/nf-core/samtools/view/tests/bam.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--output-fmt bam" -} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/bam_index.config b/modules/nf-core/samtools/view/tests/bam_index.config deleted file mode 100644 index 771ae033a..000000000 --- a/modules/nf-core/samtools/view/tests/bam_index.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = "--output-fmt bam --write-index" -} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test deleted file mode 100644 index 37b81a916..000000000 --- a/modules/nf-core/samtools/view/tests/main.nf.test +++ /dev/null @@ -1,214 +0,0 @@ -nextflow_process { - - name "Test Process SAMTOOLS_VIEW" - script "../main.nf" - process "SAMTOOLS_VIEW" - - tag "modules" - tag "modules_nfcore" - tag "samtools" - tag "samtools/view" - - test("bam") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), - [] - ]) - input[1] = [[],[]] - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, - { assert snapshot(process.out.bai).match("bam_bai") }, - { assert snapshot(process.out.crai).match("bam_crai") }, - { assert snapshot(process.out.cram).match("bam_cram") }, - { assert snapshot(process.out.csi).match("bam_csi") }, - { assert snapshot(process.out.sam).match("bam_sam") }, - { assert snapshot(process.out.versions).match("bam_versions") } - ) - } - } - - test("cram") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) - ]) - input[1] = Channel.of([ - [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.cram[0][1]).name).match("cram_cram") }, - { assert snapshot(process.out.bai).match("cram_bai") }, - { assert snapshot(process.out.bam).match("cram_bam") }, - { assert snapshot(process.out.crai).match("cram_crai") }, - { assert snapshot(process.out.csi).match("cram_csi") }, - { assert snapshot(process.out.sam).match("cram_sam") }, - { assert snapshot(process.out.versions).match("cram_versions") } - ) - } - } - - test("cram_to_bam") { - - config "./bam.config" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - [] - ]) - input[1] = Channel.of([ - [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_bam") }, - { assert snapshot(process.out.bai).match("cram_to_bam_bai") }, - { assert snapshot(process.out.crai).match("cram_to_bam_crai") }, - { assert snapshot(process.out.cram).match("cram_to_bam_cram") }, - { assert snapshot(process.out.csi).match("cram_to_bam_csi") }, - { assert snapshot(process.out.sam).match("cram_to_bam_sam") }, - { assert snapshot(process.out.versions).match("cram_to_bam_versions") } - ) - } - } - - test("cram_to_bam_index") { - - config "./bam_index.config" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - [] - ]) - input[1] = Channel.of([ - [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_bam") }, - { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_csi") }, - { assert snapshot(process.out.bai).match("cram_to_bam_index_bai") }, - { assert snapshot(process.out.crai).match("cram_to_bam_index_crai") }, - { assert snapshot(process.out.cram).match("cram_to_bam_index_cram") }, - { assert snapshot(process.out.sam).match("cram_to_bam_index_sam") }, - { assert snapshot(process.out.versions).match("cram_to_bam_index_versions") } - ) - } - } - - test("cram_to_bam_index_qname") { - - config "./bam_index.config" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - [] - ]) - input[1] = Channel.of([ - [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = Channel.of("testN:2817", "testN:2814").collectFile(name: "readnames.list", newLine: true) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_qname_bam") }, - { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_qname_csi") }, - { assert snapshot(process.out.bai).match("cram_to_bam_index_qname_bai") }, - { assert snapshot(process.out.crai).match("cram_to_bam_index_qname_crai") }, - { assert snapshot(process.out.cram).match("cram_to_bam_index_qname_cram") }, - { assert snapshot(process.out.sam).match("cram_to_bam_index_qname_sam") }, - { assert snapshot(file(process.out.unselected[0][1]).name).match("cram_to_bam_index_qname_unselected") }, - { assert snapshot(file(process.out.unselected_index[0][1]).name).match("cram_to_bam_index_qname_unselected_csi") }, - { assert snapshot(process.out.versions).match("cram_to_bam_index_qname_versions") } - ) - } - } - - test("bam_stub") { - - options "-stub" - config "./bam_index.config" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), - [] - ]) - input[1] = [[],[]] - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, - { assert snapshot(file(process.out.csi[0][1]).name).match("bam_stub_csi") }, - { assert snapshot(process.out.bai).match("bam_stub_bai") }, - { assert snapshot(process.out.crai).match("bam_stub_crai") }, - { assert snapshot(process.out.cram).match("bam_stub_cram") }, - { assert snapshot(process.out.sam).match("bam_stub_sam") }, - { assert snapshot(process.out.versions).match("bam_stub_versions") } - ) - } - } -} diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap deleted file mode 100644 index 63849b037..000000000 --- a/modules/nf-core/samtools/view/tests/main.nf.test.snap +++ /dev/null @@ -1,528 +0,0 @@ -{ - "bam_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:51.256068" - }, - "cram_to_bam_index_csi": { - "content": [ - "test.bam.csi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:12.958617" - }, - "bam_stub_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:32.065301" - }, - "bam_bai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:51.258578" - }, - "bam_stub_bai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:32.071284" - }, - "bam_stub_versions": { - "content": [ - [ - "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-16T09:26:24.461775464" - }, - "cram_to_bam_index_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:12.972288" - }, - "cram_to_bam_sam": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:04.999247" - }, - "cram_to_bam_index_sam": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:12.976457" - }, - "cram_crai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:56.497581" - }, - "cram_csi": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:56.50038" - }, - "cram_to_bam_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:04.992239" - }, - "cram_to_bam_index_qname_csi": { - "content": [ - "test.bam.csi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.325496" - }, - "bam_stub_sam": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:32.079529" - }, - "cram_cram": { - "content": [ - "test.cram" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:56.490286" - }, - "cram_to_bam_index_qname_unselected_csi": { - "content": [ - "test.unselected.bam.csi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.328458" - }, - "bam_csi": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:51.262882" - }, - "cram_to_bam_crai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:04.989247" - }, - "cram_to_bam_index_crai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:12.967681" - }, - "cram_to_bam_index_qname_versions": { - "content": [ - [ - "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-16T09:25:51.953436682" - }, - "cram_to_bam_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:04.982361" - }, - "cram_to_bam_index_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:12.95456" - }, - "cram_to_bam_index_versions": { - "content": [ - [ - "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-16T09:25:14.475388399" - }, - "cram_to_bam_bai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:04.98601" - }, - "cram_to_bam_versions": { - "content": [ - [ - "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-16T09:24:49.673441798" - }, - "cram_bam": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:56.495512" - }, - "bam_stub_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:32.076908" - }, - "cram_to_bam_index_qname_bai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.328458" - }, - "cram_to_bam_index_qname_crai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.330789" - }, - "cram_bai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:56.493129" - }, - "bam_stub_crai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:32.074313" - }, - "cram_to_bam_index_qname_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.322874" - }, - "cram_to_bam_index_qname_unselected": { - "content": [ - "test.unselected.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.322874" - }, - "cram_to_bam_index_qname_unselected_csi": { - "content": [ - "test.unselected.bam.csi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.328458" - }, - "bam_versions": { - "content": [ - [ - "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-16T09:23:27.151650338" - }, - "cram_to_bam_index_qname_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.333248" - }, - "bam_crai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:51.259774" - }, - "bam_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:51.261287" - }, - "cram_to_bam_csi": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:04.995454" - }, - "cram_sam": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:56.502625" - }, - "cram_versions": { - "content": [ - [ - "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-16T09:24:12.95416913" - }, - "cram_to_bam_index_qname_unselected": { - "content": [ - "test.unselected.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.322874" - }, - "bam_sam": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:37:51.264651" - }, - "cram_to_bam_index_bai": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:12.962863" - }, - "cram_to_bam_index_qname_sam": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:23.337634" - }, - "bam_stub_csi": { - "content": [ - "test.bam.csi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:38:32.068596" - } -} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/tags.yml b/modules/nf-core/samtools/view/tests/tags.yml deleted file mode 100644 index 4fdf1dd12..000000000 --- a/modules/nf-core/samtools/view/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/view: - - "modules/nf-core/samtools/view/**" diff --git a/modules/nf-core/star/align/tests/tags.yml b/modules/nf-core/star/align/tests/tags.yml deleted file mode 100644 index 8beace16e..000000000 --- a/modules/nf-core/star/align/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -star/align: - - modules/nf-core/star/align/** diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml index 7c57530a3..91e37ae12 100644 --- a/modules/nf-core/star/genomegenerate/environment.yml +++ b/modules/nf-core/star/genomegenerate/environment.yml @@ -1,9 +1,11 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.20 - - bioconda::samtools=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 - bioconda::star=2.7.11b - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf index 8f0c67e76..4eb95654b 100644 --- a/modules/nf-core/star/genomegenerate/main.nf +++ b/modules/nf-core/star/genomegenerate/main.nf @@ -4,8 +4,8 @@ process STAR_GENOMEGENERATE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b4/b425bc2a95806d878993f9a66dae3ae80ac2dafff4c208c5ae01b7a90a32fa91/data' : - 'community.wave.seqera.io/library/star_samtools_htslib_gawk:10c6e8c834460019' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/26/268b4c9c6cbf8fa6606c9b7fd4fafce18bf2c931d1a809a0ce51b105ec06c89d/data' : + 'community.wave.seqera.io/library/htslib_samtools_star_gawk:ae438e9a604351a4' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap index 3db256782..b79da991d 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap @@ -3,14 +3,14 @@ "content": [ "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]", [ - "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" + "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-19T20:37:47.410432728" + "timestamp": "2024-12-11T16:29:40.748676908" }, "fasta_gtf_stub": { "content": [ @@ -41,7 +41,7 @@ ] ], "1": [ - "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" + "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" ], "index": [ [ @@ -69,15 +69,15 @@ ] ], "versions": [ - "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" + "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-19T20:38:09.165234795" + "timestamp": "2024-12-11T16:30:11.024076742" }, "fasta_stub": { "content": [ @@ -101,7 +101,7 @@ ] ], "1": [ - "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" + "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" ], "index": [ [ @@ -122,27 +122,27 @@ ] ], "versions": [ - "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" + "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-19T20:38:19.530862664" + "timestamp": "2024-12-11T16:30:22.674364031" }, "fasta": { "content": [ "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]", [ - "versions.yml:md5,14b05d04c9eca568e9ed4888aaf26fa6" + "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-10-19T20:37:58.667436398" + "timestamp": "2024-12-11T16:29:57.958812354" } } \ No newline at end of file diff --git a/modules/nf-core/star/genomegenerate/tests/tags.yml b/modules/nf-core/star/genomegenerate/tests/tags.yml deleted file mode 100644 index 79f619bfe..000000000 --- a/modules/nf-core/star/genomegenerate/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -star/genomegenerate: - - modules/nf-core/star/genomegenerate/** diff --git a/modules/nf-core/stringtie/merge/environment.yml b/modules/nf-core/stringtie/merge/environment.yml index 0556de41a..ef1f3d0e1 100644 --- a/modules/nf-core/stringtie/merge/environment.yml +++ b/modules/nf-core/stringtie/merge/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/stringtie/merge/tests/tags.yml b/modules/nf-core/stringtie/merge/tests/tags.yml deleted file mode 100644 index 58cef46ba..000000000 --- a/modules/nf-core/stringtie/merge/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -stringtie/merge: - - modules/nf-core/stringtie/merge/** diff --git a/modules/nf-core/stringtie/stringtie/environment.yml b/modules/nf-core/stringtie/stringtie/environment.yml index 906b7486c..a51985b4f 100644 --- a/modules/nf-core/stringtie/stringtie/environment.yml +++ b/modules/nf-core/stringtie/stringtie/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/stringtie/stringtie/tests/tags.yml b/modules/nf-core/stringtie/stringtie/tests/tags.yml deleted file mode 100644 index da9b051c3..000000000 --- a/modules/nf-core/stringtie/stringtie/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -stringtie/stringtie: - - modules/nf-core/stringtie/stringtie/** diff --git a/modules/nf-core/ucsc/gtftogenepred/environment.yml b/modules/nf-core/ucsc/gtftogenepred/environment.yml index 5c4f6c2fa..86709a0d4 100644 --- a/modules/nf-core/ucsc/gtftogenepred/environment.yml +++ b/modules/nf-core/ucsc/gtftogenepred/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index c9729ed64..1767a6123 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -56,7 +56,7 @@ workflow BUILD_REFERENCES { def ch_fai = Channel.empty() if (!exists_not_empty(params.fai)){ - SAMTOOLS_FAIDX(ch_fasta, [[],[]]) + SAMTOOLS_FAIDX(ch_fasta, [[],[]], false) ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) ch_fai = SAMTOOLS_FAIDX.out.fai } else { diff --git a/subworkflows/local/starfusion_workflow/tests/nextflow.config b/subworkflows/local/starfusion_workflow/tests/nextflow.config index 718add69c..2f955abc4 100644 --- a/subworkflows/local/starfusion_workflow/tests/nextflow.config +++ b/subworkflows/local/starfusion_workflow/tests/nextflow.config @@ -30,8 +30,4 @@ process { ext.prefix = { "${meta.id}.star_for_starfusion.Aligned.sortedByCoord.out" } } - withName: 'SAMTOOLS_VIEW_FOR_STARFUSION' { - ext.args = { "--output-fmt cram" } - ext.prefix = { "${meta.id}.star_for_starfusion.Aligned.sortedByCoord.out" } - } } From 525aee2fec64acab93fb7cf415a261d9aff7cd3f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 13:21:08 +0200 Subject: [PATCH 494/887] update snap --- tests/test_stub.nf.test.snap | 56 ++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 8ab99e9b8..4d70e895b 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -38,11 +38,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -208,10 +208,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:48:48.9071057" + "timestamp": "2025-05-07T13:06:26.949894702" }, "stub test stringtie": { "content": [ @@ -555,7 +555,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -863,10 +863,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:51:45.508140056" + "timestamp": "2025-05-07T13:08:57.754362685" }, "stub test salmon": { "content": [ @@ -1005,7 +1005,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1184,10 +1184,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:47:44.413622274" + "timestamp": "2025-05-07T13:05:33.800125465" }, "stub test fusionreport": { "content": [ @@ -1247,11 +1247,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1446,17 +1446,17 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:50:05.389865001" + "timestamp": "2025-05-07T13:07:32.131686727" }, "stub test fastp": { "content": [ 10, { "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1520,10 +1520,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:50:34.188288253" + "timestamp": "2025-05-07T13:08:02.208707357" }, "stub test fusioncatcher": { "content": [ @@ -1618,7 +1618,7 @@ "ctat-splicing": "0.0.2" }, "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1686,11 +1686,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -2071,9 +2071,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:46:29.001694439" + "timestamp": "2025-05-07T13:04:26.194367038" } } \ No newline at end of file From 4f84b13d24e3c3bcc318b5fb5bb57e615b41332f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 13:24:10 +0200 Subject: [PATCH 495/887] prettier --- modules.json | 122 +++++------------- .../gatk4/markduplicates/environment.yml | 2 +- 2 files changed, 32 insertions(+), 92 deletions(-) diff --git a/modules.json b/modules.json index 8bb54eef5..844a7b83d 100644 --- a/modules.json +++ b/modules.json @@ -8,191 +8,137 @@ "agat/convertspgff2tsv": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", "git_sha": "1719e20e3881b37b9e1e8498ea669a2b92e54b9a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/download": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastp": { "branch": "master", "git_sha": "d082103d7976a2804f21225446cc110cbd822f4c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "b1966f36ec9de31927b2603d8f499960b2a4c294", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fusioncatcher/fusioncatcher": { "branch": "master", "git_sha": "2a227f75f33415f74a884ef8b33555b151e33de9", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "1ec937ab3edc307bc0d79a2200d784e9f0868359", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gffread": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "7b50cb7be890e4b28cffb82e438cc6a8d7805d3f", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "980a4964be91da75fb3ccf576118a18e247f6d15", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectrnaseqmetrics": { "branch": "master", "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/index": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/convert": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/align": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/gtftogenepred": { "branch": "master", "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -201,26 +147,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml index 352d20f83..ca0fc1923 100644 --- a/modules/nf-core/gatk4/markduplicates/environment.yml +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -9,4 +9,4 @@ dependencies: - bioconda::gatk4=4.6.1.0 - bioconda::gcnvkernel=0.9 - bioconda::htslib=1.21 - - bioconda::samtools=1.21 \ No newline at end of file + - bioconda::samtools=1.21 From de370ca91cf0562144b086fdb42682930df1eaa2 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 7 May 2025 14:11:40 +0200 Subject: [PATCH 496/887] add --limit_bam_sort_ram --- conf/modules.config | 45 +++++++++++++++++++++++--------------------- nextflow.config | 1 + nextflow_schema.json | 6 ++++++ 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a97d0806c..662622628 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -254,27 +254,30 @@ process { mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] - ext.args = { "--outReadsUnmapped None \ - --outSAMattrRGline 'ID:${meta.id}' 'SM:${meta.id}'${meta.seq_center ? " 'CN:${meta.seq_center}'": ''}${meta.seq_platform ? "' PL:${meta.seq_platform}'": ''} \ - --outSAMstrandField intronMotif \ - --chimOutJunctionFormat 1 \ - --twopassMode None \ - --outFilterMultimapNmax 50 \ - --chimMultimapNmax 50 \ - --quantMode GeneCounts \ - --outSAMunmapped Within \ - --readFilesCommand zcat \ - --alignSJstitchMismatchNmax 5 -1 5 5 \ - --outSAMtype BAM SortedByCoordinate \ - --chimSegmentMin 10 \ - --peOverlapNbasesMin 10 \ - --alignSplicedMateMapLminOverLmate 0.5 \ - --chimJunctionOverhangMin 10 \ - --chimScoreJunctionNonGTAG 0 \ - --chimScoreDropMax 30 \ - --chimScoreSeparation 1 \ - --chimSegmentReadGapMax 3 \ - --chimOutType Junctions WithinBAM" } + ext.args = { [ + "--outReadsUnmapped None", + "--outSAMattrRGline 'ID:${meta.id}' 'SM:${meta.id}'${meta.seq_center ? " 'CN:${meta.seq_center}'": ''}${meta.seq_platform ? "' PL:${meta.seq_platform}'": ''}", + "--outSAMstrandField intronMotif", + "--chimOutJunctionFormat 1", + "--twopassMode None", + "--outFilterMultimapNmax 50", + "--chimMultimapNmax 50", + "--quantMode GeneCounts", + "--outSAMunmapped Within", + "--readFilesCommand zcat ", + "--alignSJstitchMismatchNmax 5 -1 5 5", + "--outSAMtype BAM SortedByCoordinate", + "--chimSegmentMin 10", + "--peOverlapNbasesMin 10", + "--alignSplicedMateMapLminOverLmate 0.5", + "--chimJunctionOverhangMin 10", + "--chimScoreJunctionNonGTAG 0", + "--chimScoreDropMax 30", + "--chimScoreSeparation 1 ", + "--chimSegmentReadGapMax 3", + "--chimOutType Junctions WithinBAM", + params.star_limit_bam_sort_ram ? "--limitBAMsortRAM ${params.star_limit_bam_sort_ram}" : "" + ].join(' ') } } withName: 'STAR_GENOMEGENERATE' { diff --git a/nextflow.config b/nextflow.config index cb6f13a62..c2e185e7c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -46,6 +46,7 @@ params { // Alignment options star_ignore_sjdbgtf = false + star_limit_bam_sort_ram = 0 seq_center = "" seq_platform = "" fusioncatcher_limitSjdbInsertNsj = 2000000 diff --git a/nextflow_schema.json b/nextflow_schema.json index 190b98292..2ef037604 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -529,6 +529,12 @@ "hidden": true, "fa_icon": "fas fa-toolbox", "help_text": "Setting false will use GTF file for STAR alignment" + }, + "star_limit_bam_sort_ram": { + "type": "integer", + "description": "The maximum amount of RAM to use for sorting the BAM file in STAR. Should by in bits", + "fa_icon": "fas fa-toolbox", + "minimum": 0 } } } From dfc7efeb91db4ca73d9734338ad7bd460a6ffecc Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 7 May 2025 14:13:32 +0200 Subject: [PATCH 497/887] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83516b786..7f066ac39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) - Moved strandedness determination for picard collectrnaseqmetrics into modules.config [#658](https://github.com/nf-core/rnafusion/pull/658) - Using option `--human_gencode_filter` while building STARFusion references for human species [#657](https://github.com/nf-core/rnafusion/pull/657) +- Added `--star_limit_bam_sort_ram` to set the maximum memory for sorting the BAM files in STAR. [#668](https://github.com/nf-core/rnafusion/pull/668) ### Changed From 98cadc532bff3042d045ab49d3591f545d619c65 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 7 May 2025 14:19:37 +0200 Subject: [PATCH 498/887] clarify description --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 2ef037604..978c44767 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -532,7 +532,7 @@ }, "star_limit_bam_sort_ram": { "type": "integer", - "description": "The maximum amount of RAM to use for sorting the BAM file in STAR. Should by in bits", + "description": "The maximum amount of RAM to use for sorting the BAM file in STAR. Should by in bits. Setting this value to `0` will use the default amount of STAR.", "fa_icon": "fas fa-toolbox", "minimum": 0 } From 0c32e4777e3992d55375719ebae07ad897ca7160 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 7 May 2025 14:20:00 +0200 Subject: [PATCH 499/887] clarify the check --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 662622628..5652213dc 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -276,7 +276,7 @@ process { "--chimScoreSeparation 1 ", "--chimSegmentReadGapMax 3", "--chimOutType Junctions WithinBAM", - params.star_limit_bam_sort_ram ? "--limitBAMsortRAM ${params.star_limit_bam_sort_ram}" : "" + params.star_limit_bam_sort_ram > 0 ? "--limitBAMsortRAM ${params.star_limit_bam_sort_ram}" : "" ].join(' ') } } From a29e06a830fe150e65fc841f8af0c85f06098958 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 14:38:07 +0200 Subject: [PATCH 500/887] update snap --- tests/test_build.nf.test.snap | 16 ++-- tests/test_stub.nf.test.snap | 124 +++++++++++++------------- tests/test_stub_bam.nf.test.snap | 148 +++++++++++++++---------------- 3 files changed, 144 insertions(+), 144 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 5c5d08924..ab452ad38 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -7,7 +7,7 @@ "arriba_download": "2.4.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -35,11 +35,11 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -220,7 +220,7 @@ "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", - "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "AnnotFilterRule.pm:md5,f94966013cd0df9624a6dda0b75fefa0", "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -277,9 +277,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:08:10.68706064" + "timestamp": "2025-05-07T14:33:25.428259571" } -} +} \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 7495d02c4..4ce83763c 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -13,8 +13,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -38,11 +38,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -51,7 +51,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -208,10 +208,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:48:48.9071057" + "timestamp": "2025-05-07T14:03:38.544810125" }, "stub test stringtie": { "content": [ @@ -227,8 +227,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -258,7 +258,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -348,10 +348,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:49:24.923946194" + "timestamp": "2025-05-07T14:04:11.405954818" }, "stub test arriba": { "content": [ @@ -373,8 +373,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -404,7 +404,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -489,10 +489,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:47:08.02222829" + "timestamp": "2025-05-07T14:02:08.078812972" }, "stub test fusioninspector": { "content": [ @@ -514,10 +514,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -526,8 +526,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -555,7 +555,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -564,7 +564,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -863,10 +863,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:51:45.508140056" + "timestamp": "2025-05-07T14:06:10.151871018" }, "stub test salmon": { "content": [ @@ -979,8 +979,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1005,7 +1005,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1014,7 +1014,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1184,10 +1184,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:47:44.413622274" + "timestamp": "2025-05-07T14:02:40.610644223" }, "stub test fusionreport": { "content": [ @@ -1210,10 +1210,10 @@ "fusioncatcher": "1.33" }, "FUSIONREPORT": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1222,8 +1222,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1247,11 +1247,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1260,7 +1260,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1446,17 +1446,17 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:50:05.389865001" + "timestamp": "2025-05-07T14:04:42.856027662" }, "stub test fastp": { "content": [ 10, { "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1520,10 +1520,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:50:34.188288253" + "timestamp": "2025-05-07T13:08:02.208707357" }, "stub test fusioncatcher": { "content": [ @@ -1618,7 +1618,7 @@ "ctat-splicing": "0.0.2" }, "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1637,10 +1637,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1649,8 +1649,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1686,11 +1686,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1699,7 +1699,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -2071,9 +2071,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:46:29.001694439" + "timestamp": "2025-05-07T14:01:35.330928392" } -} +} \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 99b8e5e31..69575e5cd 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -13,8 +13,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -35,15 +35,15 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -181,10 +181,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:16:16.851201431" + "timestamp": "2025-05-07T13:56:57.989800452" }, "stub test stringtie": { "content": [ @@ -200,8 +200,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -223,7 +223,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -297,10 +297,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:16:59.945308111" + "timestamp": "2025-05-07T13:28:43.569555821" }, "stub test arriba": { "content": [ @@ -322,8 +322,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -345,7 +345,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -411,10 +411,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:14:09.827324661" + "timestamp": "2025-05-07T13:26:43.570224768" }, "stub test fusioninspector": { "content": [ @@ -436,10 +436,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -448,8 +448,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -474,11 +474,11 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -761,10 +761,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:20:00.302967276" + "timestamp": "2025-05-07T13:30:43.376109569" }, "stub test salmon": { "content": [ @@ -780,8 +780,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -871,10 +871,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:19:13.383274003" + "timestamp": "2025-05-07T13:30:08.850942124" }, "stub test ctatsplicing": { "content": [ @@ -896,8 +896,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -919,11 +919,11 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1077,10 +1077,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:14:53.085896038" + "timestamp": "2025-05-07T13:27:17.26404911" }, "stub test fusionreport": { "content": [ @@ -1103,10 +1103,10 @@ "fusioncatcher": "1.33" }, "FUSIONREPORT": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1115,8 +1115,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1137,15 +1137,15 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1312,17 +1312,17 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:17:44.757543251" + "timestamp": "2025-05-07T13:58:03.351087941" }, "stub test fastp": { "content": [ 13, { "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1337,8 +1337,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1405,10 +1405,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:18:29.048528226" + "timestamp": "2025-05-07T13:29:36.326072757" }, "stub test fusioncatcher": { "content": [ @@ -1431,8 +1431,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1497,10 +1497,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:15:34.335857758" + "timestamp": "2025-05-07T13:27:50.155561081" }, "stub test all": { "content": [ @@ -1522,7 +1522,7 @@ "ctat-splicing": "0.0.2" }, "FASTP": { - "fastp": "0.23.4" + "fastp": "0.24.0" }, "FASTQC": { "fastqc": "0.12.1" @@ -1541,10 +1541,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" + "fusion_report": "2.1.5" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1553,8 +1553,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1587,15 +1587,15 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.14.0" + "STAR-Fusion": "1.15.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -1951,9 +1951,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:13:24.397441064" + "timestamp": "2025-05-07T13:26:09.703953189" } -} +} \ No newline at end of file From 8de41e41debcaef7a6abc40aa6ae8bdf65bb0c72 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 14:42:33 +0200 Subject: [PATCH 501/887] Revert "update snap" This reverts commit a29e06a830fe150e65fc841f8af0c85f06098958. --- tests/test_build.nf.test.snap | 16 ++-- tests/test_stub.nf.test.snap | 124 +++++++++++++------------- tests/test_stub_bam.nf.test.snap | 148 +++++++++++++++---------------- 3 files changed, 144 insertions(+), 144 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index ab452ad38..5c5d08924 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -7,7 +7,7 @@ "arriba_download": "2.4.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -35,11 +35,11 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -220,7 +220,7 @@ "sjdbList.fromGTF.out.tab:md5,8f3e8604b00d4067e4eb80aa476a8113", "sjdbList.out.tab:md5,5d78dd49d5db24ca2c056b7ebe5c2059", "transcriptInfo.tab:md5,b758c0ccaddcf0453bab5905b3cec4a2", - "AnnotFilterRule.pm:md5,f94966013cd0df9624a6dda0b75fefa0", + "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", "_fusion_annot_lib.idx.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "_prot_info_db.ok:md5,d41d8cd98f00b204e9800998ecf8427e", "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -277,9 +277,9 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:33:25.428259571" + "timestamp": "2025-04-23T10:08:10.68706064" } -} \ No newline at end of file +} diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 4ce83763c..7495d02c4 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -13,8 +13,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -38,11 +38,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -51,7 +51,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -208,10 +208,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:03:38.544810125" + "timestamp": "2025-04-23T10:48:48.9071057" }, "stub test stringtie": { "content": [ @@ -227,8 +227,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -258,7 +258,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -348,10 +348,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:04:11.405954818" + "timestamp": "2025-04-23T10:49:24.923946194" }, "stub test arriba": { "content": [ @@ -373,8 +373,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -404,7 +404,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -489,10 +489,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:02:08.078812972" + "timestamp": "2025-04-23T10:47:08.02222829" }, "stub test fusioninspector": { "content": [ @@ -514,10 +514,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -526,8 +526,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -555,7 +555,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -564,7 +564,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -863,10 +863,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:06:10.151871018" + "timestamp": "2025-04-23T10:51:45.508140056" }, "stub test salmon": { "content": [ @@ -979,8 +979,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1005,7 +1005,7 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1014,7 +1014,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -1184,10 +1184,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:02:40.610644223" + "timestamp": "2025-04-23T10:47:44.413622274" }, "stub test fusionreport": { "content": [ @@ -1210,10 +1210,10 @@ "fusioncatcher": "1.33" }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1222,8 +1222,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1247,11 +1247,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1260,7 +1260,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -1446,17 +1446,17 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:04:42.856027662" + "timestamp": "2025-04-23T10:50:05.389865001" }, "stub test fastp": { "content": [ 10, { "FASTP": { - "fastp": "0.24.0" + "fastp": "0.23.4" }, "FASTQC": { "fastqc": "0.12.1" @@ -1520,10 +1520,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:08:02.208707357" + "timestamp": "2025-04-23T10:50:34.188288253" }, "stub test fusioncatcher": { "content": [ @@ -1618,7 +1618,7 @@ "ctat-splicing": "0.0.2" }, "FASTP": { - "fastp": "0.24.0" + "fastp": "0.23.4" }, "FASTQC": { "fastqc": "0.12.1" @@ -1637,10 +1637,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1649,8 +1649,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1686,11 +1686,11 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_ALIGN": { "star": "2.7.11b", @@ -1699,7 +1699,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -2071,9 +2071,9 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T14:01:35.330928392" + "timestamp": "2025-04-23T10:46:29.001694439" } -} \ No newline at end of file +} diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 69575e5cd..99b8e5e31 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -13,8 +13,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -35,15 +35,15 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -181,10 +181,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:56:57.989800452" + "timestamp": "2025-04-23T11:16:16.851201431" }, "stub test stringtie": { "content": [ @@ -200,8 +200,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -223,7 +223,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -297,10 +297,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:28:43.569555821" + "timestamp": "2025-04-23T11:16:59.945308111" }, "stub test arriba": { "content": [ @@ -322,8 +322,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -345,7 +345,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -411,10 +411,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:26:43.570224768" + "timestamp": "2025-04-23T11:14:09.827324661" }, "stub test fusioninspector": { "content": [ @@ -436,10 +436,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -448,8 +448,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -474,11 +474,11 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -761,10 +761,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:30:43.376109569" + "timestamp": "2025-04-23T11:20:00.302967276" }, "stub test salmon": { "content": [ @@ -780,8 +780,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -871,10 +871,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:30:08.850942124" + "timestamp": "2025-04-23T11:19:13.383274003" }, "stub test ctatsplicing": { "content": [ @@ -896,8 +896,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -919,11 +919,11 @@ }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -1077,10 +1077,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:27:17.26404911" + "timestamp": "2025-04-23T11:14:53.085896038" }, "stub test fusionreport": { "content": [ @@ -1103,10 +1103,10 @@ "fusioncatcher": "1.33" }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1115,8 +1115,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1137,15 +1137,15 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "Workflow": { @@ -1312,17 +1312,17 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:58:03.351087941" + "timestamp": "2025-04-23T11:17:44.757543251" }, "stub test fastp": { "content": [ 13, { "FASTP": { - "fastp": "0.24.0" + "fastp": "0.23.4" }, "FASTQC": { "fastqc": "0.12.1" @@ -1337,8 +1337,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1405,10 +1405,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:29:36.326072757" + "timestamp": "2025-04-23T11:18:29.048528226" }, "stub test fusioncatcher": { "content": [ @@ -1431,8 +1431,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1497,10 +1497,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:27:50.155561081" + "timestamp": "2025-04-23T11:15:34.335857758" }, "stub test all": { "content": [ @@ -1522,7 +1522,7 @@ "ctat-splicing": "0.0.2" }, "FASTP": { - "fastp": "0.24.0" + "fastp": "0.23.4" }, "FASTQC": { "fastqc": "0.12.1" @@ -1541,10 +1541,10 @@ "STAR-Fusion": null }, "FUSIONREPORT": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "2.1.5" + "fusion_report": "4.0.0" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1553,8 +1553,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 + "gatk4": "4.5.0.0", + "samtools": "1.19.2" }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1587,15 +1587,15 @@ "samtools": 1.21 }, "STARFUSION": { - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STARFUSION_BUILD": { "wget": "1.21.4", - "STAR-Fusion": "1.15.0" + "STAR-Fusion": "1.14.0" }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.21, + "samtools": 1.2, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -1951,9 +1951,9 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "24.10.5" }, - "timestamp": "2025-05-07T13:26:09.703953189" + "timestamp": "2025-04-23T11:13:24.397441064" } -} \ No newline at end of file +} From 8d4cf869c9d637fc5517749533ec9931acb4e239 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 14:43:22 +0200 Subject: [PATCH 502/887] udpate snaps --- tests/test_build.nf.test.snap | 4 +- tests/test_stub.nf.test.snap | 64 +++++++++++------------ tests/test_stub_bam.nf.test.snap | 90 ++++++++++++++++---------------- 3 files changed, 79 insertions(+), 79 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index db01143fb..ab452ad38 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -39,7 +39,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -280,6 +280,6 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T11:43:30.893014622" + "timestamp": "2025-05-07T14:33:25.428259571" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 4d70e895b..4ce83763c 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -13,8 +13,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -51,7 +51,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -211,7 +211,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T13:06:26.949894702" + "timestamp": "2025-05-07T14:03:38.544810125" }, "stub test stringtie": { "content": [ @@ -227,8 +227,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -258,7 +258,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -348,10 +348,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:49:24.923946194" + "timestamp": "2025-05-07T14:04:11.405954818" }, "stub test arriba": { "content": [ @@ -373,8 +373,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -404,7 +404,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -489,10 +489,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T10:47:08.02222829" + "timestamp": "2025-05-07T14:02:08.078812972" }, "stub test fusioninspector": { "content": [ @@ -526,8 +526,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -564,7 +564,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -866,7 +866,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T13:08:57.754362685" + "timestamp": "2025-05-07T14:06:10.151871018" }, "stub test salmon": { "content": [ @@ -979,8 +979,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1014,7 +1014,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1187,7 +1187,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T13:05:33.800125465" + "timestamp": "2025-05-07T14:02:40.610644223" }, "stub test fusionreport": { "content": [ @@ -1222,8 +1222,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1260,7 +1260,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1449,7 +1449,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T13:07:32.131686727" + "timestamp": "2025-05-07T14:04:42.856027662" }, "stub test fastp": { "content": [ @@ -1649,8 +1649,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1699,7 +1699,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -2074,6 +2074,6 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T13:04:26.194367038" + "timestamp": "2025-05-07T14:01:35.330928392" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index c84fb94ab..69575e5cd 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -13,8 +13,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -43,7 +43,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -184,7 +184,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T10:45:30.913775592" + "timestamp": "2025-05-07T13:56:57.989800452" }, "stub test stringtie": { "content": [ @@ -200,8 +200,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -223,7 +223,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -297,10 +297,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:16:59.945308111" + "timestamp": "2025-05-07T13:28:43.569555821" }, "stub test arriba": { "content": [ @@ -322,8 +322,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -345,7 +345,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -411,10 +411,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:14:09.827324661" + "timestamp": "2025-05-07T13:26:43.570224768" }, "stub test fusioninspector": { "content": [ @@ -448,8 +448,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -478,7 +478,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -764,7 +764,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T10:47:54.208994663" + "timestamp": "2025-05-07T13:30:43.376109569" }, "stub test salmon": { "content": [ @@ -780,8 +780,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -871,10 +871,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:19:13.383274003" + "timestamp": "2025-05-07T13:30:08.850942124" }, "stub test ctatsplicing": { "content": [ @@ -896,8 +896,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -923,7 +923,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1080,7 +1080,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T10:44:30.208342353" + "timestamp": "2025-05-07T13:27:17.26404911" }, "stub test fusionreport": { "content": [ @@ -1115,8 +1115,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1145,7 +1145,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "Workflow": { @@ -1315,7 +1315,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T10:46:25.615179804" + "timestamp": "2025-05-07T13:58:03.351087941" }, "stub test fastp": { "content": [ @@ -1337,8 +1337,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1408,7 +1408,7 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T10:46:52.127766054" + "timestamp": "2025-05-07T13:29:36.326072757" }, "stub test fusioncatcher": { "content": [ @@ -1431,8 +1431,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1497,10 +1497,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-23T11:15:34.335857758" + "timestamp": "2025-05-07T13:27:50.155561081" }, "stub test all": { "content": [ @@ -1553,8 +1553,8 @@ "gatk4": "4.6.1.0" }, "GATK4_MARKDUPLICATES": { - "gatk4": "4.5.0.0", - "samtools": "1.19.2" + "gatk4": "4.6.1.0", + "samtools": 1.21 }, "GENCODE_DOWNLOAD": { "wget": "1.21.4" @@ -1595,7 +1595,7 @@ }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", - "samtools": 1.2, + "samtools": 1.21, "gawk": "5.1.0" }, "STRINGTIE_MERGE": { @@ -1954,6 +1954,6 @@ "nf-test": "0.8.4", "nextflow": "24.10.6" }, - "timestamp": "2025-05-07T10:43:25.04013859" + "timestamp": "2025-05-07T13:26:09.703953189" } } \ No newline at end of file From cd35d33394348404f4f531c9641767d3c9d1fb1f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 15:19:58 +0200 Subject: [PATCH 503/887] update documentation --- CHANGELOG.md | 1 + docs/output.md | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83516b786..12b1ec52a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) - Moved strandedness determination for picard collectrnaseqmetrics into modules.config [#658](https://github.com/nf-core/rnafusion/pull/658) - Using option `--human_gencode_filter` while building STARFusion references for human species [#657](https://github.com/nf-core/rnafusion/pull/657) +- Update fusionreport 4.0.0 that replaces the score of a fusion with a Fusion Indication Index [#667](https://github.com/nf-core/rnafusion/pull/667) ### Changed diff --git a/docs/output.md b/docs/output.md index c9f8170c0..2395eb624 100644 --- a/docs/output.md +++ b/docs/output.md @@ -253,7 +253,7 @@ Please note that fusion-report is executed from fork https://github.com/Clinical
    [Fusion-report](https://github.com/matq007/fusion-report) is a tool for parsing outputs from fusion detection tools. -The score is explained here: . Summary: +The Fusion Indication Index is explained here: . Summary: The weights for databases are as follows: @@ -261,18 +261,18 @@ The weights for databases are as follows: - MITELMAN (50) - FusionGDB2 (0) -The score is calculated using two components: +The Fusion Indication Index FII is calculated using two components: -1. Tool Detection (80% of total score) +1. Tool Detection (50% of total FII) - Calculated as: (number of tools detecting the fusion) / (number of tools actually used) - This reflects how many of the active tools found the fusion -2. Database Hits (20% of total score) +2. Database Hits (50% of total FII) - Based on database matches using weights above - Calculated as: (number of database hits) / (total possible database hits) -Final score = (0.8 × Tool Detection Score) + (0.2 × Database Hits Score) +Final score = (0.5 × Tool Detection Score) + (0.5 × Database Hits Score) ### Salmon @@ -324,7 +324,7 @@ Vcf-collect takes as input the results of fusion-report and fusioninspector. Tha
    -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarizing all samples in your project. Most of the pipeline QC results are visualized in the report and further statistics are available in the report data directory. Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . From 3d2f4d61edd7fa313cf47c9e43dbe53a9ea9f76c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 15:21:11 +0200 Subject: [PATCH 504/887] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34e3932c7..9824ccfc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,7 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the `seq_platform` and `seq_center` fields to the samplesheet. These values can be used to overwrite the value of `--seq_platform` and `--seq_center` on a sample-by-sample basis [#654](https://github.com/nf-core/rnafusion/pull/654) - Moved strandedness determination for picard collectrnaseqmetrics into modules.config [#658](https://github.com/nf-core/rnafusion/pull/658) - Using option `--human_gencode_filter` while building STARFusion references for human species [#657](https://github.com/nf-core/rnafusion/pull/657) -- Update STAR-Fusion to 1.15.0 and using human filtering when species is human [#664](https://github.com/nf-core/rnafusion/pull/664) +- Update STAR-Fusion to 1.15.0 and update nf-core modules [#664](https://github.com/nf-core/rnafusion/pull/664) ### Changed From d33f48e71b005d237bfcb7999427b30f0194b86d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 16:05:37 +0200 Subject: [PATCH 505/887] add Pfam version parameter --- modules/local/starfusion/build/main.nf | 3 ++- modules/local/starfusion/build/meta.yml | 3 +++ nextflow.config | 1 + nextflow_schema.json | 4 ++++ subworkflows/local/build_references/main.nf | 2 +- 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 0d7ab3230..daf296f33 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -13,6 +13,7 @@ process STARFUSION_BUILD { path fusion_annot_lib val dfam_species val dfam_version + val pfam_version output: tuple val(meta), path("ctat_genome_lib_build_dir"), emit: reference @@ -21,7 +22,7 @@ process STARFUSION_BUILD { script: def args = task.ext.args ?: '' """ - wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam37.4/Pfam-A.hmm.gz --no-check-certificate + wget http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam${pfam_version}/Pfam-A.hmm.gz --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3f --no-check-certificate wget https://www.dfam.org/releases/Dfam_${dfam_version}/infrastructure/dfamscan/${dfam_species}_dfam.hmm.h3i --no-check-certificate diff --git a/modules/local/starfusion/build/meta.yml b/modules/local/starfusion/build/meta.yml index 1259f2698..1294e730e 100644 --- a/modules/local/starfusion/build/meta.yml +++ b/modules/local/starfusion/build/meta.yml @@ -30,6 +30,9 @@ input: - dfam_version: type: string description: DNA transposable element database version, required for repeat masking. Values such as '3.4' are accepted (will automatically pull the resources from dfam). + - dfam_version: + type: string + description: Protein families database version, to get domain information. Values such as '37.4' are accepted (will automatically pull the resources from Pfam). output: - reference: diff --git a/nextflow.config b/nextflow.config index 60e9c9815..b89336acd 100644 --- a/nextflow.config +++ b/nextflow.config @@ -33,6 +33,7 @@ params { fusion_annot_lib = "https://github.com/FusionAnnotator/CTAT_HumanFusionLib/releases/download/v0.3.0/fusion_lib.Mar2021.dat.gz" // path to dat.gz CTAT genome lib // TODO: Update to latest with s3 link when available species = "homo_sapiens" dfam_version = '3.8' + pfam_version = '37.4' // Filtering tools_cutoff = 1 diff --git a/nextflow_schema.json b/nextflow_schema.json index be565ef1f..84cf98575 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -364,6 +364,10 @@ "dfam_version": { "type": "string", "description": "Version of dfam to use" + }, + "pfam_version": { + "type": "string", + "description": "Version of pfam to use" } } }, diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index 1767a6123..6858cf894 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -171,7 +171,7 @@ workflow BUILD_REFERENCES { if(!params.fusion_annot_lib) { error("Expected --fusion_annot_lib to be specified when using StarFusion or any tools that depend on it") } - STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species, params.dfam_version) + STARFUSION_BUILD(ch_fasta, ch_gtf, params.fusion_annot_lib, params.species, params.dfam_version, params.pfam_version) ch_versions = ch_versions.mix(STARFUSION_BUILD.out.versions) if (tools.contains("ctatsplicing")) { CTATSPLICING_PREPGENOMELIB( From e5025e4e5e749a4edb951d4059c6f51c0690ab05 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 7 May 2025 20:45:48 +0200 Subject: [PATCH 506/887] update snapshots for module --- modules/local/starfusion/build/meta.yml | 2 +- .../local/starfusion/build/tests/main.nf.test | 6 +++-- .../starfusion/build/tests/main.nf.test.snap | 22 +++++++++---------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/modules/local/starfusion/build/meta.yml b/modules/local/starfusion/build/meta.yml index 1294e730e..bfa0a025a 100644 --- a/modules/local/starfusion/build/meta.yml +++ b/modules/local/starfusion/build/meta.yml @@ -30,7 +30,7 @@ input: - dfam_version: type: string description: DNA transposable element database version, required for repeat masking. Values such as '3.4' are accepted (will automatically pull the resources from dfam). - - dfam_version: + - pfam_version: type: string description: Protein families database version, to get domain information. Values such as '37.4' are accepted (will automatically pull the resources from Pfam). diff --git a/modules/local/starfusion/build/tests/main.nf.test b/modules/local/starfusion/build/tests/main.nf.test index 7a98b8e7c..07777230e 100644 --- a/modules/local/starfusion/build/tests/main.nf.test +++ b/modules/local/starfusion/build/tests/main.nf.test @@ -20,7 +20,8 @@ nextflow_process { input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") input [3] = "homo_sapiens" - input [4] = "3.4" + input [4] = "3.8" + input [5] = "37.4" """ } @@ -125,7 +126,8 @@ nextflow_process { input [2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") input [3] = "homo_sapiens" - input [4] = "3.4" + input [4] = "3.8" + input [5] = "37.4" """ } diff --git a/modules/local/starfusion/build/tests/main.nf.test.snap b/modules/local/starfusion/build/tests/main.nf.test.snap index b647347a1..3e6358d68 100644 --- a/modules/local/starfusion/build/tests/main.nf.test.snap +++ b/modules/local/starfusion/build/tests/main.nf.test.snap @@ -1,7 +1,7 @@ { "STARFUSION_BUILD - human - minigenome": { "content": [ - "AnnotFilterRule.pm:md5,5391fcc58d9c71cd1f0e45668c5ec597", + "AnnotFilterRule.pm:md5,f94966013cd0df9624a6dda0b75fefa0", true, true, "annotfiltrule_cp.ok:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -75,14 +75,14 @@ true, "trans.blast.dat.gz:md5,85ba5ea96c566f751ad83a3e4b8ab128", [ - "versions.yml:md5,4a6ed47cb345f2a5af4d9f12b7918cdb" + "versions.yml:md5,99533491facb961016dafc1d45a8101e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-15T17:34:00.624179533" + "timestamp": "2025-05-07T20:31:12.177376155" }, "STARFUSION_BUILD - human - minigenome - stub": { "content": [ @@ -173,7 +173,7 @@ ] ], "1": [ - "versions.yml:md5,4a6ed47cb345f2a5af4d9f12b7918cdb" + "versions.yml:md5,99533491facb961016dafc1d45a8101e" ], "reference": [ [ @@ -261,14 +261,14 @@ ] ], "versions": [ - "versions.yml:md5,4a6ed47cb345f2a5af4d9f12b7918cdb" + "versions.yml:md5,99533491facb961016dafc1d45a8101e" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.8.4", + "nextflow": "24.10.6" }, - "timestamp": "2025-04-15T17:34:36.490161525" + "timestamp": "2025-05-07T20:31:53.437179641" } -} +} \ No newline at end of file From 1d61985f30a26d46b16d1e6c68fe922df02a7e5d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 8 May 2025 13:47:50 +0200 Subject: [PATCH 507/887] update fusioninspector containers --- modules/local/fusioninspector/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index d89f252ed..dc3e5f692 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/13/139b94a1f10c6e23a8c27eaed1e5a689db978a513d0ee155e74d35f0970814fe/data' : - 'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:c6147971d107ab11'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" input: tuple val(meta), path(reads), path(fusion_list) From 024a4d01b18602198ef8075de46200c02e529042 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 15 May 2025 12:44:05 +0200 Subject: [PATCH 508/887] update starfusion docker container --- modules/local/starfusion/build/main.nf | 2 +- modules/local/starfusion/detect/main.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index daf296f33..5acf81def 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -5,7 +5,7 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c1af244ebcf603cf'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 0bf271541..3b71c194b 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -5,7 +5,7 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c1af244ebcf603cf'}" input: tuple val(meta), path(reads), path(junction) From fcd5418f0518672a7ada43963f0eef2a42bf9851 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 15 May 2025 12:47:25 +0200 Subject: [PATCH 509/887] revert change --- modules/local/fusioninspector/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index dc3e5f692..d89f252ed 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -4,8 +4,8 @@ process FUSIONINSPECTOR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/13/139b94a1f10c6e23a8c27eaed1e5a689db978a513d0ee155e74d35f0970814fe/data' : + 'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:c6147971d107ab11'}" input: tuple val(meta), path(reads), path(fusion_list) From 9ac700f05b5e485c21289f7b681fa7673173955b Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 15 May 2025 12:49:41 +0200 Subject: [PATCH 510/887] fix arguments for fusioninspector --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index deb68ef05..1fb9675b4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -103,7 +103,7 @@ process { ] } - withName: '.*FUSIONINSPECTOR_WORKFLOW:.*:FUSIONINSPECTOR' { + withName: 'FUSIONINSPECTOR' { ext.args = { params.fusioninspector_limitSjdbInsertNsj != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' } ext.args2 = '--annotate --examine_coding_effect' } From efce041ebb2366f8704f39b22a34d4d07b6b1c1a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 15 May 2025 13:09:24 +0200 Subject: [PATCH 511/887] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1446e4127..f3bb09357 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -80,6 +80,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `fusioninspector` - `all` => This will automatically run all of the above tools - Updated all `wget` containers to `conda-forge::wget=1.21.4` [#655](https://github.com/nf-core/rnafusion/pull/655) +- Updated STAR-Fusion container for version 1.15 [#669](https://github.com/nf-core/rnafusion/pull/669) +- Fix bug in argument handling for FusionInspector [#669](https://github.com/nf-core/rnafusion/pull/669) ### Fixed From a524ab1239eeff38688e5734c7d7393efa5802e9 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 15 May 2025 13:16:33 +0200 Subject: [PATCH 512/887] update docker star container --- modules/local/starfusion/build/main.nf | 2 +- modules/local/starfusion/detect/main.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index 5acf81def..daf296f33 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -5,7 +5,7 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c1af244ebcf603cf'}" + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 3b71c194b..0bf271541 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -5,7 +5,7 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c1af244ebcf603cf'}" + 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" input: tuple val(meta), path(reads), path(junction) From dc52347007b8339917514ab51f2899e3c48252a8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 19 May 2025 13:55:45 +0200 Subject: [PATCH 513/887] slight update in tests --- modules/local/fusioninspector/tests/main.nf.test | 8 +++++--- modules/local/fusioninspector/tests/main.nf.test.snap | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index 26a7ca6d9..1b0a837e8 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -25,7 +25,9 @@ nextflow_process { ] input[2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") - input[3] = "human" + input[3] = "homo_sapiens" + input [4] = "3.8" + input [5] = "37.4" """ } } @@ -44,7 +46,7 @@ nextflow_process { file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt") ] ] - input[1] = STARFUSION_BUILD.out.reference.map { it[1] } + input[1] = [[id:'minigenome_refs'],[STARFUSION_BUILD.out.reference.map { it[1] }]] """ } } @@ -128,7 +130,7 @@ nextflow_process { file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt") ] ] - input[1] = [] + input[1] = [[id:'minigenome_refs'],[]] """ } } diff --git a/modules/local/fusioninspector/tests/main.nf.test.snap b/modules/local/fusioninspector/tests/main.nf.test.snap index 6e3f05c2c..7f7749306 100644 --- a/modules/local/fusioninspector/tests/main.nf.test.snap +++ b/modules/local/fusioninspector/tests/main.nf.test.snap @@ -380,9 +380,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "25.04.2" }, - "timestamp": "2024-12-31T13:48:13.020571472" + "timestamp": "2025-05-16T17:16:34.451066" }, "FUSIONINSPECTOR": { "content": [ From 8f0884ab7ecd78c6a97f942a1a7b4bd6271f7826 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 19 May 2025 14:10:16 +0200 Subject: [PATCH 514/887] abridged now contains the coding effect --- modules/local/fusioninspector/main.nf | 1 - subworkflows/local/fusioninspector_workflow.nf | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index d89f252ed..7f1f18278 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -13,7 +13,6 @@ process FUSIONINSPECTOR { output: tuple val(meta), path("*FusionInspector.fusions.tsv") , emit: tsv - tuple val(meta), path("*.coding_effect") , optional:true, emit: tsv_coding_effect tuple val(meta), path("*.gtf") , optional:true, emit: out_gtf tuple val(meta), path("*FusionInspector.log") , emit: log tuple val(meta), path("*html") , emit: html diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow.nf index 754be50cc..f33d2a86f 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow.nf @@ -46,7 +46,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { AGAT_CONVERTSPGFF2TSV(FUSIONINSPECTOR.out.out_gtf) ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) - fusion_data = FUSIONINSPECTOR.out.tsv_coding_effect.join(AGAT_CONVERTSPGFF2TSV.out.tsv).join(fusionreport_out).join(fusionreport_csv) + fusion_data = FUSIONINSPECTOR.out.abridged_tsv.join(AGAT_CONVERTSPGFF2TSV.out.tsv).join(fusionreport_out).join(fusionreport_csv) VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) From 196297a2ebd7de7c8b72f45f927425e0f2e7be20 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 21 May 2025 16:47:02 +0200 Subject: [PATCH 515/887] update test --- .../local/fusioninspector/tests/main.nf.test | 2 +- .../fusioninspector/tests/main.nf.test.snap | 20 +++++++------------ .../fusioninspector/tests/nextflow.config | 3 +-- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/modules/local/fusioninspector/tests/main.nf.test b/modules/local/fusioninspector/tests/main.nf.test index 1b0a837e8..529b14cc5 100644 --- a/modules/local/fusioninspector/tests/main.nf.test +++ b/modules/local/fusioninspector/tests/main.nf.test @@ -46,7 +46,7 @@ nextflow_process { file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt") ] ] - input[1] = [[id:'minigenome_refs'],[STARFUSION_BUILD.out.reference.map { it[1] }]] + input[1] = STARFUSION_BUILD.out.reference """ } } diff --git a/modules/local/fusioninspector/tests/main.nf.test.snap b/modules/local/fusioninspector/tests/main.nf.test.snap index 7f7749306..20c0e710d 100644 --- a/modules/local/fusioninspector/tests/main.nf.test.snap +++ b/modules/local/fusioninspector/tests/main.nf.test.snap @@ -15,9 +15,6 @@ ], "2": [ - - ], - "3": [ [ { "id": "test", @@ -26,7 +23,7 @@ "test.FusionInspector.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "4": [ + "3": [ [ { "id": "test", @@ -35,7 +32,7 @@ "test.fusion_inspector_web.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "5": [ + "4": [ [ { "id": "test", @@ -44,7 +41,7 @@ "test.FusionInspector.fusions.abridged.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -73,7 +70,7 @@ ] ] ], - "7": [ + "6": [ [ { "id": "test", @@ -133,7 +130,7 @@ ] ] ], - "8": [ + "7": [ [ { "id": "test", @@ -186,7 +183,7 @@ ] ] ], - "9": [ + "8": [ "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" ], "abridged_tsv": [ @@ -369,9 +366,6 @@ }, "test.FusionInspector.fusions.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "tsv_coding_effect": [ - ], "versions": [ "versions.yml:md5,ad8d0da5929dfa70794bccf8765ddb23" @@ -382,7 +376,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-05-16T17:16:34.451066" + "timestamp": "2025-05-19T14:11:46.597061" }, "FUSIONINSPECTOR": { "content": [ diff --git a/modules/local/fusioninspector/tests/nextflow.config b/modules/local/fusioninspector/tests/nextflow.config index ca61431b2..1cc66c43e 100644 --- a/modules/local/fusioninspector/tests/nextflow.config +++ b/modules/local/fusioninspector/tests/nextflow.config @@ -1,5 +1,4 @@ process { withName: 'FUSIONINSPECTOR' { - ext.args = '--annotate --examine_coding_effect' - } + ext.args = '--annotate --examine_coding_effect' } } From ef9c99956fb1932280327f540c4f3289fd34f336 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 21 May 2025 16:58:31 +0200 Subject: [PATCH 516/887] update changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3bb09357..7e4688cc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -80,8 +80,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `fusioninspector` - `all` => This will automatically run all of the above tools - Updated all `wget` containers to `conda-forge::wget=1.21.4` [#655](https://github.com/nf-core/rnafusion/pull/655) -- Updated STAR-Fusion container for version 1.15 [#669](https://github.com/nf-core/rnafusion/pull/669) -- Fix bug in argument handling for FusionInspector [#669](https://github.com/nf-core/rnafusion/pull/669) +- Using FusionInspector abridged output (that now contains coding effects) for downstream analysis [#669](https://github.com/nf-core/rnafusion/pull/669) ### Fixed @@ -97,6 +96,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated the input validation to be more strict. This will prevent more errors down the line in the pipeline [#640](https://github.com/nf-core/rnafusion/pull/640) - The `FUSIONINSPECTOR` process will no longer fail when no fusions have been found. [#651](https://github.com/nf-core/rnafusion/pull/651) - Fixed STAR-Fusion build would fail when downloading Pfam and Dfam resources behind SSL. [#653](https://github.com/nf-core/rnafusion/pull/653) +- Fix bug in argument handling for FusionInspector [#669](https://github.com/nf-core/rnafusion/pull/669) + ### Removed From 3aa8243e1670325b9cf31ea8abd1c9b727b5ffa1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 21 May 2025 17:06:54 +0200 Subject: [PATCH 517/887] prettier --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e4688cc7..94c5a7d6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -98,7 +98,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed STAR-Fusion build would fail when downloading Pfam and Dfam resources behind SSL. [#653](https://github.com/nf-core/rnafusion/pull/653) - Fix bug in argument handling for FusionInspector [#669](https://github.com/nf-core/rnafusion/pull/669) - ### Removed - Remove fusionGDB from documentation and fusion-report download stubs [#503](https://github.com/nf-core/rnafusion/pull/503) From 2c9f4b9a19429057996462275979a03a18961f80 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 28 May 2025 13:47:36 +0200 Subject: [PATCH 518/887] add trim_tail_fusioncatcher --- conf/modules.config | 4 ++++ nextflow.config | 1 + nextflow_schema.json | 6 ++++++ .../local/fusioncatcher_workflow/main.nf | 16 +++++++++++++++- workflows/rnafusion.nf | 2 ++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index deb68ef05..5e5a3a3f0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -68,6 +68,10 @@ process { ext.args = { params.trim_tail ? "--trim_tail1 ${params.trim_tail} --trim_tail2 ${params.trim_tail} " : '' } } + withName: 'FASTP_FOR_FUSIONCATCHER' { + ext.args = { params.trim_tail_fusioncatcher ? "--trim_tail1 ${params.trim_tail_fusioncatcher} --trim_tail2 ${params.trim_tail_fusioncatcher} " : '' } + } + withName: 'FASTQC' { ext.args = '--quiet' publishDir = [ diff --git a/nextflow.config b/nextflow.config index d46ef7e22..1c22ae581 100644 --- a/nextflow.config +++ b/nextflow.config @@ -40,6 +40,7 @@ params { // Trimming trim_tail = null + trim_tail_fusioncatcher = null adapter_fasta = [] // Compression diff --git a/nextflow_schema.json b/nextflow_schema.json index 99a45894c..2ee1b201c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -266,6 +266,12 @@ "minimum": 1, "fa_icon": "fas fa-cut" }, + "trim_tail_fusioncatcher": { + "type": "integer", + "description": "The amount of bases to trim at the tail of each read for fusioncatcher, none will be trimmed by default", + "minimum": 1, + "fa_icon": "fas fa-cut" + }, "adapter_fasta": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/fusioncatcher_workflow/main.nf b/subworkflows/local/fusioncatcher_workflow/main.nf index f4f053d2f..b2e5fadd2 100644 --- a/subworkflows/local/fusioncatcher_workflow/main.nf +++ b/subworkflows/local/fusioncatcher_workflow/main.nf @@ -1,4 +1,5 @@ -include { FUSIONCATCHER_FUSIONCATCHER } from '../../../modules/nf-core/fusioncatcher/fusioncatcher/main' +include { FASTP as FASTP_FOR_FUSIONCATCHER } from '../../../modules/nf-core/fastp/main' +include { FUSIONCATCHER_FUSIONCATCHER } from '../../../modules/nf-core/fusioncatcher/fusioncatcher/main' // TODO: Remove fusioncatcher_fusions as parameter. // TODO: remove dummy file. Work with Channel.empty() @@ -7,6 +8,8 @@ include { FUSIONCATCHER_FUSIONCATCHER } from '../../../modules/nf-core/fusioncat workflow FUSIONCATCHER_WORKFLOW { take: reads // channel [ meta, [ fastqs ] ] + fusioncatcher_trim // boolean + adapter_fasta // channel [ path ] fusioncatcher_ref // channel [ meta, path ] fusioncatcher_fusions // path, string @@ -18,6 +21,17 @@ workflow FUSIONCATCHER_WORKFLOW { ch_fusioncatcher_fusions = reads.combine(Channel.value(file(fusioncatcher_fusions, checkIfExists:true))) .map { meta, _reads, fusions -> [ meta, fusions ] } } else { + if (fusioncatcher_trim) { + FASTP_FOR_FUSIONCATCHER( + reads, + adapter_fasta, + false, // discard_trimmed_pass + false, // save_trimmed_fail + false // skip_qc + ) + ch_versions = ch_versions.mix(FASTP_FOR_FUSIONCATCHER.out.versions) + reads = FASTP_FOR_FUSIONCATCHER.out.reads + } FUSIONCATCHER_FUSIONCATCHER ( reads, diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index bda6500af..d9f8d9230 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -257,6 +257,8 @@ workflow RNAFUSION { fusions_created = true FUSIONCATCHER_WORKFLOW ( ch_reads, + params.tools?.contains('sth') ?: false, + params.adapter_fasta, BUILD_REFERENCES.out.fusioncatcher_ref, // channel [ meta, path ] params.fusioncatcher_fusions ) From 6690c15ef108df77763835c3d474a832a5f0450d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 28 May 2025 14:23:51 +0200 Subject: [PATCH 519/887] add fusioncatcher_trim option --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index d9f8d9230..2f5dc15fe 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -257,7 +257,7 @@ workflow RNAFUSION { fusions_created = true FUSIONCATCHER_WORKFLOW ( ch_reads, - params.tools?.contains('sth') ?: false, + params.tools?.contains('fusioncatcher_trim') ?: false, params.adapter_fasta, BUILD_REFERENCES.out.fusioncatcher_ref, // channel [ meta, path ] params.fusioncatcher_fusions From a7da82c9995b9b896c2b63ccbf4f4a62c264686a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 28 May 2025 15:40:57 +0200 Subject: [PATCH 520/887] add fusioncatcher_trim --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 2ee1b201c..56f55d755 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -85,7 +85,7 @@ "type": "string", "description": "Comma-delimited list of tools to run", "fa_icon": "far fa-file-code", - "pattern": "^((arriba|ctatsplicing|fusioncatcher|starfusion|stringtie|fusionreport|fastp|salmon|fusioninspector|all)?,?)*(? Date: Wed, 28 May 2025 16:00:28 +0200 Subject: [PATCH 521/887] add fusioncatcher_trim --- workflows/rnafusion.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 2f5dc15fe..13a6ea157 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -255,9 +255,10 @@ workflow RNAFUSION { def ch_fusioncatcher_fusions = ch_samplesheet.map { it -> [it[0], []] } // Set fusioncatcher fusions to empty by default if(tools.contains("fusioncatcher")) { fusions_created = true + fusioncatcher_trimming = { params.tools?.contains('fusioncatcher_trim') ?: false } FUSIONCATCHER_WORKFLOW ( ch_reads, - params.tools?.contains('fusioncatcher_trim') ?: false, + fusioncatcher_trimming, params.adapter_fasta, BUILD_REFERENCES.out.fusioncatcher_ref, // channel [ meta, path ] params.fusioncatcher_fusions From 8ab02d8f9a54b1de461475bf2b5d83c3ac207a06 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 2 Jun 2025 10:43:36 +0200 Subject: [PATCH 522/887] add publish --- conf/modules.config | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 5e5a3a3f0..6dd391019 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -66,10 +66,20 @@ process { withName: 'FASTP' { ext.args = { params.trim_tail ? "--trim_tail1 ${params.trim_tail} --trim_tail2 ${params.trim_tail} " : '' } + publishDir = [ + path: { "${params.outdir}/fastp" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'FASTP_FOR_FUSIONCATCHER' { ext.args = { params.trim_tail_fusioncatcher ? "--trim_tail1 ${params.trim_tail_fusioncatcher} --trim_tail2 ${params.trim_tail_fusioncatcher} " : '' } + publishDir = [ + path: { "${params.outdir}/fastp_for_fusioncatcher" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'FASTQC' { From 680e03d87f8b1ec6002f9f9ec94fd4de46510697 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 2 Jun 2025 11:20:04 +0200 Subject: [PATCH 523/887] add differentiating prefix --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index 98eb8e89e..17e798cf7 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -75,6 +75,7 @@ process { withName: 'FASTP_FOR_FUSIONCATCHER' { ext.args = { params.trim_tail_fusioncatcher ? "--trim_tail1 ${params.trim_tail_fusioncatcher} --trim_tail2 ${params.trim_tail_fusioncatcher} " : '' } + ext.prefix = { "${meta.id}_trimmed_for_fusioncatcher" } publishDir = [ path: { "${params.outdir}/fastp_for_fusioncatcher" }, mode: params.publish_dir_mode, From f630a2bc4a27d09c4a516d218169265fb0f02b51 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:59:46 +0200 Subject: [PATCH 524/887] try changing the condition --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 13a6ea157..ee970fe9f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -255,7 +255,7 @@ workflow RNAFUSION { def ch_fusioncatcher_fusions = ch_samplesheet.map { it -> [it[0], []] } // Set fusioncatcher fusions to empty by default if(tools.contains("fusioncatcher")) { fusions_created = true - fusioncatcher_trimming = { params.tools?.contains('fusioncatcher_trim') ?: false } + fusioncatcher_trimming = { params.tools.contains('fusioncatcher_trim') ?: false } FUSIONCATCHER_WORKFLOW ( ch_reads, fusioncatcher_trimming, From 37104665e78333a4a0535b6acd344acfada4ef36 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 3 Jun 2025 11:02:43 +0000 Subject: [PATCH 525/887] Template update for nf-core/tools version 3.3.1 --- .editorconfig | 37 ----- .github/CONTRIBUTING.md | 2 +- .github/actions/get-shards/action.yml | 69 +++++++++ .github/actions/nf-test/action.yml | 113 ++++++++++++++ .github/workflows/awsfulltest.yml | 4 +- .github/workflows/awstest.yml | 2 +- .github/workflows/ci.yml | 88 ----------- .github/workflows/clean-up.yml | 2 +- .github/workflows/download_pipeline.yml | 20 +-- .../{fix-linting.yml => fix_linting.yml} | 4 +- .github/workflows/linting.yml | 15 +- .github/workflows/linting_comment.yml | 4 +- .github/workflows/nf-test.yml | 142 ++++++++++++++++++ .github/workflows/release-announcements.yml | 2 +- ...mment.yml => template-version-comment.yml} | 2 +- .nf-core.yml | 2 +- .pre-commit-config.yaml | 26 +++- .prettierrc.yml | 5 + README.md | 7 +- conf/base.config | 5 +- nextflow.config | 17 ++- nf-test.config | 24 +++ ro-crate-metadata.json | 16 +- .../utils_nfcore_rnafusion_pipeline/main.nf | 1 - tests/.nftignore | 10 ++ tests/default.nf.test | 35 +++++ tests/nextflow.config | 12 ++ 27 files changed, 487 insertions(+), 179 deletions(-) delete mode 100644 .editorconfig create mode 100644 .github/actions/get-shards/action.yml create mode 100644 .github/actions/nf-test/action.yml delete mode 100644 .github/workflows/ci.yml rename .github/workflows/{fix-linting.yml => fix_linting.yml} (96%) create mode 100644 .github/workflows/nf-test.yml rename .github/workflows/{template_version_comment.yml => template-version-comment.yml} (95%) create mode 100644 nf-test.config create mode 100644 tests/.nftignore create mode 100644 tests/default.nf.test create mode 100644 tests/nextflow.config diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 6d9b74cc0..000000000 --- a/.editorconfig +++ /dev/null @@ -1,37 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -indent_size = 4 -indent_style = space - -[*.{md,yml,yaml,html,css,scss,js}] -indent_size = 2 - -# These files are edited and tested upstream in nf-core/modules -[/modules/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset -[/subworkflows/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset - -[/assets/email*] -indent_size = unset - -# ignore python and markdown -[*.{py,md}] -indent_style = unset - -# ignore ro-crate metadata files -[**/ro-crate-metadata.json] -insert_final_newline = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b10a5a24f..96b68fa8a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -78,7 +78,7 @@ If you wish to contribute a new step, please use the following coding standards: 5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines schema build` tool). 6. Add sanity checks and validation for all relevant parameters. 7. Perform local tests to validate that the new code works as expected. -8. If applicable, add a new test command in `.github/workflow/ci.yml`. +8. If applicable, add a new test in the `tests` directory. 9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. 10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. diff --git a/.github/actions/get-shards/action.yml b/.github/actions/get-shards/action.yml new file mode 100644 index 000000000..34085279f --- /dev/null +++ b/.github/actions/get-shards/action.yml @@ -0,0 +1,69 @@ +name: "Get number of shards" +description: "Get the number of nf-test shards for the current CI job" +inputs: + max_shards: + description: "Maximum number of shards allowed" + required: true + paths: + description: "Component paths to test" + required: false + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +outputs: + shard: + description: "Array of shard numbers" + value: ${{ steps.shards.outputs.shard }} + total_shards: + description: "Total number of shards" + value: ${{ steps.shards.outputs.total_shards }} +runs: + using: "composite" + steps: + - name: Install nf-test + uses: nf-core/setup-nf-test@v1 + with: + version: ${{ env.NFT_VER }} + - name: Get number of shards + id: shards + shell: bash + run: | + # Run nf-test with dynamic parameter + nftest_output=$(nf-test test \ + --profile +docker \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --dry-run \ + --ci \ + --changed-since HEAD^) || { + echo "nf-test command failed with exit code $?" + echo "Full output: $nftest_output" + exit 1 + } + echo "nf-test dry-run output: $nftest_output" + + # Default values for shard and total_shards + shard="[]" + total_shards=0 + + # Check if there are related tests + if echo "$nftest_output" | grep -q 'No tests to execute'; then + echo "No related tests found." + else + # Extract the number of related tests + number_of_shards=$(echo "$nftest_output" | sed -n 's|.*Executed \([0-9]*\) tests.*|\1|p') + if [[ -n "$number_of_shards" && "$number_of_shards" -gt 0 ]]; then + shards_to_run=$(( $number_of_shards < ${{ inputs.max_shards }} ? $number_of_shards : ${{ inputs.max_shards }} )) + shard=$(seq 1 "$shards_to_run" | jq -R . | jq -c -s .) + total_shards="$shards_to_run" + else + echo "Unexpected output format. Falling back to default values." + fi + fi + + # Write to GitHub Actions outputs + echo "shard=$shard" >> $GITHUB_OUTPUT + echo "total_shards=$total_shards" >> $GITHUB_OUTPUT + + # Debugging output + echo "Final shard array: $shard" + echo "Total number of shards: $total_shards" diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml new file mode 100644 index 000000000..243e78238 --- /dev/null +++ b/.github/actions/nf-test/action.yml @@ -0,0 +1,113 @@ +name: "nf-test Action" +description: "Runs nf-test with common setup steps" +inputs: + profile: + description: "Profile to use" + required: true + shard: + description: "Shard number for this CI job" + required: true + total_shards: + description: "Total number of test shards(NOT the total number of matrix jobs)" + required: true + paths: + description: "Test paths" + required: true + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +runs: + using: "composite" + steps: + - name: Setup Nextflow + uses: nf-core/setup-nextflow@v2 + with: + version: "${{ env.NXF_VERSION }}" + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.13" + + - name: Install nf-test + uses: nf-core/setup-nf-test@v1 + with: + version: "${{ env.NFT_VER }}" + install-pdiff: true + + - name: Setup apptainer + if: contains(inputs.profile, 'singularity') + uses: eWaterCycle/setup-apptainer@main + + - name: Set up Singularity + if: contains(inputs.profile, 'singularity') + shell: bash + run: | + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR + + - name: Conda setup + if: contains(inputs.profile, 'conda') + uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3 + with: + auto-update-conda: true + conda-solver: libmamba + conda-remove-defaults: true + + # TODO Skip failing conda tests and document their failures + # https://github.com/nf-core/modules/issues/7017 + - name: Run nf-test + shell: bash + env: + NFT_DIFF: ${{ env.NFT_DIFF }} + NFT_DIFF_ARGS: ${{ env.NFT_DIFF_ARGS }} + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + run: | + nf-test test \ + --profile=+${{ inputs.profile }} \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --ci \ + --changed-since HEAD^ \ + --verbose \ + --tap=test.tap \ + --shard ${{ inputs.shard }}/${{ inputs.total_shards }} + + # Save the absolute path of the test.tap file to the output + echo "tap_file_path=$(realpath test.tap)" >> $GITHUB_OUTPUT + + - name: Generate test summary + if: always() + shell: bash + run: | + # Add header if it doesn't exist (using a token file to track this) + if [ ! -f ".summary_header" ]; then + echo "# 🚀 nf-test results" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Status | Test Name | Profile | Shard |" >> $GITHUB_STEP_SUMMARY + echo "|:------:|-----------|---------|-------|" >> $GITHUB_STEP_SUMMARY + touch .summary_header + fi + + if [ -f test.tap ]; then + while IFS= read -r line; do + if [[ $line =~ ^ok ]]; then + test_name="${line#ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ✅ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + elif [[ $line =~ ^not\ ok ]]; then + test_name="${line#not ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ❌ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + done < test.tap + else + echo "| ⚠️ | No test results found | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + + - name: Clean up + if: always() + shell: bash + run: | + sudo rm -rf /home/ubuntu/tests/ diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index a733b9c77..1e8772fac 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,7 +14,7 @@ jobs: run-platform: name: Run AWS full tests # run only if the PR is approved by at least 2 reviewers and against the master/main branch or manually triggered - if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' + if: github.repository == 'nf-core/rnafusion' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' || github.event_name == 'release' runs-on: ubuntu-latest steps: - name: Set revision variable @@ -40,7 +40,7 @@ jobs: } profiles: test_full - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: Seqera Platform debug log file path: | diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index d3448f1be..5aa6fa3b8 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -25,7 +25,7 @@ jobs: } profiles: test - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: Seqera Platform debug log file path: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 59b0d7c77..000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: nf-core CI -# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors -on: - push: - branches: - - dev - pull_request: - release: - types: [published] - workflow_dispatch: - -env: - NXF_ANSI_LOG: false - NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity - NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity - -concurrency: - group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" - cancel-in-progress: true - -jobs: - test: - name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" - # Only run on push if this is the nf-core dev branch (merged PRs) - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/rnafusion') }}" - runs-on: ubuntu-latest - strategy: - matrix: - NXF_VER: - - "24.04.2" - - "latest-everything" - profile: - - "conda" - - "docker" - - "singularity" - test_name: - - "test" - isMaster: - - ${{ github.base_ref == 'master' }} - # Exclude conda and singularity on dev - exclude: - - isMaster: false - profile: "conda" - - isMaster: false - profile: "singularity" - steps: - - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - with: - fetch-depth: 0 - - - name: Set up Nextflow - uses: nf-core/setup-nextflow@v2 - with: - version: "${{ matrix.NXF_VER }}" - - - name: Set up Apptainer - if: matrix.profile == 'singularity' - uses: eWaterCycle/setup-apptainer@main - - - name: Set up Singularity - if: matrix.profile == 'singularity' - run: | - mkdir -p $NXF_SINGULARITY_CACHEDIR - mkdir -p $NXF_SINGULARITY_LIBRARYDIR - - - name: Set up Miniconda - if: matrix.profile == 'conda' - uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 - with: - miniconda-version: "latest" - auto-update-conda: true - conda-solver: libmamba - channels: conda-forge,bioconda - - - name: Set up Conda - if: matrix.profile == 'conda' - run: | - echo $(realpath $CONDA)/condabin >> $GITHUB_PATH - echo $(realpath python) >> $GITHUB_PATH - - - name: Clean up Disk space - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" - continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} - run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 0b6b1f272..ac030fd58 100644 --- a/.github/workflows/clean-up.yml +++ b/.github/workflows/clean-up.yml @@ -10,7 +10,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9 + - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9 with: stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index ab06316ea..999bcc382 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -12,14 +12,6 @@ on: required: true default: "dev" pull_request: - types: - - opened - - edited - - synchronize - branches: - - main - - master - pull_request_target: branches: - main - master @@ -52,9 +44,9 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" architecture: "x64" - name: Setup Apptainer @@ -120,6 +112,7 @@ jobs: echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" - name: Compare container image counts + id: count_comparison run: | if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} @@ -132,3 +125,10 @@ jobs: else echo "The pipeline can be downloaded successfully!" fi + + - name: Upload Nextflow logfile for debugging purposes + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: nextflow_logfile.txt + path: .nextflow.log* + include-hidden-files: true diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix_linting.yml similarity index 96% rename from .github/workflows/fix-linting.yml rename to .github/workflows/fix_linting.yml index 1e4ccb869..7304c0f52 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix_linting.yml @@ -32,9 +32,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" - name: Install pre-commit run: pip install pre-commit diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index dbd52d5a2..f2d7d1dd7 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -3,9 +3,6 @@ name: nf-core linting # It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: - push: - branches: - - dev pull_request: release: types: [published] @@ -17,9 +14,9 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Set up Python 3.12 - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" - name: Install pre-commit run: pip install pre-commit @@ -36,13 +33,13 @@ jobs: - name: Install Nextflow uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" architecture: "x64" - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.1.0 + uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml @@ -74,7 +71,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 95b6b6af8..7e8050fb8 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@20319c5641d495c8a52e688b7dc5fada6c3a9fbc # v8 + uses: dawidd6/action-download-artifact@4c1e823582f43b179e2cbb49c3eade4e41f992e2 # v10 with: workflow: linting.yml workflow_conclusion: completed @@ -21,7 +21,7 @@ jobs: run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT - name: Post PR comment - uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ steps.pr_number.outputs.pr_number }} diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml new file mode 100644 index 000000000..f03aea0c0 --- /dev/null +++ b/.github/workflows/nf-test.yml @@ -0,0 +1,142 @@ +name: Run nf-test +on: + push: + paths-ignore: + - "docs/**" + - "**/meta.yml" + - "**/*.md" + - "**/*.png" + - "**/*.svg" + pull_request: + paths-ignore: + - "docs/**" + - "**/meta.yml" + - "**/*.md" + - "**/*.png" + - "**/*.svg" + release: + types: [published] + workflow_dispatch: + +# Cancel if a newer run is started +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NFT_VER: "0.9.2" + NFT_WORKDIR: "~" + NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity + +jobs: + nf-test-changes: + name: nf-test-changes + runs-on: # use self-hosted runners + - runs-on=$-nf-test-changes + - runner=4cpu-linux-x64 + outputs: + shard: ${{ steps.set-shards.outputs.shard }} + total_shards: ${{ steps.set-shards.outputs.total_shards }} + steps: + - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + with: + fetch-depth: 0 + + - name: get number of shards + id: set-shards + uses: ./.github/actions/get-shards + env: + NFT_VER: ${{ env.NFT_VER }} + with: + max_shards: 7 + + - name: debug + run: | + echo ${{ steps.set-shards.outputs.shard }} + echo ${{ steps.set-shards.outputs.total_shards }} + + nf-test: + name: "${{ matrix.profile }} | ${{ matrix.NXF_VER }} | ${{ matrix.shard }}/${{ needs.nf-test-changes.outputs.total_shards }}" + needs: [nf-test-changes] + if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }} + runs-on: # use self-hosted runners + - runs-on=$-nf-test + - runner=4cpu-linux-x64 + strategy: + fail-fast: false + matrix: + shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} + profile: [conda, docker, singularity] + isMain: + - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} + # Exclude conda and singularity on dev + exclude: + - isMain: false + profile: "conda" + - isMain: false + profile: "singularity" + NXF_VER: + - "24.04.2" + - "latest-everything" + env: + NXF_ANSI_LOG: false + TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + with: + fetch-depth: 0 + + - name: Run nf-test + uses: ./.github/actions/nf-test + env: + NFT_DIFF: ${{ env.NFT_DIFF }} + NFT_DIFF_ARGS: ${{ env.NFT_DIFF_ARGS }} + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + with: + profile: ${{ matrix.profile }} + shard: ${{ matrix.shard }} + total_shards: ${{ env.TOTAL_SHARDS }} + confirm-pass: + needs: [nf-test] + if: always() + runs-on: # use self-hosted runners + - runs-on=$-confirm-pass + - runner=2cpu-linux-x64 + steps: + - name: One or more tests failed + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + - name: One or more tests cancelled + if: ${{ contains(needs.*.result, 'cancelled') }} + run: exit 1 + + - name: All tests ok + if: ${{ contains(needs.*.result, 'success') }} + run: exit 0 + + - name: debug-print + if: always() + run: | + echo "::group::DEBUG: `needs` Contents" + echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}" + echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" + echo "::endgroup::" + + - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner + if: always() + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 76a9e67ed..4abaf4843 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -30,7 +30,7 @@ jobs: bsky-post: runs-on: ubuntu-latest steps: - - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.0 + - uses: zentered/bluesky-post-action@4aa83560bb3eac05dbad1e5f221ee339118abdd2 # v0.2.0 with: post: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template-version-comment.yml similarity index 95% rename from .github/workflows/template_version_comment.yml rename to .github/workflows/template-version-comment.yml index 537529bc1..beb5c77fb 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template-version-comment.yml @@ -14,7 +14,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Read template version from .nf-core.yml - uses: nichmor/minimal-read-yaml@v0.0.2 + uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml diff --git a/.nf-core.yml b/.nf-core.yml index 4431e715a..3eb57693e 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,7 +4,7 @@ lint: - .github/PULL_REQUEST_TEMPLATE.md - conf/igenomes.config - conf/igenomes_ignored.config -nf_core_version: 3.2.1 +nf_core_version: 3.3.1 repository_type: pipeline template: author: Martin Proks, Annick Renevey diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1dec86502..9d0b248d3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,10 +4,24 @@ repos: hooks: - id: prettier additional_dependencies: - - prettier@3.2.5 - - - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "3.1.2" + - prettier@3.5.0 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 hooks: - - id: editorconfig-checker - alias: ec + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/nf-core/.*| + subworkflows/nf-core/.*| + .*\.snap$ + )$ + - id: end-of-file-fixer + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/nf-core/.*| + subworkflows/nf-core/.*| + .*\.snap$ + )$ diff --git a/.prettierrc.yml b/.prettierrc.yml index c81f9a766..07dbd8bb9 100644 --- a/.prettierrc.yml +++ b/.prettierrc.yml @@ -1 +1,6 @@ printWidth: 120 +tabWidth: 4 +overrides: + - files: "*.{md,yml,yaml,html,css,scss,js,cff}" + options: + tabWidth: 2 diff --git a/README.md b/README.md index f40e75a67..1bd640313 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,14 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.04.2-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) +[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.1) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) [![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion) -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) ## Introduction @@ -28,7 +29,7 @@ --> + workflows use the "tube map" design for that. See https://nf-co.re/docs/guidelines/graphic_design/workflow_diagrams#examples for examples. --> 1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Usage diff --git a/conf/base.config b/conf/base.config index c0779b554..e8c3525d6 100644 --- a/conf/base.config +++ b/conf/base.config @@ -15,7 +15,7 @@ process { memory = { 6.GB * task.attempt } time = { 4.h * task.attempt } - errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in ((130..145) + 104 + 175) ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' @@ -59,4 +59,7 @@ process { errorStrategy = 'retry' maxRetries = 2 } + withLabel: process_gpu { + ext.use_gpu = { workflow.profile.contains('gpu') } + } } diff --git a/nextflow.config b/nextflow.config index 0322d3a80..c8fe40eab 100644 --- a/nextflow.config +++ b/nextflow.config @@ -160,16 +160,25 @@ profiles { ] } } + gpu { + docker.runOptions = '-u $(id -u):$(id -g) --gpus all' + apptainer.runOptions = '--nv' + singularity.runOptions = '--nv' + } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } } -// Load nf-core custom profiles from different Institutions -includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" +// Load nf-core custom profiles from different institutions + +// If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included. +// Load nf-core/rnafusion custom profiles from different institutions. +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" + // Load nf-core/rnafusion custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs -// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/rnafusion.config" : "/dev/null" +// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/rnafusion.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled @@ -257,7 +266,7 @@ manifest { // Nextflow plugins plugins { - id 'nf-schema@2.2.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 000000000..889df7601 --- /dev/null +++ b/nf-test.config @@ -0,0 +1,24 @@ +config { + // location for all nf-test tests + testsDir "." + + // nf-test directory including temporary files for each test + workDir System.getenv("NFT_WORKDIR") ?: ".nf-test" + + // location of an optional nextflow.config file specific for executing tests + configFile "tests/nextflow.config" + + // ignore tests coming from the nf-core/modules repo + ignore 'modules/nf-core/**/*', 'subworkflows/nf-core/**/*' + + // run all test with defined profile(s) from the main nextflow.config + profile "test" + + // list of filenames or patterns that should be trigger a full test run + triggers 'nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore' + + // load the necessary plugins + plugins { + load "nft-utils@0.0.3" + } +} diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index ccf7d6388..21ffe6a16 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-04-30T12:27:54+00:00", - "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2025-06-03T11:02:37+00:00", + "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.04.2-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was originally written by Martin Proks, Annick Renevey.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#2c818c4f-fbf7-42fa-9200-2b8dc9844428" + "@id": "#b677eda3-711d-4250-b4fa-fc2ec307db84" } ], "name": "nf-core/rnafusion" @@ -137,7 +137,7 @@ } ], "dateCreated": "", - "dateModified": "2025-04-30T12:27:54Z", + "dateModified": "2025-06-03T11:02:37Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": ["nf-core", "nextflow", "fusion", "fusion-genes", "gene-fusion", "rna", "rna-seq"], "license": ["MIT"], @@ -169,11 +169,11 @@ "version": "!>=24.04.2" }, { - "@id": "#2c818c4f-fbf7-42fa-9200-2b8dc9844428", + "@id": "#b677eda3-711d-4250-b4fa-fc2ec307db84", "@type": "TestSuite", "instance": [ { - "@id": "#c6d68ba1-a887-413a-b175-e9947384e9d7" + "@id": "#d7d8d23f-bc32-4572-bb73-a559c46d3773" } ], "mainEntity": { @@ -182,10 +182,10 @@ "name": "Test suite for nf-core/rnafusion" }, { - "@id": "#c6d68ba1-a887-413a-b175-e9947384e9d7", + "@id": "#d7d8d23f-bc32-4572-bb73-a559c46d3773", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/rnafusion", - "resource": "repos/nf-core/rnafusion/actions/workflows/ci.yml", + "resource": "repos/nf-core/rnafusion/actions/workflows/nf-test.yml", "runsOn": { "@id": "https://w3id.org/ro/terms/test#GithubService" }, diff --git a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf index 9ec640a61..0403e6035 100644 --- a/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnafusion_pipeline/main.nf @@ -261,4 +261,3 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } - diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 000000000..c10bc1f11 --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,10 @@ +.DS_Store +multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt +multiqc/multiqc_data/multiqc.log +multiqc/multiqc_data/multiqc_data.json +multiqc/multiqc_data/multiqc_sources.txt +multiqc/multiqc_data/multiqc_software_versions.txt +multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} +multiqc/multiqc_report.html +fastqc/*_fastqc.{html,zip} +pipeline_info/*.{html,json,txt,yml} diff --git a/tests/default.nf.test b/tests/default.nf.test new file mode 100644 index 000000000..0d7279dc0 --- /dev/null +++ b/tests/default.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + tag "pipeline" + + test("-profile test") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_rnafusion_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 000000000..c00c384c5 --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,12 @@ +/* +======================================================================================== + Nextflow config file for running nf-test tests +======================================================================================== +*/ + +// TODO nf-core: Specify any additional parameters here +// Or any resources requirements +params.modules_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' +params.pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/rnafusion' + +aws.client.anonymous = true // fixes S3 access issues on self-hosted runners From 77b107332be9ab9aa7871486bc052537aea26b91 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 3 Jun 2025 13:50:19 +0200 Subject: [PATCH 526/887] update memory --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index 17e798cf7..f4316f431 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -104,6 +104,7 @@ process { withName: 'FUSIONCATCHER_FUSIONCATCHER' { ext.args = {[ + "--Xmx 18g", "--limitSjdbInsertNsj ${params.fusioncatcher_limitSjdbInsertNsj}", "--skip-blat", meta.single_end ? "--single-end" : "", From 8fc4ad97f0a97dd4d18996ed2192cca566d40ee9 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:50:15 +0200 Subject: [PATCH 527/887] change trim condition --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index ee970fe9f..5d2eaa02b 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -255,7 +255,7 @@ workflow RNAFUSION { def ch_fusioncatcher_fusions = ch_samplesheet.map { it -> [it[0], []] } // Set fusioncatcher fusions to empty by default if(tools.contains("fusioncatcher")) { fusions_created = true - fusioncatcher_trimming = { params.tools.contains('fusioncatcher_trim') ?: false } + fusioncatcher_trimming = params.tools.contains('fusioncatcher_trim') ?: false FUSIONCATCHER_WORKFLOW ( ch_reads, fusioncatcher_trimming, From 25b700b61564650488fe026211c0b25a97a1cc80 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 12:58:40 +0200 Subject: [PATCH 528/887] link memory usage with task.memory --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index f4316f431..58cafcbd9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -104,7 +104,7 @@ process { withName: 'FUSIONCATCHER_FUSIONCATCHER' { ext.args = {[ - "--Xmx 18g", + "--Xmx ${task.memory.toGiga()-2}g", "--limitSjdbInsertNsj ${params.fusioncatcher_limitSjdbInsertNsj}", "--skip-blat", meta.single_end ? "--single-end" : "", From c8a1471ef2ccd7f76706efb0a45abb445077cd6f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 13:15:00 +0200 Subject: [PATCH 529/887] update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c5a7d6b..ef6b5a3a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `--star_limit_bam_sort_ram` to set the maximum memory for sorting the BAM files in STAR. [#668](https://github.com/nf-core/rnafusion/pull/668) - Update STAR-Fusion to 1.15.0 and update nf-core modules [#664](https://github.com/nf-core/rnafusion/pull/664) - Update fusionreport 4.0.0 that replaces the score of a fusion with a Fusion Indication Index [#667](https://github.com/nf-core/rnafusion/pull/667) +- Added a extra trimming step for fusioncatcher in case a different read-length is wished for this tool only [#674](https://github.com/nf-core/rnafusion/pull/674) ### Changed @@ -118,6 +119,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | `--stringtie` | `--tools stringtie` | | `--all` | `--tools all` | | | `--fusioncatcher_download_link` | +| | `--tools fusioncatcher_trim` | +| | `--trim_tail_fusioncatcher` | ## v3.0.2 - [2024-04-10] From ee255df1160c05621ade913c22bec3834854e287 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 13:15:12 +0200 Subject: [PATCH 530/887] update contributors --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 809de85f1..c3051ad89 100644 --- a/README.md +++ b/README.md @@ -114,11 +114,13 @@ For more details about the output files and reports, please refer to the nf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick)) We thank the following people for their help in the development of this pipeline: - +- - [Phil Ewels](https://github.com/ewels) - [Rickard Hammarén](https://github.com/Hammarn) - [Alexander Peltzer](https://github.com/apeltzer) - [Praveen Raj](https://github.com/praveenraj2018) +- [Anabella Trigila](https://github.com/atrigila) +- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk) ## Contributions and Support From 867f97e85d436ce6cef1a63ec656ceeef24ce7ec Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 13:15:27 +0200 Subject: [PATCH 531/887] reshuffle memory allocation --- conf/modules.config | 1 - modules/nf-core/fusioncatcher/fusioncatcher/main.nf | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 58cafcbd9..17e798cf7 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -104,7 +104,6 @@ process { withName: 'FUSIONCATCHER_FUSIONCATCHER' { ext.args = {[ - "--Xmx ${task.memory.toGiga()-2}g", "--limitSjdbInsertNsj ${params.fusioncatcher_limitSjdbInsertNsj}", "--skip-blat", meta.single_end ? "--single-end" : "", diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf index 5c2a8f38d..0b9a4ad13 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf +++ b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf @@ -37,7 +37,7 @@ process FUSIONCATCHER_FUSIONCATCHER { --output=. \\ --data=${reference} \\ --threads=${task.cpus} \\ - --Xmx=${avail_mem} \\ + --Xmx=${avail_mem.toGiga()}g \\ ${args} mv final-list_candidate-fusion-genes.txt ${prefix}.fusion-genes.txt From e0d9840fef088e6fcde9a0d6d8c6ca1b1de8be1e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 13:27:42 +0200 Subject: [PATCH 532/887] reshuffle memory allocation --- modules/nf-core/fusioncatcher/fusioncatcher/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf index 0b9a4ad13..bca7ccd98 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf +++ b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf @@ -37,7 +37,7 @@ process FUSIONCATCHER_FUSIONCATCHER { --output=. \\ --data=${reference} \\ --threads=${task.cpus} \\ - --Xmx=${avail_mem.toGiga()}g \\ + --Xmx${avail_mem}M \\ ${args} mv final-list_candidate-fusion-genes.txt ${prefix}.fusion-genes.txt From 2f0bc730bd5dd63e76fc34413dd153fa8e89b197 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 13:35:03 +0200 Subject: [PATCH 533/887] reshuffle memory allocation --- modules/nf-core/fusioncatcher/fusioncatcher/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf index bca7ccd98..3abd90d70 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf +++ b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf @@ -37,7 +37,7 @@ process FUSIONCATCHER_FUSIONCATCHER { --output=. \\ --data=${reference} \\ --threads=${task.cpus} \\ - --Xmx${avail_mem}M \\ + --Xmx=${avail_mem}M \\ ${args} mv final-list_candidate-fusion-genes.txt ${prefix}.fusion-genes.txt From 8b3dd01a1a2b858b07da66b2850f7f59196cf752 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:51:59 +0200 Subject: [PATCH 534/887] update module --- modules.json | 2 +- .../fusioncatcher/fusioncatcher/meta.yml | 62 +++++++++---------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/modules.json b/modules.json index 844a7b83d..b7ce82d85 100644 --- a/modules.json +++ b/modules.json @@ -42,7 +42,7 @@ }, "fusioncatcher/fusioncatcher": { "branch": "master", - "git_sha": "2a227f75f33415f74a884ef8b33555b151e33de9", + "git_sha": "1037205706929921360f57e8042eae6819825e31", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml index ff6647d65..bfd7848ef 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml +++ b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml @@ -37,40 +37,40 @@ input: output: - fusions: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.fusion-genes.txt": - type: file - description: The detected fusions in the input files - pattern: "*.fusion-genes.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.fusion-genes.txt": + type: file + description: The detected fusions in the input files + pattern: "*.fusion-genes.txt" - summary: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.summary.txt": - type: file - description: The generated summary - pattern: "*.summary.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.summary.txt": + type: file + description: The generated summary + pattern: "*.summary.txt" - log: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.log": - type: file - description: The Fusioncatcher log - pattern: "*.log" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.log": + type: file + description: The Fusioncatcher log + pattern: "*.log" - versions: - - "versions.yml": - type: file - description: File containing software versions - pattern: "versions.yml" + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" From c0c95ddcfcbec95ef3113e9b3cec783d5e4152f4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:55:05 +0200 Subject: [PATCH 535/887] prettier --- README.md | 4 +- .../fusioncatcher/fusioncatcher/meta.yml | 62 +++++++++---------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index c3051ad89..92dd1aac9 100644 --- a/README.md +++ b/README.md @@ -113,8 +113,8 @@ For more details about the output files and reports, please refer to the nf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick)) -We thank the following people for their help in the development of this pipeline: -- +## We thank the following people for their help in the development of this pipeline: + - [Phil Ewels](https://github.com/ewels) - [Rickard Hammarén](https://github.com/Hammarn) - [Alexander Peltzer](https://github.com/apeltzer) diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml index bfd7848ef..ff6647d65 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml +++ b/modules/nf-core/fusioncatcher/fusioncatcher/meta.yml @@ -37,40 +37,40 @@ input: output: - fusions: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.fusion-genes.txt": - type: file - description: The detected fusions in the input files - pattern: "*.fusion-genes.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.fusion-genes.txt": + type: file + description: The detected fusions in the input files + pattern: "*.fusion-genes.txt" - summary: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.summary.txt": - type: file - description: The generated summary - pattern: "*.summary.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.summary.txt": + type: file + description: The generated summary + pattern: "*.summary.txt" - log: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*.log": - type: file - description: The Fusioncatcher log - pattern: "*.log" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.log": + type: file + description: The Fusioncatcher log + pattern: "*.log" - versions: - - "versions.yml": - type: file - description: File containing software versions - pattern: "versions.yml" + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" From 732ebddeab95c643e692632992b70c91cc4b62f4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:26:13 +0200 Subject: [PATCH 536/887] update documentation --- docs/output.md | 18 +++++++++++++++++- docs/usage.md | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 2395eb624..de9ab367d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -133,7 +133,7 @@ If multiple libraries or runs have been provided for the same sample in the inpu ### Fastp -If `--trim_fastp` is selected, [fastp](https://github.com/OpenGene/fastp) will filter low quality reads as well as bases at the 5' and 3' ends, trim adapters (automatically detected, but input with parameter `--adapter_fasta` is possible). 3' trimming is also possible via parameter `--trim_tail`. +If `--tools fastp` is present, [fastp](https://github.com/OpenGene/fastp) will filter low quality reads as well as bases at the 5' and 3' ends, trim adapters (automatically detected, but input with parameter `--adapter_fasta` is possible). 3' trimming is also possible via parameter `--trim_tail`.
    Output files @@ -147,6 +147,22 @@ If `--trim_fastp` is selected, [fastp](https://github.com/OpenGene/fastp) will f
    +### Fastp for fusioncatcher + +If `--tools fusioncatcher_trim` is present, [fastp](https://github.com/OpenGene/fastp) will be run again as above. This to potentially shorten the reads fed into fusioncatcher further with `--trim_tail_fusioncatcher` if the reads are above 100 bp. + +
    +Output files + +- `fastp/` + - `_trimmed_for_fusioncatcher_1.fastp.fastq.gz` + - `_trimmed_for_fusioncatcher_2.fastp.fastq.gz` + - `_trimmed_for_fusioncatcher.fastp.html` + - `_trimmed_for_fusioncatcher.fastp.json` + - `_trimmed_for_fusioncatcher.fastp.log` + +
    + ### FastQC
    diff --git a/docs/usage.md b/docs/usage.md index ae5fe8f58..300d9e320 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -268,6 +268,8 @@ nextflow run nf-core/rnafusion \ --adapter_fastq (optional) ``` +The additional fusioncatcher_trim flag in `--tools` will toggle an additional `fastp` process, especially useful is reads are above 100 bp, which is not handled well by fusioncatcher. The parameter `--trim_tail_fusioncatcher` will trim the extra read length from the tails. + #### Filter fusions detected by 2 or more tools ```bash From f0c010865238be32c262f75bfe8f2f82cf60a377 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 6 Jun 2025 09:26:49 +0200 Subject: [PATCH 537/887] Update docs/output.md Co-authored-by: Anabella Trigila <18577080+atrigila@users.noreply.github.com> --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index de9ab367d..ae231e938 100644 --- a/docs/output.md +++ b/docs/output.md @@ -149,7 +149,7 @@ If `--tools fastp` is present, [fastp](https://github.com/OpenGene/fastp) will f ### Fastp for fusioncatcher -If `--tools fusioncatcher_trim` is present, [fastp](https://github.com/OpenGene/fastp) will be run again as above. This to potentially shorten the reads fed into fusioncatcher further with `--trim_tail_fusioncatcher` if the reads are above 100 bp. +If `--tools fusioncatcher_trim` is present, [fastp](https://github.com/OpenGene/fastp) will be run again as above. This is to potentially shorten the reads fed into `fusioncatcher` further with `--trim_tail_fusioncatcher` if the reads are above 100 bp.
    Output files From b6e4c6b764f2933451457e168f0ac9a18b636bcd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 13 Jun 2025 16:37:47 +0200 Subject: [PATCH 538/887] use trim_tail default as 0 --- conf/modules.config | 4 +- nextflow.config | 4 +- .../fusioncatcher_workflow/tests/main.nf.test | 53 + .../tests/main.nf.test.snap | 15 + .../fusionreport_workflow/tests/main.nf.test | 17 +- tests/test_stub.nf.test | 12 +- tests/test_stub.nf.test.snap | 1918 +---------------- 7 files changed, 150 insertions(+), 1873 deletions(-) create mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test create mode 100644 subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index 17e798cf7..f4f84cc65 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -65,7 +65,7 @@ process { } withName: 'FASTP' { - ext.args = { params.trim_tail ? "--trim_tail1 ${params.trim_tail} --trim_tail2 ${params.trim_tail} " : '' } + ext.args = { params.trim_tail > 0 ? "--trim_tail1 ${params.trim_tail} --trim_tail2 ${params.trim_tail} " : '' } publishDir = [ path: { "${params.outdir}/fastp" }, mode: params.publish_dir_mode, @@ -74,7 +74,7 @@ process { } withName: 'FASTP_FOR_FUSIONCATCHER' { - ext.args = { params.trim_tail_fusioncatcher ? "--trim_tail1 ${params.trim_tail_fusioncatcher} --trim_tail2 ${params.trim_tail_fusioncatcher} " : '' } + ext.args = { params.trim_tail_fusioncatcher > 0 ? "--trim_tail1 ${params.trim_tail_fusioncatcher} --trim_tail2 ${params.trim_tail_fusioncatcher} " : '' } ext.prefix = { "${meta.id}_trimmed_for_fusioncatcher" } publishDir = [ path: { "${params.outdir}/fastp_for_fusioncatcher" }, diff --git a/nextflow.config b/nextflow.config index 1c22ae581..9f5536013 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,8 +39,8 @@ params { tools_cutoff = 1 // Trimming - trim_tail = null - trim_tail_fusioncatcher = null + trim_tail = 0 + trim_tail_fusioncatcher = 0 adapter_fasta = [] // Compression diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test new file mode 100644 index 000000000..05d691889 --- /dev/null +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test @@ -0,0 +1,53 @@ +nextflow_workflow { + + name "Test Subworkflow FUSIONCATCHER_WORKFLOW" + script "../main.nf" + workflow "FUSIONCATCHER_WORKFLOW" + + tag "subworkflow" + tag "fusioncatcher_workflow" + tag "fusioncatcher" + + test("FUSIONCATCHER_WORKFLOW - Stub") { + options "-stub" + + when { + workflow { + """ + // Input channels + input[0] = Channel.of( + [ [ id:'test_sample' ], + file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz"), + file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_2.fq.gz") ] + ) + + input[1] = true + + input[2] = [] + + input[3] = [ + [ id:'fusioncatcher_ref' ], + [] + ] + + input[4] = [] + + """ + } + params { + tools = 'fusioncatcher,fusioncatcher_trim' + trim_tail_fusioncatcher = 50 + outdir = "$outputDir" + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.versions + ).match() } + ) + } + } +} diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..2e9553a99 --- /dev/null +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -0,0 +1,15 @@ +{ + "FUSIONCATCHER_WORKFLOW - Stub": { + "content": [ + [ + "versions.yml:md5,24a191a82bb19899f88f6493ad4f1b8c", + "versions.yml:md5,aeee6dd3b4dcf4cb11af80dfa0a7bf72" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.2" + }, + "timestamp": "2025-06-13T16:36:48.833043" + } +} \ No newline at end of file diff --git a/subworkflows/local/fusionreport_workflow/tests/main.nf.test b/subworkflows/local/fusionreport_workflow/tests/main.nf.test index 61aaf023d..18a6c23e4 100644 --- a/subworkflows/local/fusionreport_workflow/tests/main.nf.test +++ b/subworkflows/local/fusionreport_workflow/tests/main.nf.test @@ -11,10 +11,19 @@ nextflow_workflow { test("FUSIONREPORT_WORKFLOW - Full Test") { setup { - run("FUSIONREPORT_DOWNLOAD") { - script "../../../../modules/local/fusionreport/download/main.nf" + run("FUSIONCATCHER_FUSIONCATCHER") { + script "../../../../modules/nf-core/fusioncatcher/detect/main.nf" process { """ + input[0] = [ + [ 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] = [ + [ id:'reference'], + [] + ] """ } } @@ -50,12 +59,12 @@ nextflow_workflow { } params { fusioninspector_only = false - tools_cutoff = 1 + tools_cutoff = 1 arriba = true starfusion = true fusioncatcher = true no_cosmic = true - outdir = "$outputDir" + outdir = "$outputDir" } } diff --git a/tests/test_stub.nf.test b/tests/test_stub.nf.test index 562908322..a76004bf9 100644 --- a/tests/test_stub.nf.test +++ b/tests/test_stub.nf.test @@ -109,7 +109,6 @@ nextflow_pipeline { params { outdir = "$outputDir" tools = "fusioncatcher" - fusion_annot_lib = 'https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz' } } @@ -135,6 +134,17 @@ nextflow_pipeline { } } + test("stub test fusioncatcher") { + + when { + params { + outdir = "$outputDir" + tools = "fusioncatcher,fusioncatcher_trim" + trim_tail_fusioncatcher = 50 + } + } + } + test("stub test starfusion") { when { diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 824773b56..fea7aa0b1 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,357 +1,31 @@ { "stub test starfusion": { "content": [ - 16, - { - "FASTQC": { - "fastqc": "0.12.1" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, - "STARFUSION_BUILD": { - "wget": "1.21.4", - "STAR-Fusion": "1.15.0" - }, - "STAR_ALIGN": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "star", - "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "star/test.Aligned.unsort.out.bam", - "star/test.Chimeric.out.junction", - "star/test.Log.final.out", - "star/test.Log.out", - "star/test.Log.progress.out", - "star/test.ReadsPerGene.out.tab", - "star/test.SJ.out.tab", - "star/test.Signal.UniqueMultiple.str1.out.bg", - "star/test.Signal.UniqueMultiple.str1.out.wig", - "star/test.out.sam", - "star/test.sortedByCoord.out.bam", - "star/test.tab", - "star/test.toTranscriptome.out.bam", - "star/test.unmapped_1.fastq.gz", - "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv" + "pipeline_info" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2025-05-07T14:03:38.544810125" + "timestamp": "2025-06-06T09:52:16.204798" }, "stub test stringtie": { "content": [ - 16, - { - "FASTQC": { - "fastqc": "0.12.1" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "STAR_ALIGN": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STRINGTIE_MERGE": { - "stringtie": "2.2.1" - }, - "STRINGTIE_STRINGTIE": { - "stringtie": "2.2.3" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "star", - "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "star/test.Aligned.unsort.out.bam", - "star/test.Chimeric.out.junction", - "star/test.Log.final.out", - "star/test.Log.out", - "star/test.Log.progress.out", - "star/test.ReadsPerGene.out.tab", - "star/test.SJ.out.tab", - "star/test.Signal.UniqueMultiple.str1.out.bg", - "star/test.Signal.UniqueMultiple.str1.out.wig", - "star/test.out.sam", - "star/test.sortedByCoord.out.bam", - "star/test.tab", - "star/test.toTranscriptome.out.bam", - "star/test.unmapped_1.fastq.gz", - "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam", - "stringtie", - "stringtie/[:]", - "stringtie/[:]/stringtie.merged.gtf", - "stringtie/test.ballgown", - "stringtie/test.coverage.gtf", - "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" + "pipeline_info" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2025-05-07T14:04:11.405954818" + "timestamp": "2025-06-06T09:52:44.54581" }, "stub test arriba": { "content": [ @@ -496,1584 +170,100 @@ }, "stub test fusioninspector": { "content": [ - 22, - { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, - "ARRIBA_VISUALISATION": { - "arriba": "2.4.0" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FUSIONINSPECTOR": { - "STAR-Fusion": null - }, - "FUSIONREPORT": { - "fusion_report": "4.0.0" - }, - "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "HGNC_DOWNLOAD": { - "wget": "1.21.4" - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "STARFUSION_BUILD": { - "wget": "1.21.4", - "STAR-Fusion": "1.15.0" - }, - "STAR_ALIGN": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fusioninspector", - "fusioninspector/IGV_inputs", - "fusioninspector/IGV_inputs/TrinityFusion.bed", - "fusioninspector/IGV_inputs/cytoBand.txt", - "fusioninspector/IGV_inputs/test.ROI.bed", - "fusioninspector/IGV_inputs/test.bed", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/IGV_inputs/test.consolidated.bam", - "fusioninspector/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/IGV_inputs/test.fa", - "fusioninspector/IGV_inputs/test.fa.fai", - "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/IGV_inputs/test.gtf", - "fusioninspector/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/IGV_inputs/test.junction_reads.bam", - "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/IGV_inputs/tracks.json", - "fusioninspector/chckpts_dir", - "fusioninspector/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/chckpts_dir/add_FFPM.ok", - "fusioninspector/chckpts_dir/add_splice_info.ok", - "fusioninspector/chckpts_dir/append_microH_info.ok", - "fusioninspector/chckpts_dir/blast_filter.ok", - "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/chckpts_dir/cp_final.ok", - "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/chckpts_dir/cytoband.ok", - "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/chckpts_dir/final.abridged.ok", - "fusioninspector/chckpts_dir/fusion_annotator.ok", - "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/chckpts_dir/fusion_contigs.ok", - "fusioninspector/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/chckpts_dir/index_consol_bam.ok", - "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/chckpts_dir/microH.dat.ok", - "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/chckpts_dir/run_STAR.ok", - "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/chckpts_dir/span_reads_acc.ok", - "fusioninspector/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/chckpts_dir/test.bed.tabix.ok", - "fusioninspector/fi_workdir", - "fusioninspector/fi_workdir/Log.final.out", - "fusioninspector/fi_workdir/Log.out", - "fusioninspector/fi_workdir/Log.progress.out", - "fusioninspector/fi_workdir/SJ.out.tab", - "fusioninspector/fi_workdir/_STARgenome", - "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/fi_workdir/microH.dat", - "fusioninspector/fi_workdir/pipeliner.456.cmds", - "fusioninspector/fi_workdir/star_align.ok", - "fusioninspector/fi_workdir/test.fa", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", - "fusioninspector/fi_workdir/test.gtf", - "fusioninspector/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", - "fusioninspector/test.FusionInspector.fusions.abridged.tsv", - "fusioninspector/test.FusionInspector.fusions.tsv", - "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.fusion_inspector_web.html", - "fusionreport", - "fusionreport/test", - "fusionreport/test/AAA_BBB.html", - "fusionreport/test/test.fusionreport.tsv", - "fusionreport/test/test.fusionreport_filtered.tsv", - "fusionreport/test/test.fusions.csv", - "fusionreport/test/test.fusions.json", - "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/fusion_report_db", - "references/fusion_report_db/DB-timestamp.txt", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "star", - "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "star/test.Aligned.unsort.out.bam", - "star/test.Chimeric.out.junction", - "star/test.Log.final.out", - "star/test.Log.out", - "star/test.Log.progress.out", - "star/test.ReadsPerGene.out.tab", - "star/test.SJ.out.tab", - "star/test.Signal.UniqueMultiple.str1.out.bg", - "star/test.Signal.UniqueMultiple.str1.out.wig", - "star/test.out.sam", - "star/test.sortedByCoord.out.bam", - "star/test.tab", - "star/test.toTranscriptome.out.bam", - "star/test.unmapped_1.fastq.gz", - "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam" + "pipeline_info" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2025-05-07T14:06:10.151871018" + "timestamp": "2025-06-06T09:54:26.426493" }, "stub test salmon": { "content": [ - 11, - { - "FASTQC": { - "fastqc": "0.12.1" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GFFREAD": { - "gffread": "0.12.7" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "SALMON_INDEX": { - "salmon": "1.10.3" - }, - "SALMON_QUANT": { - "salmon": "1.10.3" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/gffread", - "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", - "references/salmon", - "references/salmon/salmon", - "references/salmon/salmon/complete_ref_lens.bin", - "references/salmon/salmon/ctable.bin", - "references/salmon/salmon/ctg_offsets.bin", - "references/salmon/salmon/duplicate_clusters.tsv", - "references/salmon/salmon/info.json", - "references/salmon/salmon/mphf.bin", - "references/salmon/salmon/pos.bin", - "references/salmon/salmon/pre_indexing.log", - "references/salmon/salmon/rank.bin", - "references/salmon/salmon/refAccumLengths.bin", - "references/salmon/salmon/ref_indexing.log", - "references/salmon/salmon/reflengths.bin", - "references/salmon/salmon/refseq.bin", - "references/salmon/salmon/seq.bin", - "references/salmon/salmon/versionInfo.json", - "salmon", - "salmon/test", - "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json" + "pipeline_info" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.2" }, - "timestamp": "2025-04-23T10:51:03.157975722" + "timestamp": "2025-06-06T09:54:00.321387" }, "stub test ctatsplicing": { "content": [ - 17, - { - "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" - }, - "CTATSPLICING_STARTOCANCERINTRONS": { - "ctat-splicing": "0.0.2" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "STARFUSION_BUILD": { - "wget": "1.21.4", - "STAR-Fusion": "1.15.0" - }, - "STAR_ALIGN": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "ctatsplicing", - "ctatsplicing/test.cancer.introns", - "ctatsplicing/test.cancer.introns.prelim", - "ctatsplicing/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/test.chckpts", - "ctatsplicing/test.ctat-splicing.igv.html", - "ctatsplicing/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/test.igv.tracks", - "ctatsplicing/test.introns", - "ctatsplicing/test.introns.for_IGV.bed", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", - "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", - "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", - "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "star", - "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "star/test.Aligned.unsort.out.bam", - "star/test.Chimeric.out.junction", - "star/test.Log.final.out", - "star/test.Log.out", - "star/test.Log.progress.out", - "star/test.ReadsPerGene.out.tab", - "star/test.SJ.out.tab", - "star/test.Signal.UniqueMultiple.str1.out.bg", - "star/test.Signal.UniqueMultiple.str1.out.wig", - "star/test.out.sam", - "star/test.sortedByCoord.out.bam", - "star/test.tab", - "star/test.toTranscriptome.out.bam", - "star/test.unmapped_1.fastq.gz", - "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam" + "pipeline_info" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2025-05-07T14:02:40.610644223" + "timestamp": "2025-06-06T09:50:52.1988" }, "stub test fusionreport": { "content": [ - 22, - { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FUSIONCATCHER_DOWNLOAD": { - "wget": "1.21.4", - "tar": 1.35 - }, - "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" - }, - "FUSIONREPORT": { - "fusion_report": "4.0.0" - }, - "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, - "STARFUSION_BUILD": { - "wget": "1.21.4", - "STAR-Fusion": "1.15.0" - }, - "STAR_ALIGN": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, - [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fusioncatcher", - "fusioncatcher/test.fusion-genes.txt", - "fusioncatcher/test.log", - "fusioncatcher/test.summary.txt", - "fusionreport", - "fusionreport/test", - "fusionreport/test/AAA_BBB.html", - "fusionreport/test/test.fusionreport.tsv", - "fusionreport/test/test.fusionreport_filtered.tsv", - "fusionreport/test/test.fusions.csv", - "fusionreport/test/test.fusions.json", - "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/fusion_report_db", - "references/fusion_report_db/DB-timestamp.txt", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/fusioncatcher", - "references/fusioncatcher/human_v46", - "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "star", - "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "star/test.Aligned.unsort.out.bam", - "star/test.Chimeric.out.junction", - "star/test.Log.final.out", - "star/test.Log.out", - "star/test.Log.progress.out", - "star/test.ReadsPerGene.out.tab", - "star/test.SJ.out.tab", - "star/test.Signal.UniqueMultiple.str1.out.bg", - "star/test.Signal.UniqueMultiple.str1.out.wig", - "star/test.out.sam", - "star/test.sortedByCoord.out.bam", - "star/test.tab", - "star/test.toTranscriptome.out.bam", - "star/test.unmapped_1.fastq.gz", - "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv" + 0, + null, + [ + "pipeline_info" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2025-05-07T14:04:42.856027662" + "timestamp": "2025-06-06T09:53:09.814376" }, "stub test fastp": { "content": [ - 10, - { - "FASTP": { - "fastp": "0.24.0" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FASTQC_FOR_FASTP": { - "fastqc": "0.12.1" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "fastp", - "fastp/test.fastp.html", - "fastp/test.fastp.json", - "fastp/test.fastp.log", - "fastp/test_1.fastp.fastq.gz", - "fastp/test_2.fastp.fastq.gz", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + "pipeline_info" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2025-05-07T13:08:02.208707357" + "timestamp": "2025-06-06T09:53:35.550144" }, "stub test fusioncatcher": { "content": [ - 10, - { - "FASTQC": { - "fastqc": "0.12.1" - }, - "FUSIONCATCHER_DOWNLOAD": { - "wget": "1.21.4", - "tar": 1.35 - }, - "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fusioncatcher", - "fusioncatcher/test.fusion-genes.txt", - "fusioncatcher/test.log", - "fusioncatcher/test.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/fusioncatcher", - "references/fusioncatcher/human_v46", - "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + "pipeline_info" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.2" }, - "timestamp": "2025-04-23T10:48:13.754663354" + "timestamp": "2025-06-06T09:51:23.745133" }, "stub test all": { "content": [ - 34, - { - "ARRIBA_ARRIBA": { - "arriba": "2.4.0" - }, - "ARRIBA_DOWNLOAD": { - "arriba_download": "2.4.0" - }, - "ARRIBA_VISUALISATION": { - "arriba": "2.4.0" - }, - "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" - }, - "CTATSPLICING_STARTOCANCERINTRONS": { - "ctat-splicing": "0.0.2" - }, - "FASTP": { - "fastp": "0.24.0" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "FASTQC_FOR_FASTP": { - "fastqc": "0.12.1" - }, - "FUSIONCATCHER_DOWNLOAD": { - "wget": "1.21.4", - "tar": 1.35 - }, - "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" - }, - "FUSIONINSPECTOR": { - "STAR-Fusion": null - }, - "FUSIONREPORT": { - "fusion_report": "4.0.0" - }, - "FUSIONREPORT_DOWNLOAD": { - "fusion_report": "4.0.0" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GFFREAD": { - "gffread": "0.12.7" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "HGNC_DOWNLOAD": { - "wget": "1.21.4" - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SALMON_INDEX": { - "salmon": "1.10.3" - }, - "SALMON_QUANT": { - "salmon": "1.10.3" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, - "STARFUSION_BUILD": { - "wget": "1.21.4", - "STAR-Fusion": "1.15.0" - }, - "STAR_ALIGN": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, - "STRINGTIE_MERGE": { - "stringtie": "2.2.1" - }, - "STRINGTIE_STRINGTIE": { - "stringtie": "2.2.3" - }, - "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" - } - }, + 0, + null, [ - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", - "ctatsplicing", - "ctatsplicing/test.cancer.introns", - "ctatsplicing/test.cancer.introns.prelim", - "ctatsplicing/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/test.chckpts", - "ctatsplicing/test.ctat-splicing.igv.html", - "ctatsplicing/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/test.igv.tracks", - "ctatsplicing/test.introns", - "ctatsplicing/test.introns.for_IGV.bed", - "fastp", - "fastp/test.fastp.html", - "fastp/test.fastp.json", - "fastp/test.fastp.log", - "fastp/test_1.fastp.fastq.gz", - "fastp/test_2.fastp.fastq.gz", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", - "fusioncatcher", - "fusioncatcher/test.fusion-genes.txt", - "fusioncatcher/test.log", - "fusioncatcher/test.summary.txt", - "fusioninspector", - "fusioninspector/IGV_inputs", - "fusioninspector/IGV_inputs/TrinityFusion.bed", - "fusioninspector/IGV_inputs/cytoBand.txt", - "fusioninspector/IGV_inputs/test.ROI.bed", - "fusioninspector/IGV_inputs/test.bed", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/IGV_inputs/test.consolidated.bam", - "fusioninspector/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/IGV_inputs/test.fa", - "fusioninspector/IGV_inputs/test.fa.fai", - "fusioninspector/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/IGV_inputs/test.gtf", - "fusioninspector/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/IGV_inputs/test.junction_reads.bam", - "fusioninspector/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/IGV_inputs/tracks.json", - "fusioninspector/chckpts_dir", - "fusioninspector/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/chckpts_dir/add_FFPM.ok", - "fusioninspector/chckpts_dir/add_splice_info.ok", - "fusioninspector/chckpts_dir/append_microH_info.ok", - "fusioninspector/chckpts_dir/blast_filter.ok", - "fusioninspector/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/chckpts_dir/cp_final.ok", - "fusioninspector/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/chckpts_dir/cytoband.ok", - "fusioninspector/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/chckpts_dir/final.abridged.ok", - "fusioninspector/chckpts_dir/fusion_annotator.ok", - "fusioninspector/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/chckpts_dir/fusion_contigs.ok", - "fusioninspector/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/chckpts_dir/index_consol_bam.ok", - "fusioninspector/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/chckpts_dir/microH.dat.ok", - "fusioninspector/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/chckpts_dir/run_STAR.ok", - "fusioninspector/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/chckpts_dir/span_reads_acc.ok", - "fusioninspector/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/chckpts_dir/test.bed.tabix.ok", - "fusioninspector/fi_workdir", - "fusioninspector/fi_workdir/Log.final.out", - "fusioninspector/fi_workdir/Log.out", - "fusioninspector/fi_workdir/Log.progress.out", - "fusioninspector/fi_workdir/SJ.out.tab", - "fusioninspector/fi_workdir/_STARgenome", - "fusioninspector/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/fi_workdir/microH.dat", - "fusioninspector/fi_workdir/pipeliner.456.cmds", - "fusioninspector/fi_workdir/star_align.ok", - "fusioninspector/fi_workdir/test.fa", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", - "fusioninspector/fi_workdir/test.gtf", - "fusioninspector/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/fi_workdir/test.star.sortedByCoord.out.bam.ok", - "fusioninspector/test.FusionInspector.fusions.abridged.tsv", - "fusioninspector/test.FusionInspector.fusions.tsv", - "fusioninspector/test.FusionInspector.log", - "fusioninspector/test.fusion_inspector_web.html", - "fusionreport", - "fusionreport/test", - "fusionreport/test/AAA_BBB.html", - "fusionreport/test/test.fusionreport.tsv", - "fusionreport/test/test.fusionreport_filtered.tsv", - "fusionreport/test/test.fusions.csv", - "fusionreport/test/test.fusions.json", - "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", - "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/arriba", - "references/arriba/blacklist_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/cytobands_hg38_GRCh38_v2.4.0.tsv", - "references/arriba/known_fusions_hg38_GRCh38_v2.4.0.tsv.gz", - "references/arriba/protein_domains_hg38_GRCh38_v2.4.0.gff3", - "references/fusion_report_db", - "references/fusion_report_db/DB-timestamp.txt", - "references/fusion_report_db/cosmic.db", - "references/fusion_report_db/fusion_report.log", - "references/fusion_report_db/fusiongdb2.db", - "references/fusion_report_db/mitelman.db", - "references/fusioncatcher", - "references/fusioncatcher/human_v46", - "references/fusioncatcher/human_v46/ensembl_fully_overlapping_genes.txt", - "references/gencode", - "references/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/gffread", - "references/gffread/Homo_sapiens.GRCh38.46.gtf.fasta", - "references/hgnc", - "references/hgnc/HGNC-DB-timestamp.txt", - "references/hgnc/hgnc_complete_set.txt", - "references/salmon", - "references/salmon/salmon", - "references/salmon/salmon/complete_ref_lens.bin", - "references/salmon/salmon/ctable.bin", - "references/salmon/salmon/ctg_offsets.bin", - "references/salmon/salmon/duplicate_clusters.tsv", - "references/salmon/salmon/info.json", - "references/salmon/salmon/mphf.bin", - "references/salmon/salmon/pos.bin", - "references/salmon/salmon/pre_indexing.log", - "references/salmon/salmon/rank.bin", - "references/salmon/salmon/refAccumLengths.bin", - "references/salmon/salmon/ref_indexing.log", - "references/salmon/salmon/reflengths.bin", - "references/salmon/salmon/refseq.bin", - "references/salmon/salmon/seq.bin", - "references/salmon/salmon/versionInfo.json", - "references/star", - "references/star/Genome", - "references/star/Log.out", - "references/star/SA", - "references/star/SAindex", - "references/star/chrLength.txt", - "references/star/chrName.txt", - "references/star/chrNameLength.txt", - "references/star/chrStart.txt", - "references/star/exonGeTrInfo.tab", - "references/star/exonInfo.tab", - "references/star/geneInfo.tab", - "references/star/genomeParameters.txt", - "references/star/sjdbInfo.txt", - "references/star/sjdbList.fromGTF.out.tab", - "references/star/sjdbList.out.tab", - "references/star/transcriptInfo.tab", - "references/starfusion", - "references/starfusion/ctat_genome_lib_build_dir", - "references/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "references/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "references/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "references/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", - "references/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "references/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "references/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "references/starfusion/ctat_genome_lib_build_dir/refGene.bed", - "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", - "references/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "references/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "references/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "references/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "salmon", - "salmon/test", - "salmon/test_lib_format_counts.json", - "salmon/test_meta_info.json", - "star", - "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "star/test.Aligned.unsort.out.bam", - "star/test.Chimeric.out.junction", - "star/test.Log.final.out", - "star/test.Log.out", - "star/test.Log.progress.out", - "star/test.ReadsPerGene.out.tab", - "star/test.SJ.out.tab", - "star/test.Signal.UniqueMultiple.str1.out.bg", - "star/test.Signal.UniqueMultiple.str1.out.wig", - "star/test.out.sam", - "star/test.sortedByCoord.out.bam", - "star/test.tab", - "star/test.toTranscriptome.out.bam", - "star/test.unmapped_1.fastq.gz", - "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam", - "starfusion", - "starfusion/test.starfusion.abridged.coding_effect.tsv", - "starfusion/test.starfusion.abridged.tsv", - "starfusion/test.starfusion.fusion_predictions.tsv", - "stringtie", - "stringtie/[:]", - "stringtie/[:]/stringtie.merged.gtf", - "stringtie/test.ballgown", - "stringtie/test.coverage.gtf", - "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf" + "pipeline_info" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.6" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2025-05-07T14:01:35.330928392" + "timestamp": "2025-06-06T09:21:44.763989" } -} +} \ No newline at end of file From f147826a70295a4eddf89bbac0c77ccda9a92301 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 16 Jun 2025 11:27:43 +0200 Subject: [PATCH 539/887] update container --- modules/local/starfusion/build/main.nf | 4 ++-- modules/local/starfusion/detect/main.nf | 4 ++-- output.png | Bin 0 -> 348646 bytes output_4.png | Bin 0 -> 284152 bytes output_5.png | Bin 0 -> 240837 bytes 5 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 output.png create mode 100644 output_4.png create mode 100644 output_5.png diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index daf296f33..469756b82 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -4,8 +4,8 @@ process STARFUSION_BUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" + 'docker://trinityctat/starfusion:1.15.0' : + 'trinityctat/starfusion:1.15.0'}" input: tuple val(meta), path(fasta) diff --git a/modules/local/starfusion/detect/main.nf b/modules/local/starfusion/detect/main.nf index 0bf271541..5a5437f90 100644 --- a/modules/local/starfusion/detect/main.nf +++ b/modules/local/starfusion/detect/main.nf @@ -4,8 +4,8 @@ process STARFUSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0a58b9d30f9c72b22135f85746e10596d568c40a7d9634b13e0a0749cacd21b/data' : - 'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:c2bc5374f142ac93'}" + 'docker://trinityctat/starfusion:1.15.0' : + 'trinityctat/starfusion:1.15.0'}" input: tuple val(meta), path(reads), path(junction) diff --git a/output.png b/output.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5ccab0c2732a7f3e13dc1fd823bf5f2f001b0e GIT binary patch literal 348646 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 z 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�JPv z-=u!B1^H93iegpR2@xWL^)XLS;3V!mv|UWY8-UxYS?CSX&9*#?JmdG-y59-EQhwHW z_Dj#>t*4Cs>-0eV9w`@Brf1}m$`MLRctN_^)&a}Ugx;g7Vbj`S_#nGA7wH1-7z6i@ zl|x1Fl=cw@kWAD6R=*!BA0*1c%#9e*yNSoO+PMzw8>Qdyn7a#ygNpOb&EOYOZ(E~Y zo@dkE;K$=OnfD`1Gte>mZ7*m|J&C5vuqlJ^YnNN<6B(`Jl+OM20eud^vz#j3WekaF zRV6zD^?{?1HsJU!m>9gTVbY*3AEum6d ziElp`s(rnAmr(jJ6XgpN&DP-H~Yo36j$LJ*%jTZO?r(MYreug_osMB z|K#Kpe~(*OyRp!%=n~{6{0=*M%dUoOtR+Fx`tC?uM<`3QdNy>#4l?&R*MN#cO?$bI zUBbb|PMDi4`9}6{Myj5yrnjId-_Ph()ONel^`-W2p3R|;yE}(P529WVf$LfkKx=Ab z?)Ll3Z7$`hXwo=Df(aGi=R!wddxgJRxeWgV*U&gRqUr>NxF3rEHjA7d)0POho<0X_ zCBJOb))o|^QVNRLq>T~jAqkXJnvG6SeebY9$RLEz!9iMc0c!6u%rpj`ojZy29FOT( zPCzSN&SY$UJ>1-U6;fj#IVGzeHgDx=nWJ`+{-M@k<28~@R&F-V&{S_dua?3?R|-n1 z1ob;2moW>MIy&w39j#843HrakAl*c`t&DCB^pq5`!x$m02()R^8fkD?pM()GX z&}N?1HDySwCtA(-2$Eyi<%Thu1hnAjH?K{?N0#tnQI#MpZ|yH<^pBk`U4_!89H+J? zd6W#((^KhW+v0l|5<#Win;wdI2 z32L3DL0we`qb}$!`%sLAj}d8b%VeZ?0WLpv1aVF|_QP|dvAm=`#vIn6(yqcK1=bk4 z+sh@9z+83xL?{jyCRvy4le#`h)kr?*F<&F+t{2Q7z0$7zjQR$xPY_zI-~6|CrB%gg z_orgau$iObN`UnjX&jWmkML&CIN2hz*~I&EyyARVGV=Yi;?+OSJ6B~jwDM{>FRb4= zuKg)nam9L-7F}Y~uV(sjumw5(wZu;{-`6leigNiU^vBGSZ6KKv+1U|JB%6z!3H@Oc zzphisn@%2?4dqX7DJJ1?%T_kVEN3&k z;Bpc*HxfS=zS*XR`Ft0t46yyK211|837tW?Jbx`43bpCGFl+fqprL}5x*MZQryY&|Gan@sIg-9pCG#-_tzXy~+026? zt;A61B_+6uiGJ34MPZ*gWl6=ECET3+6H8CqXIg>*O~y_ya=;nkD}e*xm#YH>+*inL zRT%RHhkQ1Trd7H@t!_kTp}N2_|7Z~s@{;4jdArwQ0_EwtVR*lB+!KNv9<*hBu27(2hqyTsDDf?&rnO+ zs%k}tmpDou3QXMcQmlRxsHiX%8Dh!0m0cODfa|=z6xMo$0WRhbRMBS7izX|4$8N@} zH7E}^r~)GG6Eg#|PD9_f9drB&U%Z*Ik6W67#I{AkUy17mcgIy$ZvDk>5G}*@yI**8 zHe6l5TVd~6J86`<4BCB*hLOMX&l&qtdi@D(8UN`Qw)XecIev+v1W+YKs^!lg zVXb=`1I4&XJMU??WwWgY(`ENnny~7_yuLH5tf=~6-?g|KFI3B|iXj_IUE%w!@@e#3 zr3TxcO242R!ubZ$*h=aRLRg*KM*VG~RCyH=F2v8ql)*S{Y@9idf_SU*Gb`mui;vmN zGOW>q^cO_=@NY{CC&G!WC>4b(x#8<9q1Z;A!2~s7 zZ6lYQ3Ae8g*)$~@?_;cO=b-u&@w+s-s#mZ$Q)C3q84+qXzjfQ&O-0)q@wKXJ4SA z3GV?*aWAr5SfV1|1%1;<5pLMLzeh*9Dled#7VO#k3V4ebXgMEHhCig>=Odf-ui=F3%RUwRguZK}H4iQvPOfVHV<+>}--&{7 zfF_#$1#cPKg!7FkOYlsMV_;{;FExaE_`#>I7q>!?Oc+3bVVFF_U8ZOa%=&;roy6!70Ay{40sgCh+L z7+ilkbN^mecCcD)PfbUsZfH2(*m1*b-*!3Rm-|oUA$z$6BB;7oFZTtuz#M}W6@T5#P=We?5dvdw zNzN#}WxpEkIS4^qnX)4i4tDN}gS?=6q^50VG#U~aRW`wcrq$|>^aFp<`Qysj<-n`Q zcc;v?#>i(W?Pr>5K8hEJ)R@)3gKVmZ_M`K+pccP z?(t3&z9qaXCCBnpU_FvYc7lGX56t3|f54+bP_-i|tHK~C`DBPn7Dk*AZhhP*=!bxd z_~G-r5%sd9{WsJmz_oaqhIwe0rvDR6=Sb?UDH@LvaLdvrK}WICo244L@1>2t7UI5@ z#q*T?F?Q&8hc%ov08reo3}uyPv7WjO0gmUBn|9R^ABohYV?{s}1)!>Wt=~Y0I1kJO zs*T8G7bS-p+qq%vl?U1M1PA2C4Q4Ku?JIimlawrM`XPaWM4;oweJ`jA<8z7WS{uRKWRSIOzY11Dm6trNf1t}l?nYNeXJ2Z()MdyU zMCx5fkEh0TzHPy>4N_kv8M~19va(=yPcHai4`86->;xU7WmN5*3dHDgyh$K@$;1+Q zTi66sT})#6q`Z?{qdmHh`BXi~cCHtA(18w+#hx5lzAiXP589>P0M--lvt7eQh=21^v2~t1xzOl_Y=;r`T7#ue`m) z4o;@lPzt7%+f$ro$o%0di%9;~g+lnX`>4pOv_6^9B@b;}_v$Zvvk|`4Tle(Kz%r%M zneq7y_w;Z6zw=l}K`{$XIUEIHioU!XTipFe$RC>l3nd!H#mwu^t*Ya7B-;z&&(Z%v z7qFcX*5a_4-ypS8B(l(y6rdT}!4>e4K}x&}vXcX>t)*f~s&M=A^qiQm!FBk8Wfpw7 z#BVyu;0C2WrBKOyJAewJ-Le{r&AC=YxAsgf72|)RYiV~7Lf`MN*EVWJcUbB0d&vBG z2=lUTnR+?*krA@Fw(-^GuM9g)1!6U4QG1~H=GrYGeLNWaAY3UmRmSojC4LNq10~?s zL=}6F{myrF#eKrWfSvy@Qf@Z11@vsyqD0~Z!6|)pvhsl;vS#@UMAXNrMWn~QI}_bP zOa{){e@RjFvta_wi*xK7Jh0^g%Y@m_dRWUZZ^8O|w%5*Av2Y{O2hxjiO<0venJ8)(pLw-H3Uz2#V_v# zK|P85V4+Cfj!L;vNdkq$K+^x2siS%w`h1v?>sVHX3ig$XxBM1N;2)6me>8VEb~nIY z>rT=(Y9T3H3F@}7pV{$nA^PQrsExPwPxs50`A?L9;~3o!Ds@dDKRWO}PrpiwE;W1E zv)Cz9i_xo|+xF2SfSThD+$B(#$cDfyOzmilf0R3IUgLK)Oz8fH&0;`8I#YEyqkSBo zX#aCN`@J%6oP+L9k8inuOb}$;m-u2o>FlC#FV>4Jvsz3*HWo=Uhu``Fh-?3}w5RBE z1`3JQr2aVtJPLg>@wtD+!u|pB@edAz$xG|x5F2I;yn*^?C%+rMYo%-@m8n%?t^5Nr zlo53gO_IeV_h*ckuRk1DaYzo(%{)xhw0@~rov2}c5wo0; z!{Q9%bRJlc8zzji^8J}2L-AS`j>VTBWei5_vtL_#LS_t3?%D+bEnhws1xua|_i9Zkm3a6N+G-TC|h+2v#X*P)&) z*oJb7Q3b9g_JGaCRx93tA4p!8tPye*QigZ~MeG~U&Ftm~FAL$l-_cGDXT8LnLVK9o z_M#DEC}F1wT@E^CuPj3LUQwTc?*dit%K-z2^~{W|X1)vd3pGo42T z-rFpX^;{YT0Ve}k`s-O|GBep6n)k{TxxMoWc);|n<5Bl7rt`lr_z7F?Zz)g?g8i!0 z%3_scoT%a@I2_lOkh4w9`((NS&r6Cbg|YF z)Z>#Q-0xrQ{h>!(km3)hFcPbXx{( zPoFfX;vUh$QWG>9M6**v8yzN2!1(5_`xE9xmG=BjJ$e8D9Y?*uRK6Dmp{FJyHMQWBoG^|F~ei#L}`N)-RI2&|-37BT#2Odu*+{a(HoSgB!$@;J^%(xVHJ$)AHa2-bbL8VGF5b zQZH}~_;y?^d#5SvA0&6$ho-apg|PUffRVJ#_nrzl~dS=X>7jc&WR5iAFqldOO7dHb%LobF+`x zgouuM!?J!(buXq*^N9)OcW|x(aB+H~B6X=R>8)upcn0B>IKwGYQ4MpP$Q`w>cRjUvnZ>1SmHytL ztRiG{cy!C(G51Xh{Rq5yf>JzdF}GIE7~_3c)ZnGf1y@~#NkcQs z)%S)+vVc#eqvY#=!rL3~UQBSRcgpdu(CR0=HUr;B>v-`LV6-a}&sA8r&4y7FH*S0$ zE9>)fC_%%yhCQhHUQejU;wRRs)Gl@Xj9c z_f0Pm)Y5MJSeo{K)Ii=3<&I!oM=~%`(yy$)nsmN(89(|g(M@vH z_wOvGKa$X31))|@jdc!B+^14{_?C#oqB;l@n)Jho?XBW`@HGAhpM6R?ms+<~{26&* z;(AKsxCW#grKnI-)=2X9ekj-!D!6qFUpUcDm6->nW6IGnpPohH zUme#LUflAUiux!v#;hAgoo9aY2+!<}Cotp0(D4g7Pddz<|J0gmP<>tU#*K^AY=O~# zsA%^^LVB|m?x2=3QXQ zlKUn$y4D2WH8g=LimfX9JI%COfqr%4bVaf~x2^3|4s16J0Rp&7=%@uW9#^}Ducy5sO@ub>W zN5pbd<}F~R1gz*W0+Qjs*!Swx;%d$Wyl3gk5`CTA^L&}q?rcBNyW$5ULmzWVbq#&x zL08TehAvf9N*?|8qP)DuUO&Wrr_R1xL1F&k(XYIuO13REZQJ_LTbjYu^_C$sSzJ@| zcy`u>yCuW#n|a)YevHmHzKOPCy;VgCe?z0Y9~IVfe+48KSv#Xu4GY?{?e&Y~dMY2T zq1+a>ZRwA=;`I&NLQuDA`~<5HU2*5pjp$9<>J5d}(T!g4zu^JFVrf1E}{fFlb}xV@Ii{3h796ytOa0$so*k_6;)xK+t*%KJ&fs< ztvCeyS|6Y6c+<1rOQ08aH-O=r!~8ZOrAW`56>bi98cN=Ku)eocNt*~{7fO62GWZ@g zF0uQs4^E9|z}h!fB#nMQE}_XAbPUcAA7g`W{^?z^%u}gjsd_GXZEn(6{`@N>Y1qJG zniZ#V!R4SIBCA0ACF2Lf3tUI-&9P6-7VDyBVgT_IAi7YDu?Z^+K8I)0TNNSq^Z%c;M+!TZWpa-|8oAHkKXobXNiFBya`}N~Q+1c19EOef@oYDXMZ{ zxt(MTqeON^KS07PpJLY>5h*_A!(!ipFss7KfZ!J(BjJk;tSC}96kTq<|HtlYj!Q0psXAHt^xE!16hZ8;A54v1V20}5aL z*or}>(V%fQWJdrWLfTT9TylKhdV)iN@F-@aSPStR1$m#;Kdh(}&EJb+o|JBEs}~l6 zROCsS$OeOg@-^HcY6%I#8#nJU&EbPka_MMt_O*q!*|ItqMw zL4XNRf#83;7#wojbZ$ShU1kBcOfD1HmQ@yZ#B2(H*+-ufLD32PD3Y+*9rR-|KIQBE ziT(>Icd;!EwV#ud6X)hR-nOxxi}X{o=7g4fvU}x_&S%qLy6P)@drWknU9B*&nzx_V ztQ5|DA_Q+WoW{w(P5;bJf5;O0H~BedMF29|W`*%oE#o~WQ1w=RGn?eD<A>p8pA6ewgSp|G2u<;d+o@Y?&Pm=-!H{hIJ*6;6 zm>k373H^syRmhrjG{e#nu#vF>2W~7a%fdqVLPWpbqLfdxNcKjJ>B9|vs%v~d@cZXa z1P(zm80i*jlgLp263Gw&jFI3G=e|F3PEg_Mc6B|mA1jztx>8GQU?1!>{g&fihg(28 zFKoeAF;QUcecm}vMTgOgb@?*IC;9iG!r_G%6SdyacGMr`?hm+hbQkT4_TVc%3_%ME z3xj1yJwtx|;^5$Xs160AJ@dosQd7?p{~bx73-=kguZCLa{DCYO2whJ~JVkte(Yl~# zzwt&`vb#M%Q|kxO@fL_Z*tYlA=c%LUFWrdynm*Hl%Rv2R;i+*9?4~M*M;yf*$aK z5BdA94_j%Q%Z;DGhj8}(^9QW~(l)Cuxy`(TgK6jU0-v$teG}1ty65mEnHU;&BtRjn z*3+!UI6HiMiLey=mc(E&u5#f1Z?=;i<9`9%FarUK0jF**Haz7S+*{ROY_w}~EKU$}t=bujGAnQrov zdqmq`Tw>4jT!O{}L4r?|d-=MOa)BMs8M>Dsyrmg4>$HGxU31n7yLq)~w^oSDMpwS| z#I2UZR-NnOS+7bRb!6rLTUMg(5a%PXQ2q$ZaMf6(lf%Cd8+MC^Yk}R39rDATgoHX$ z#gnwWnPj;>lIy#imd~1nF0#H9Q{zuXHk7s`%^@eMYxnJ1u7sSVNSL;EnMhK>Le%Q3 zs*c^8B!o>UAf710_X?7uRu$S(&@fso&_^fV#`?;bm?Lq}N4Ph<+XlIq-<9C$_6ZsV zdydwZMc3={e@hEs_on3VkLd7!)lX0L@2IbHd;g(RK}?OkG4_t>wH(b3EuP~KD^V4< z2MK28mT!+ml;yfA931UINtNMNv0NB#;#{G}ONOnn{I3-VGuhK;DrE>W^hXSKjrMLh zRn!v&qTUQX(|g(r(9DS?t_z`7MQ0g)fB&xx}B(hcD0)9)S^@Y3?dv?`f;6zma- z3eteEaKFPjTei~%x2o3D0Mbm9$SgKwmk~aI04C(TBOA|~4S+8r*7>2{A}{L7d!%F=Xg%p*QZwetvo%) zcB)eLl31CwW|Z`lpr49%Y0q~yWi$Jjo;u(rv+-j!NL$iC#Nh<`NC$0R&QWXCrt%zCXd$_hJJ3^=gBa1D;fZyb1dJ%LXg0fp{h*-g9MKt21Rnm9 zM3{I!HC#pZTFmy66xyF($^0p$xP8BvlKOQuiKj@ zY|s0I9bdUjp#XyE#`m`y+dy2G-!<;eB1eo|;UzIX^x}JyF>SLAnVk16=kq{6!CMA1 z=oEmyTi&uf2N>V+1wX1KRW)=EcawIOlfq-uY=73a^;4od`SRH^;6hvWZ#t)J*eE$NtWVX3N@|JrT4yIG)U2#=a}`=t507EzEypY0n>|S0C=OKfe1$^iIrn1*WpH(#fBWhDKF=hHmu% z3ZILm-dPG@UpU&q?=$=CK*RKV#2q`{J32Uw(a73goB!M;CxAyRu>}cbYr*$(wk2$< zm&Q|Plu{;%1`y0IJ~AxqpZ=3F5c78e%1~3`wP!PM&huzRqZmvE3Q?b@ z3F^EsXHd|nHWm5;o_%H$ipmS(>)u5**^FSLtLDIlRb1Y9)WA@pXIdeNTFK#Pb@eekw zhFrPTp&#KvxxdqI#gO&sXH@UF0^ODBv@|tUB8Q)8P>>8lJyB33;R{@8ls|52aIc;~=H}n@k+yG(e@(x1F z8B$>7K%y3|Y<`{@1cDsKsjyUclm#DBP|1}Z`w#dKu0!hzN@jOT^RW14{{NUv&nweP zoHp$^Cgxe%;{RZErupx|gjUPF<;4b#7klR7pO!8B6$~Xf%Q=f8cZ2ETNB77%W-e|? zdU+j?r{<313l$(XQ&9kE?~Hyw(woJrNhIU22qsl@H`%i|Yd9%dSAoi-gqfCNCSoxZ zvT{x5{(li;*J4zS-;M)uv??<|xPZO(mHRg7n5F{8a3o*`Ob7R_kwQRDb=L14Bfg(d z!WbFceGV&tn}~&pSxu>6pf_L38qju5M;%H1U(c--SBsAJRX9kK@CQHr6*z6w(uYCv ztBgUsy;p)CBUg9XSIrQJDkJLFL^I))EL{z((5JLd>nXwtqe)HJQnCE<*Kyv+1GQLa zt@T16m+VDp`4rEd*pJmA+cz)*+w_YXeRQ<_&YRYkj0mF7fC3URx*v>L!4y9c#HiqG zs#w@O6^^=D(yLP|RtfA9c2&z%&cu_Ayt>5$F?A5>iUlcpfNW7QjGicRcD7j z9avWeDJV;FH=ud=&aO9yi2iAaZHYI`BmQD zW8^3DN-C0AtGuH#K32bD+VV0-c=dRitaIW}K8TYTHD()DT7<>*pu&&MOg0)F=2BCe zy`muVcS&`72oavp>)NNbn8~Ux4r6T2-4MROXgpxgR(;AURCw`{F?fC8J zsy5@bnE0@9wWpgsFSzz-s!QG#P$l#4fYOPZOujd8Y>bM&&lT{J)dcp_`~@Q zAt$7+9>YQX_NiEj))&qfu70)960oBXqHJaJ#|;h7y1Y`^Y^#5LOqyNtL)mCjDod|Q zES9j!4x1SN+%((1`&^F?_to*)ZZNib=>$|g_Z6Q?XCTu^H16FpCFzX;sj5~2Y5WfL zNSq{d**m?T{?E1!UN&xCC(oD??_ViZ64cUd2>tWwv`bqUBUohXkjb_s7#c|!+LTaD z`40CDEvIh@g5fd%|EJK>5lTFe#i8t-3drr}-=k@bhS9AyFb;~~_p5<5dqk8~D5)H_ zSXIDWes`nfaqCR>rg14I=TB}P=BvL7D4+=_;b*w$qyps*KGB%A>6FHKLJqT4)s=P| zwfwSP#iq}>kRk3)frty0dGXejjl@mO4D+pB-S^JLhfL9q1(WBmB3XFoutPXbOP;^f zkR2v4|8$sWkQngAwMX3rudqp{TK9Owv*0=Gi_LO#)-C@7ANBZvCzSG+jj;_J%$(1S z!CNw36i!*w0Y`y%aW~#9?7n0glRfSG7mBm|R#JMrTM*p_!+nJ!AD1Y*W%+X^pUFfNHa6b%yon71 zn!NB+*Qf_k7NVk}oM-ohBND|Wm4cOHyj-xsqF?p}=jy(>p_%kPI%XyRR-c} zGM0hyAOth5UZ>B!`P5Dqg3+|!N@zh3iW?xA8ldeZvUd5p(HrY?3}NiUz`&Y|rfO{K zlkwy2ujvOm_yRd}5d1yupL^I`#<7>L4Zp@@51=@)yn%%Mhr`qU>JKR!26BtSJVQA_R{m+iqH zBcIk$ke~n3qFZtCx)xE9VeqM*$LI#oDW75`Az`4(sp~zf6fL|HC|tQ(CL~AIfV5ZH z@0*KHmg3R{-(fW=RYp{?jhj{H9c3nPGUS)Pn{Wf6D{132EA8c zu{BXXV@SC}4+s-dV$Sw^NlKTaImyaP&hhrQ9fMjJdn?$iDzvXg{z}Zn8cs(^5@1sJ&QBErOLX9&Eue}6ZYc@ zB&Rd$-k0Z7r&8Z3&DmgPA;!Z!-B7s;_v94j`WlKhFH@i2J?amz#6iNi@^?Hv_RAsp zJ406Oh>Rl(hYhRJmmDtb-5?y^yk$El%^SJg@4_v`02XJlTyRHue^=Gf#BH29jL z9nstK9-Kr>D=QEA%j;pY7z^?I{k5$0Qzym z_QQz5P$1r*-&<8a_&HqZBI?6N8X9u7B=*$bQv*A`$o`a6xcq*SwtkFsU%T}h;pUcO zK_gW`-AAG)LDI8+uT@gF*CL4=jHv0~O5&PZNFn)nfD{I5e2hgcw~l{4-ox+$dr6EG zOKvsNQ_eYyKO$matNojSwqb23(}D|cXQ(PWRzec@Pe{Q2O$okX6iB2$elBvZS=|-P z6kJr_|CnOWMlI$%gD9Hh?2DKuTz)|qzx8s8U%EC`>jYnJZ9g+lo?5gnka=r7mQe;5 zxwcde<=z+s&z-*nB>_h=mSOHl-IYQ=C3OQl?NuLC(AC2?(f;+OSswZ%rUKu%_t69DJo_qM07L%Z8C3EvuG|c5+fw&r{YUl$cH-+K z{JSQPWeX6L4T=nM;$-@DMf03T9ZyckF>5@y%m)5?h%so#%=^Di6{mcJhdX}VEb8)D ze)D}IK0mQ1DRg>@YV8O4Z#eQk4?-Bj&B#p^*wj zER{NLdy;nE^|Nk8(9_d^=4`U18XvX)G&(`#>Sk1j36nocEk_oBZYJP;HH9k;aXpms zm*Ve86#wJf!mXlA`ZhNBYSN`FmZkkCtU3NV1^tD-YW^o|5Mf^R>hUTGj{iq66y`J1V-bQ*tVqw;z-dWFwvJ+M;h9uTl1x z7dA*lLK}}U&Qg2{)CWy`_oRi2>xlJ6Dq`hvd;hZGEBCJYqktYMo%l*6+XsygQlH)p z{Nit_c4wq}6lt1Op~fL(Lz3g>>Wx=CrI}?`O10?aQr)G`a&NF=jbGrk?w4`*Dz-kB zG%pIk7;>_>JPp%>QZSBU@){Mk8@1V+7S_H!pY_aI;4v2Vzy_*bdU^@&7b3TUh7$?U zDB`CCSsB?Fs+IzU7ardN*2{9Blibp_&=9QPK&$ zZ|lRAl;AXCB)RK1g`hl?f^as9^vX^=%yWWrV91V{JEkIi(fy)AQQSY>7^aI@5N0PKtK$=>1prapTFO2`$Y<=QO*?4 z6{sHG2XgG5%2c$|XiS3R9h04qZ<~DSIm|#EvNm7kivBx*TY!My*Q>`1p7VYY)zF(= z!Fa3X+)=+RZj#ouuLtA7z&4qVzGiIV`Ol{+fvs-9yvo@vyQ*Intg1Jg#KSt5oXfL| z=zJTI9?%F0vidS71NAldT(lL|Q`0A`8eb?!OYt$`J*B4B!>SmbDu~gQ9q-*JIJZqY zW%#dND&a)&|5G@qTakTh&MpMu(&;9)7GRD4LgV!7hV3xWR!FFb?Y$C7f9LsQ^r9QM zY!x!U;agZ!xP7n)D5?^}GZlF|M>zGcYEXJ&2EhY+#C;0dbV%Hr^}HP`RCG^sU|yGzrYz z+&5yQ7=vz^hc&c|hmV`GkK%=#A+4X^!tD9-8XLZoBRhSvP008$SVFoOOX@wHXePo2 zlTe^PU(eHLN6VWg8*cX>$a^;d*P5QKH_58xupBQmuXXImzA^9w}3&kkdo16%7W_J;c{f3$lpXrS4BR7Z6&}NT4+<%iuGmcc6P z4MDq@kGY7Op$z``(T&Gy13YL8Hpyt2Yi)u_$B}&fn99q4-jS2MZJfMgGxN0fyZ{rx z?(*tZ!RF@CdR{VlpCaUgCo*)AaP`(#E?*WT>eiYF9_Um|Rz2I5zh>)vUwKHxaurzF zRM+j+QHvnZ2^mwI*)GCB9PJTyLpUBkuD?IJ_RPu-cO}xc;J5yAHs@&&M%6SpA#PWQ zhRHBzH7bx_tBgPN_m``w5t+DZ5uMo@gk*fXdaG(Z(neO&9&aE~2Uugl<;Nk(sY-GE zzrK9+czhZ_V}g6OSH=n_B3Y)4V$oBb+xxq-i6Llh8%8ZFqLt9K$dt6R9+am>a(P7# zIU;r*rv`SzcFg$PunQZ6*wlmKvo4l6k}tDG31#cx+p7{ONt<_h&8T1#{EsQXc=eFZ z+wJyK#69{`%pCXOgMlHBcmOC5igB`tPp^^)Z1H~t+`n#n3sr|Kir1OrS%FxYy3?~{ z+tDE81_5j>##m#9XQkigi}PlUpA;|)R@EP>-1=KUuvlluOtScceBfXBSX6xF<`^;? zv&YXci9+nMde5=~nKTQMMPEoO(sz}QW0j#};WEI;vWce|t~|I-JN>!@ZDkztX{mV#v}X zLC_}8kQFm|z78kR{a00(Nd}05ll9JA5<$0%v)1#0?`0Vo8QMRMVP#^8O=inf$yV8Y zUOCP6X;@j&uQWQGTb|5KPxlnbCGkOyX35V1bB3p(M+ZWss-@TP7_gM|nEMHHWg=mj zzuMrhVl4ov3b!%G^@X$djMU40kRm34Y?n`9K$w}Z(0C{>_ZaM4$j-TPjeou5@N{(0 zzRQ6QB%ytAb1KT75#rOwc*0^(RJQA#iH-3-PWy@|$Ib%q(bH2R+ z48YE>C8@Cb{VqxD%0wDaTnQSl0;USNzeYh`?D%@;k#S4cr3{l!0(O) zYHdK7GKDbiA)k})pR-uFG#A=_yd`!51kmwt99;pjU;Us5N0kR>PAR_ZZT(`!f(a1n zSD3uV5A&0>-I-;iT9v3+(<8ls3nZc-*PQ_KT;rO?;Gs_& zkgzVd8hhOs4y8X@3s6D7gA`iUoIrwUBa2CVdHOHbQc{#dk%gCTWU=*T3@hFGJbIab z&-n}J@(blbqqy0e@P{PUS}=4Ludw|1a#;X_kUnB3uwsV+v_S^Iitatq-`}6XZ9)(2 zl&dA{AxH9{O8390^XT3N#O-i`-x14Yjap-IUh=db;4k?eg6R3nf{udA>_w3z_A(i; zYQLnD;suhwSPG9MF8A@{1opwVWk~PDyH>`!82pKb4AHl65KR$HepyU}f)DZ~iOqhHf}jeuy}-t{GAu1Wa5z^mhP@IQeUMACG)Thp6vX z0jCGvj~@ugho^4z4TYbmkwbA1fbw_sWZ>VAKk!0h^y5xpxsW-_R#?)kES5bz$yB~v z;%lq6t`DOst06^8qaSB)Vz^6_6}lNGU5)cy`<>u}|AMpY_fOH%1x>B!R)8kR28?~5 zuWzA<$imD~Dyf<@JqVqH`ULq(K5iQDifsQ_3R;n1ffoHr!8sZ%Xt38>^(Rixj{V5c zA&Yf!=q97mkNaiow%#Yet#ID0ZCU!i_01DPLMe=UoI^y;{hhZDQ7w<7q&g>_vD9f=!og-O7pB%S2(=)JU(WHwDMb-$og ze-OSx14Ze&!%l~I@^7oPhwsJm#5cuo-<~a>g7l)nyu#G+!E})YUqL0-v>L)EG+!J5 z149iv(QW3i+BoqY8%||TM1HJX41T*j_x2xJnrF}ugR{7yHHy7uU%b&-9)ZQ^CT9Tj z%dyA~@MbX{rjMBqWIkJd!BzLg=3q34>oqVKI$_e_iy`>1#1g(|>buL*7EH(H(2D0H z0*H3J^&FwnZyS+fr)Fs>K{J2C8ZF2`FLMk-zdoC0Mb^0CY-GWzBkwsVE<`v+KaZhF zZD(B;xOx1ydYYEo`Wh5`wL#rB?G}suZE|{iTM5+?F^oF3yoshsdcft0pNsXgD{J^J z#dOm8g5@YUx3zkzbpDHd&m2-meIzI>9=p}D3Hxks_9kaq|KW#tbamU3d|76&6-x8t z(z4sLsWjyRDwIm}LuM}WVE`rcl-ZXQe*d@9ydCIXw~b{-U{@29$d{#g?i3V{%Mynlh*)(0|Bp5@R;(TuM;yTX?W&4vJGvR#XbdcVmfjB&3;Pazq-h9TU~O<=u` zK`kPW{MQ7{E-aaHC8gJ*6z$tA7t$Vd`}%?#|CSjfJ*6>wi8}>~(Xc~FbNYIzkt&In zFN<)XP^Ez;RjKdfZ9+-4`u=XMHZ-d-dDFFDabV zE5d4~gxz7S&96EW#B$JuuQ6Wkt6%ODNP6fnwUiXI`CSkePRX1wA|;y~H#s_ZaX}iYKuR&doK6>0d9mO@Xl!HD3h8kylGs+X-fItB@9L8bJqHaMYr}KnJ-DU9i5| z?%$)#8Y6#nn=|vi_?Wa@wK%y#V$oN?zyTTZ8lav!i}Qmc98iVCN_dKHl!+zq_BMo` z5CAW*H@);fo3?;#bJ)5BMQTdsX*c3MsejzS=4mI{qV+%R@o9|7{G4~Re znrs>i$LGigzL@}Ba60LdNuf0DcV-ZA27WYM>TdtC%BYi5T+Tol6WPZMM&z)(aw6A1 zEaYU`5m8|uPglQLFG$2P^e@#Bf#BDFd9M5HGSt>OvYtP~5hH(LpGY;dn%2z%s!X}- z1CF<{%X%_+NUO^Ql&z?c!;G2IyrdHU1#Zl7n}{~N)6^{d-Ql1YWo<{c(|;5-{ZB)I zXnbXvOunep`03CRCLb5RDje}H^7$Y#ZCNR&qFY;thM26mF*~18$0UlAKypnm8RWVYxY!GsQRofE4h=-9*eeN=W!8pp z_4#h_JY5DU(G4coUox11(bm&uhcv=fr=lZo8l%qz@L>6Y-qJ27&`kxikb@jbfh83~ zhz6>I1@$O6zYQn`W81AJm0;kIsq}bVc=Ki6ZUED%#gFkb!OUNT2jz-m6Ad{b&qe&IQd|`{40X_GM@xwkDJv(gP0PVd*jOo%6ey!?7W-a$ zju*8os4spfaowa|Ljrr8s=}Kr{*~r>%v1D!&GP}vPm(MnkvPu@=NKtY*RH;jcHPUF z<@}1>*Ai^BabM|O@5N&oqZOQ8g~H1luxGP4x{^2aH7~e`N62R<@8x3Pt_hc-vxU-^1)3>Yb!iz8J7W>ZrLg=KNhe zCobWj!=9>@l~b8w-iT}au_C9IcmbM89v&;fOKgL+xx+8%CNOS8#FjcX;CYW4|H|x^ zx(&!?pbNqK(?&=0cXwNERM5-S1|kM;OH6$a(JJ+ikSSVmNy_Wt%v`^BST4t+A@MuE z18C&9`JWrXt?~5tV`7GCkE#jpr_4&7QYQxN>;@`qy2{HV>CwMV^&X&C;{W0AS|_VC&}M~M{vFjs_rHRtjsTh_WtFGicKT$^F&9r0SEk9!u%i-AMKD^jy(olAEU|7wKY)_&w;=cqqfO zC-jp5N&DSn&jGS>WBsqvnw%HGf*=Z&>M7>J-*$kzc6_M2j{Ly|UH}74f`Pe$QfBWD zk_8)0tJW(l$r!r*tEm4$N>f@NOTDAR2L22aL|ghWi6IM9FoIG$J_p+vW?k<@g7#W` z&z4=>h6Ss?j;goR9s1SS8B%ijENiYwUwRI1ITK%17aQOc8v3%HU4c4xd)QAK_5xqM z4cF-;-C7zf5v7b_Oy%#GVhViBm1!BQ2N_epMR`W2gY)4jAI8H5=61%R@0F3HmC0BE2h2D*J++YaMF zP}Fp{S;a!Tud_pIxau=jVb$e#W@oTN!YMQ!C9b(}ytVhl$UV$l%yNAbZ`8n9=6pGA z{6CJ)GAzn&jlzU<_t4!rG*SZ6jUXi;AqYq}NOwzzgn*QEcXyZ4-CY9=FvNMk^MfC9 zU4qWcyY~}o-3#AphpXaa69?rfpHDva%q8J@oda!`d)3GMOr~?d^kJ!e=p@Qb4)zxQ zQ>co9$NH;5hJE(BHiC>e4?En2`BRj92F3ae>^WT`oo8XYS1~OT;``UcQN(4quwZ~* zM70Ux*2wX5u|qW2b$x>iPR$= zIAW0ae9m-u=c+qBMU8a?06``Ixubl4DRGk5iQ9tq!%XUD>~nO%@HKz=NmxEdWcl#> zBG`sMeJ;;;iX)#6-1eGtJM^MhI2sYw49!0I%iVatiJ%7vitj@0moXMr)~%I|7eRIL zTf*0a*QZ=~6OWUMrt6Li-}sB~2cpy?>;76!1O0!MxjP797eecv!GHg*%VwUm0ttO# z+uPeXZU+(r-IrY8rBw5=dXio^N5S)1-_;Q`C(AIP+W>UT1FhCz;L7W8ehmqrq8N)d zw^shsK>(Xc1CyvSKQ6NCElkda4JaMKOLCF|u>q$;CIgSbEC1!E0H$tjRq;`N4N)B0 zC=4Ds;-jAN3mHn0SoSxASQr|LXv>6o4!y>iy^& z$qIP=nlF^6_9EHD!61eN70bf^hVBMu&X4VaKkU!mab<)8lGT$?rA4O4jd+`Fb^){k z9$oH68PnZix^ctG0Z~_cSVwlm>NmS{zX=ruOu)llNFo@F%RLyQl$F-jwPM;5!fnr_ z;T~%YcP0_j=0-i(P^Zy=^_KHesN)Zhfv6)u`qx0O`E1a27bsOWDc#?2v83J+=XJ)> zzdEwKLNA1&pAHEun+HxZSe{kS2LmquPU0`}4QzSLsyv%>Nja6(9~l@Je@UAHsP>O@ zfv7c&YCwH^`<_h%9>8-?sJ?AD-XAClX5JY_`HwqSygr@7#r((YOlZA_!0D$BiH+0x zdJMosW>P(=w{CtOBQZmIt5Zc^6btTiBWeLWx|8p}ew~S`%SK7arfv5f66ROpwLPP( zIg=EBqHdvO#{qKc+Dw~XvY#)V(j}rWyqFd5Vz;La{YMTTUP*E#Qzna&>a{QOfp=2H z_<>LD;*oX#o?Elpnf6XSCzchIO|tNLy_I19-v*qc$njun&+7MR3cSXK7^$LtdfBhcQ`ocQqv98d%t(n!W;@^i-Mq( zmq6d`9xL4XRp0Ivp=6W1ZN$={AkBXH!dUfFNC2xX=(=(#jNrH0L@x z2lViOnh!GDRx*h@*sr;q^yPk9*lp(mm=m-jO{Kq8^J$T#i+Be&o9HNXD!u>3Tsw6~ z?1gObG}0i&`~Pg;9z9-+jI@f5qT08vwi7^)JWRLSKhxS#_*r4qH@^r%A-VXxFh1Iq z`i!*#4pDrEtaxj6ec5vXf0;&3z56i0-iPFnbx6j0bqTYk$a2AlV z&XImPXMv7huFs2`J9KgjxPKe>;q)$;C8vD`O1jqGrt z1hU71_66I+EZ-~P^Rl1SR#Bq@RdjONFJvAR5+s?MXGmCj+*og9fNK zz}O0zc+7sg_ig*IY&jkW0r=nS6lz^5McI2YPf5v9Q|ADi{h|Sy8xYg%habL#zegcI z`mSq$BoBT4%9ZN4Y}ruy;cGL>^O@=VgJ4brEDrg!<0*#=X}L2$7;aM+d>3{cSoQr9 zkG4sjPcBlaA~;`R*AhT>^@w_tna_uK>ckSh^>Trlo>I9rP4%{Whyb1rz&sg0h@(UYBVX zu-jO+G1tps+T#E$A%x@@bBOr4Tlh|d9x>QFynPJxH1{)=fh)nw`B9T4vl2qOs8uzg zfFg6@s6&405W?4pd9g^^;ZGm!7@rO3U#NbX`(zsddI$gv=k#a)Gf?T zS?AW#ASU^xrk$5*P~Y%gS|grQwPKjnTr+k8u#+857yhvU=Gg1r74}1S`mH{66#w>* ztw%iR!*@a%YsFG_`K5r$Q$JL3QX`TwFlvd|{k`b}QfI)smM94Gr%`57Oj5QHc0qmE zCs47vI2XOVmd31dzs0^%>KgfOzu!-dEsLPyKffCBW)smioC)G?l5+MOkAL+A{e0%1 z_hez%;_|&+6uhrRnnC2^C0!*Zl2^Lz7C9LZ=Ryd&Ysg^O@ZnxRKbxM0LqdwEAwZ*4 zptaV^g=8lD!6+h-&?`$D$J~7NM!G8)x>Rf2p|pcv=xc2|^+-&9Y`(hWrrsxcy{4~* zv8TyOLm$218nSVN`oeFYPUR&ZXMU}`?hAE|{Ac)uqw?H@2fhMvOsgaxn$66Pi+&n?{1-%TKP$^{y!^-+Xfa88n;Cy66-dF{&y)l z9l$BHIW=J;mRrA>ngieB8IsSr0}Q-l*Zfg(@>{bZx0=+cp)&jFnJyz!BhI74+5J@D zt-D`W_FqknWEr37I7|zSTFw*$Dd53J{AEbC{;HffiHrU?@;Q{YCf8rI2&8rBX$nAk zc5l$LNK9r9B*7702X4z8j~PM@(77x{0QGv7?YQ7v=>zq<3sLK3PoxG2uO8pe`~Xh$ zg51g)q8o(@y<8Tl3%gU?Gey4{P>}*5CcQwKmPiMJh@04Xr#YfA%K3^R4^zynT%q_u zVFe=a;4>%hoQaV6w=W$%wq01uI(^DoSf6{ZIURq2bMaJRzzTGsfOxSOERn}dQCov# zZpmou*75PuEwo{jRRAp|H3m>&_}TK+yB{`YizL;HSedvc0TvlHKw%2B)<+lCd(!VM z$=q{Y<$;dhqf?GN0Wi%1iPGiWzQv-;dS4my0Zt21LxK#X+W(30PmOF7TE~;UBx&bc zAG|6al#{zJ-aS;2+dv9a+X3o6XS8N90Ng3*74gM>%#t9A{LGOP_-?DgZM%F8S(Du7 z{aeoBJ2Uwe$1^S)^-d|ZBQ5+{W$TKi*aJDo{4*C_ zIuM%F-$*u~E&h>KXehxQ2oR1qvfLxVwbMFtRQ?GHgv+828+x6+`6@qqcbMGyP+HUucJXxJC*&mOBsnQ0+AD+W;h ztyW0um3@G*xu^ch5zs(Dj4R+$@Gpj00c~+yLgHY#5)gz#r23@6&S(^&FWUaG8sRDl)E$Tt_eF#L}u-?wRz} z4f*$E(|5g7u8$Nd%dxUtr%UuL&AOP5`q3qJ<3=1~G`gw}Ax+T;Ii52(Yk#D2o^ch{ zEm*l-Un?@yT3;{kxFc4P5vbo3gD?Tm-M2Z!SX17QU-g&(kg8aQsOplPC* zA9470ops&T!SU(qqmc_U%WgV z61BT|?(gbF09j9bJ8V+MfR*!|8mN$<8M$rUaK$Odi@ma%rgpZvv-T*jeS8^c^`ktlv+OB}mtW<9WUlyJSqA3g1r%iC)2I+QKr;(uatMB8Aksf_ zsxZ_m`pCgrKcxm0*H;6D0vp%!RBwRT|2NvDOi{KuymWFI>3Q36qc`< z7+dvzM}ak<$RIwGE$y$0>L1cD8gWDRGO>m5r|q*4nW$=o&l7ccYzLk(CHzZGOM`JN zli7}>nzUx7hof_^a(B%P##VUit6g)b-69vJDN1y0t+~){39heivxB|e)y9lObd5tx$cUAd87)F_qr z$BQ1zGq)o@_ zit+2j#sNRKln7htCmR_N{Z*zxLr{Jv8my(MflyQ&2_K*5yr0y zf`e`+ATpxo15jSk3}MH6p?MzIqQu<+fX&XDFP>Je7-fL{s@L5$DDlgGNg52yo9E(D z3Ycb+t(isr2FDY`aJ{iut(=>H0wB!N$j$$X(nu3Qwew5i3DVA)vQvC6qjm3d3A5m~ zDk$_8rR?&KYQWcl1VD@3NZZo9=ek0&J?Zv4#sYXvVBK-~II6g6j$}Lf#Gr_A*R^Hm zgzs!ZZa{raoLvd!+FG8bWM zSZ$6T)aMI>tXfH~bW`bCsIv7(eu{bax!)i|@*ajCpF~7l;00-JqnaMVXzdVxRAG@-qWe?IDd#>qVvf6X1S&+L z!9sm>0_1as^jy{#9}jGR@rSCs<-r%gSIk4AGPea+S;oG%W`mrN8RNF01iYP2LKpv7 z1Cxf1wL7UK8rwFxNBb!pX-5JTgvU6*W8X?Udo4PaT1a zFkcME<4kZ|b`I}LA8t`;(i@-2p}?K@IJy1M2A>9}mkSU8fz)tQ1<;!Ctl$eh^gM-_ zuY`Ukt8U-8vceW-{?iNrwV+07WRvNC34cI%p)R+|#_}o*J|`T20s={&=G$M%`W~qs zu1ALM#}})vrdD2(B{QBVgXHj=Vqp~V6c4ll*#{tCd<=+z9+qDGO}DDaQ4J!$l^TtO zoE|Bd{;()?oV$cAZ8Qf1&2mhrjP8%)sbAvD%FCjoTW6WNi*v0>uN=<~K%lR+sv0Uy z^tCJd@l{<(-9O<$skW=8$#bg+hkrI*D@|Lr)P8rsZWm#{p@b?H~_=w1}@7nd3 zf`@WB%kWIaBI1479s@&S(zLRkDtY426bZ+ct~`!bhCs+`n=gH()~Xh7(ERydy$?$H zz6ys{>XZj9ABGg`Iq2fX2o@@TapLFYsUL3$F{>1eIRU{_y%B%;BKel43svhUU z71wi5?QK$tEt#AxPX_^04nXA@Ux(o-2~^YH0W_8e%um%|-vS7^{*y9?*uX?B2Cr<1 zmFX(aA9cOTjy(s$H1>gdZhNZ=pv--dz7GJn_)r?esdFX(yNMyercaq9B8EMu%vRH6J-;J|^#Em-nvt zz5#A$^B(Q2rluQj6!af;OlC%+btan14IVa(u38A4RjZLU_A;RbkFAoW|Ez$#Zk^-xMxlAz!`?-N8tTqjD_mhX|U?Ee<7qa~0$kMW}+uz&#qZv6JR z-aF?rMFV0raYxLPqJe;ENPZZxoxO>12<#CVs8il+(HS!YIi0DTrTJ9Kv1j>2HH<{o zb9TPGT3vMQ{C+#t=KtiI%geXoRt|fTbA5jyq@=q7FOil8uNPp%Q$>t6h?nrl~}mi#1t8BkBt$1Ij_xR+AzwX;ZhX z-@JQJ_ycJOV;ibDCK7)JQ*504NHDKHV+0GTtAJ5)M!u*|Av6DJaa=BF=6$CQYaq8g zh-*n!=SK^XdxzAgfr)efo-Q&=WPfv@(uifIo5%F-8tx!o^o>kZDhAa+3KPkc=eW@! z9;O_KOd~z?Gk}y|pcdIpcnGJZlNWQ8YWsyRg(I~afWT2rEBqm;xu2x*oLeR5<=>b> zE$z_)2H)fBf>tA%7uu$c6rCy}hX9?|bG6^zV~XiaYik+SSIP3%)>(0109f#Dv!H3a z{fVo!5>G|uHy;*f!J;}Fv&_va%TtcTr5HkPJBGuCQ-XW+^X;near|j^{DI>y- zfIXp2985(_Hyd7WVGfmw-)~~J#j=KsrT47NE3)D@<|Fl!xi8EO5d=X>F@|k08d?Tp z(3z2EtQ`*zp-J^3&PL4nVNWI>lEaE$UeJLBx;YbVgh;70Wb(<)>s8m zcCXX|n{OgBOrOxB-{(g|UfV>cFrjVR*cOXMkeVE240(~+u2lgH`9H%PV2?8pQ%+pu zotv&O^5o1eiP3HcbjkOf93{MSGZophtQ+)U_47vT?*_DH2Z?u{F1_H;-N=k`c$)Cz z1-hL%>n~rVvaHs74c;1->~?Zv9F_A&?)!dWZ*{=6eKJ^`q-t;S*s@y-2m6x^_B&5Y z{GoyVL1LwOw@ZY<+|@#V&PZcaV+LqeBDhnB6&No?o6G?W(bZo3h}*6272Bx7a|-eO z0vpgElYIz*juXAhoCgJ)0>3b-#t(r`D$^ho@@!S#+zEH|#A*+*8Q;esHq-E2zV6 zNHc{oU7xg8p~``SqQ525Yi3yqMLJ!t zo2N%xMsaXa3}hL_!u(pkF|d70iC+&oKZ>tIh38Q%|C!bkqe!Q`T#NIGRu=Oa$|m%44QMI8HX-_tMaCTv0kg}&|2L(>bN9TN?H4%nUaeD^mIGDlSQsXc%^=3*TZ$f0 zPc67~9f;=6=;a+nUkL{h&4V*3^0Uy?Z(8Q@oWR^9m&WAGQ;~MZbFc*O5ysP4UKPPD zeY@r>rbpbXuz%BQJji`O-tx}z zA;D;VUR0)w_Hi^{{eZpuqV=#;a*7FGl|P9(jFj$D{5gi4zS~z?K~KH-_%i-){#zdn z<%7=^CJay#ge-DCCR52~Jgp?zAQE!J3DzCCz&~)9p&7a)W{}4NN52~c%mK3{fP#|F zBggPDR3y<4`258rk1bSJU;v{_gxn7G#Ibr}$)V_pS=?n0ih~0ObjQxma$+^QDa23L z`_u3KLR)yI)fb`Lr$r+f`u72Lpi^r*OD9vXdXBh&vvDB&kg2gT{7B;j-+^sLLefxU zs@$JhK9P-uvGinZ;}Xd+YL)B>lhcinu1{iP{h}X#+%B>gR3lgQGSTJ~kJxctk-(;&&|ACyR^t6{)TdC`( zj4~N-LSZUX$Y?HEt+~IKu41x8Ecb=cLhdaMi;B&KvEt?+I2{_25aF=HYDD0e2;57F3|px3A}iO z*NG~R1rim(2zrc5QKOjAK^BPYjmEr#gj-g{G9N_cWYN~o={KA8%1DMEADutTIn%wA zzD)oRCA#b!M+Z@ihw_Cm=4)rgmZF5w(1x^qF?sShdb($fAtk6eH;ms{k5y70lyrfo zL^m_GEU}688jID#S>qTla0KZXzwwFN-e^d87Tq1Q+y#vr5q%!A#e4MOFU^Pw;w3mE z5E68#gqEb6IqiyvA1Qxp?8K$zn}YN8?e4DKd_HvYk5@mF3V)$em5Y;lW=*R};*7g+ zcg)Z9vJG-=cvQ(D{|r;c+pk3bky5}qb=vP`Pp-%=_>Mv0mlC-BU&kLXDBZ$rmxcG0 zp?{hjyHB1{>l|$w`jzlI>cpjD)>5#)C-+MoqUXOIo+91n1thlbdatIea{;eeYv9UT3nBU_OsHXplpBMO5se5l z!qi*~VLmeyVKS>Ff*Nz1S|nD)9RHq*jWw`4SSSxA+>y#xYP_IqbU;CDFi}(gh;E0K zTdv7{n|cjAcE%KZ_tIzQbj_D=6X`n2IY^yzrs(s+` zqYu;|Q_R>I;noWSf8DfOVn_4d8B&-9^&&&;FkldzVYxknm^UlEEbPt46yzcq_eGIf z=+K(9YI_sb>x~!M1in2hxW)% z)6@$pA^=G%yZ5|JdziU$aFQPh=1@0@`?nlzFCM_g-P7!gWa)*ru6&W-=Izu(iK}nN z5&_vE(a5mY!`X2DcVF@tUQIkf^H@N_1LQ2vbH?$xRy1H-8H&n}Jf3n(0P2iXsG%TA zR|ST+Faze!;>i;tbN_|S^EO^L_4G`c5EIXu=MYH@7!G`5qBfX!paL=qvilN>~I)U_C4hR=O? z>BGesf-2T>ELVLNgBLUL2;2B67VH1kJHTg9M>8Q)&DWoMXO{P}p@>~FyciK4bC@ys+hK9WB7r@!f@CauQaFwkSu zJ8@7PL@<=kiQ&81&+DZu zNjf6HFmSddZd(;f(SrnN`R^z3lg{Ec5dbADlm=5CqgbW!) zv2)DUVLkfz;wSxM8H!JKm9>wQ8WAR#(`v@XytPd(9pUCvRMOc^N%yQA== z3fx3B9EI=~--%f4lV?eQ7{Rg$KYlBW@d`JX>?bG#t_Eg(*G5m39P_#LU9gJ{2zs!R z*NJEA&hE_;ndd>F<9ZqRXsYy!XAnlOk^v#9k#ylUc4;eLG9v(j6p-0OjVuH%PJ39m ziCc94=|$>YoTo5UiKga<_jz8N%Qm^2sZ~jP+?uX?BEFQme4Ub)r-Y|T#HXPc@P&w< z`pj=pR>-P?f;E#-vO5lyD-uz^X6jLQ5q&~gTjS=4T!gxstka&2bAY$ueY78Q?T@n-tvDy26if-3B@+$COchKE1%QhU+Uwr2%y?7|uGN3QpTwQ$c)nT**>hex z8PS*}rT7ricA>ZWSq}%($ZnSm-K@eW!v3s(#qAC3sP9?zjq(Ay zh}>;Z_by;ofza%TW8r#I%PYgFCHnk`M6xCXjt!Lj_YaoxbY-|3OlehB6#Qqj#=(%w zdC`#&U#8@S@aF00UViEqCxJf{515j5dQh$dw&n}U9mO@=4A7AVUm7;$S&pn@h5J{%>l_2ahfotbbIPpa4m(SBmg9`@Nio`PEgriecq9Lojyt)C+|; zh}cp3c4)% z*b;u+@lTrVK)m*u?(9!=A^ZXoc2In3YTDu1zivVJ(OFAmyC+s}{mxnX)3Q|zcV9Xf zO)F_9tX}R*sb_S#;rPQYgrbGzm$nj3cGdU;v1HjZl~8O)ZsjnlWBOOd88O$;yqfuv zMYTn3rlyZ#{eg{VP8#T+UHULqwXbOAocC*r_l)4ae}D0NrM@a;H96Q|egzRA9<-?| zH~IGAyDFpX--D^^GMj+P0IVIc?o;zZXA(-W4E+@znAG;y_$v zqknp)MS348nvtsoxdytXIheWxb{zfgT4VkVJoL6_8wPj5Smbm>2Aj1^u}w4=5+?`P zw?FS%Y(Bx}5Na91ct+8ImqtQvGMyRag@7t|K?cLl(ycM?4-wgQo&%pSMAC|;5G>S3NEMfz+fxAT26z__k33W3eGT{UEM zK|%XLN6l4s1YYjO`z+Q?Y{Lm|33s8s(Q@ z5lCy8Z&V@{8H&Xj#L_nzg_-$sq9fQ96XuF(LLT8;#wBeXC4!!e5b=0fY>0Bd)ynU@ zZ0OVp(;mm(CVUxz^p>=Fk-p3roWd4%JZ=KM!G|fs5FBf#=TVLyz~k;afiwq3cX9N4DFQ7!=mo+4lBYu} zhCm=1R)Nqg>EIqeQ$>M)4_S-k=I*R|ULFyj5n{?}Y7iWc%BPm-v0XkQD=2)#ys`PN zJNpQdg+#2-!D&9c<7Yn)0|1 z$<@;B-SM0k{4|5-`T$nCX2jFB)t|E}^lwIat$rE$SB0tKdmy^8H6u^G*Mma+q)IUr zeoLLKq@IFhcI-xMAhVSqyc$PkDq&=ka=*!5dfq7~3)6& zs3pTQ+@>aVA_ZH`3(UqTo6gNwmgn%!!rY}OMoCD!5Gnlw^CpaHzW73}$t@rDNqY*e zwSvIqju7mwq6qjNIAi{R)05a7)w7U@`0&(Ke%RMrf9C9hhYoni1xB@&r5#GXgmhDj zVX~79izq4uXy5{>*vt5=9>34Q<5_VSBeaUW)`_91B5h>QZ1Mc(|0s^1*saa+P-5k< zWFuY<2NJMUmGJL|9D)}%WR^aPMcVHwvjeH(j85mig;OTI4&VBo1Oi#%=)v#;Wn^n} z;axk9nC}$d6CG>`H4KrkEjxh^RPZkHG#!5RyU=ZK<^aX|3;zBhT|0e4V!5C>oy{r; zRbC^I2Y6ubi;p8-AUjtVrK8c+7x?}tI($?WyF%uiIiaxCl|%!i!+q?S8^SDhmF*58 zkBAFdjzH9IU@CM_x&XFPO_lXl!k@oxxd$Q;0RhsKeQ&FafcF%5Jks0=xYyZ6)sC{}kv8C3`e5-ugU*_R@C@iq!7XM2dt1V#Yb-4=K zd?E#=Mdu@sl3t3NO&&QXDi%cUdGMV()!@U3f`?Wt=U}JZp2KSWeJ~qvIvylgec=Q9 zv+a-Dj3dnWGY!?kiU>!!iD!`-5l69 zAaut2Yzkkf5!N}$WIVmZboDQAk-#Q3S6nbF1Y}3dzfzPGn>UB{{;s{hYFQo-v_p{l zQ63`JYn(1+Wzi?j=Rtcic0nufL&|_A7~aaF91|pEb0e(ni{U4q7QhCvVNkUdrVAwP zyI6UW&F2y3u-xi1y`si=^WG0ON#!cT*IGlAoyZZHa<=B_a6v35Cmhst@b#%eJMwqM zajII3TlAH&Hww(-zt3W{|2D^dGx$eph=33JIUv}&IPdGUy)EgRc@8!^UY!wt6t=@C z;0ZtU$W4qj<_Yj!I8Nwa)qsO}Tu|&acz!8u=QyP92T39a!DsXp#3{s5uSUS?7N(7S z7d^`RACB1Rxm`ag^7CVrr$8#lvXpR;ANu>r@;ir=NhW86g}d2FCLs;_kZRSWxJw=s z(dFrG04(7rwFT3OKdC<=v%@ud-~e+SuA3z8U_nBL+$QwA$JZ;mTpcqMTxKw7 z^i8$MnO8RM2|hLM6PCiCUWytm;gtZ$Iz0T2*+XaK%fn zS2Zqs07RbpE1kXpAwaL_eq_GW&qV|&VVN%u*d zyb{Q&U#T1))~wOq_`!FIgU8Iq25e!IxAFqs!a=ankK+S%SL)eAC1lY}JJpNy-y{PX zylKzR>GkHAqc*;omoaRn?rvqbh19AfoBlE<#?k$^$;B6fupmRV*^-THbzFnr)2B0<5D0!0*!0;Ytik&uf}DAkK`#P%>TX#4pHyKPm4) z&9?nZqofo5iVAp?y-fMoXd~P|CCCYS0GdeRz_$5(UacJrDN0NQ1C!BzDncnKaU!<7 zfWAadsRuL&?`<;7c21J>WIFW^+O2R^D20U=w`NDtFZi z`oIwFwGg}&;o5Lab`}43TkH;B&W3jqCpXQu%2z`P0nSn_@o#?8fd)7p#rBMDNd+g| zX=;AX%bGcim*?G!&jU`(O93V(mt;|;r}60p2=w-DW9+qPFaDS^q*9_%ceD|p0LehH zV$5_NJQb-Kc^qMlJT3GPKR(qUu+o7dr5^~c@ z3`=Tz|5}+_x{moQ-qeAUBjxyn{PmxNO(b3!Omc3UEZ)=}M!SN!Ix@3Dq+h0b<@L4N zyw}6LMpO4D7 zl(fJS;c->==Bn<;&&W8iXnwpzd>1r*wN6Qq*Q|WC$-~r6FQ!#mu&j1gKA;E0KA0s$ z-qS+#?5JT^|HO<5kjCyllug`-1tgu&a+|kx~g$`=v@5#T&=X2`gwaTWiA>D8fBB5^@3(whu(rwW>!o;OpA{kWNdnyJzz1 zbAw>tSMRG2N~-y`i#xC9q!vz!0igqeNiN^~TrDE}4H9~VhzqN2R03*_h=o#-(-ZB$ zd>eF(zdRkC5lk}D`g6yXx3^f)IH(DBNfN$FchW->^DfudV_|n(V86 zE(f@j1iAw=h+53C6G(*gkT?PEb2m#bHsNGysteb;M&S zB))lZ4_WcV?g<`Cf}sj$8n%NP%q{v}&2tl08^7rB>CQHd9e=>r6!H%%4(Furky@jR z*ZkPS@4&1ycVShwr(r*IC=Ng7K^D#C5-V$*6w6NKmG=D#QrVV!QS6a0P1g3E1DCW(JeN9t3!h;?c}hXrmfCKBh0}*ym8W`-|R(%AmsD;4!tplcQ{JSs<(I1 zUME{~y%I|5$TC}ivCeIXZIwi5sN;`C}3({kOgqFVvKuksE(US!SMzF09I%1G^8- zWpKg=2%i)<_Xip8nWv%|_TPT7c=1jQfu^Cq`MrWOd%Nlea(MzJs3RfXhpX>UOT>aZ zRVH;g^ru)xLxDidF~k1FTlCbiz1a$*`&(6DH>?Z$3JUM|wWBY>6 z=@4)w;j2pUeHmwVtdgo6d$pAs-D4f#L_|ZTv3(D90Kzo=OBu0kjwX#2A4EOzp(6{` z)U9a#uV~}eIv{WrpU#h1Do`(9n7(o2kL=~bs%H>E+V_+s!`DRcoTQxl$oJJlxFRCD zp2>kz=NVXBfioYl{M+oTMH0xPAVS}Md2%Z^)cr-T8PonPOFox8o9Z947V11#Z!dAxHOT$X#hPNsx^OSL(PCy1w7sLAK6bvUh*=sE9Y|@> z&4+;L_wVv(_WwN4{cK+3py@t6E*oUB^QP&zHv^uc8e32@>(A z5oLhsSDyh`mq8d&CLNIOkY{QRcnNcNMz=Vz0uPWUcZbi!#W{cy_u9!a5skeTGVVZh z8j0%giyUU~r55Lpfi6p&8tURcLyN)8I>Wc;$0_{tllD(LR=@FpW(+n<4F8q_XKgmH z$xCSdnw)1aZL6aN(TTfOn#C~bZoK6yr=-M{ItQ0=_=)IK`yH$v+h|*v z?J>#ja zL5KJB$doV~I8Lr=cUWnBiXym;gN+f*qiA6@Si!!nMN=Vr?UI4_1sJq-wCN@uK86Db zupt9}!~z=*HbO!i>M5B$OW??lJM{36dyZVWa;GHqRS!X+U;jK3dH5(-$%Z71-Mo;B z<}Tk$ar|}1QJ$PKfyZQ{E6H$3`?@X3Mxg=mFBDo^RG;O0M!$tZ4tzI>kJ*|sb;|Gf z6X!-|R}2PX$J5hyPSPG4f3MF%U7|H%qU=nUM->iW5MuuEBW!X0d!)mp$>`HlzAe?< z?Wn`Ij^%y0OAjh(?ySJkE;;9mZrpVyG=fN7GllM$G21L?3Ocgi8SW30!v6+S%b}iC zN(R40fQ~!0Lsz*lthX5$j&}NnGMwFE|AHY`JGA0mY%01A4`vBu#MQOkFE9BA<8nX; zU8?wu+KY?S`?Dm#_C=LOBx`>s3G5skf1P4JmXZKch+Is_AI-$>d6V}`MMTCu>2)5p^ z4Ix(M&@LSjj_-G5$KZR3F@mHTL!9`@Z|_k7^aYy~#NTAYU1i9@Gs8i6LQR z?RHk+BHgWy4st+L1Zv_Qnwt20@1t(EQA^?bg_o7Cz>R>Q`a(~HOr!1l*(f@^W6ny* z^Cc%RmHKU(oD&EBClvT`jp&;|jY8^rm->F;9Z8pWW#U zda`wBRSNIV^Ju9=xlW?5`IBTB;ZswQJ)ipj&Gyv)>cw167y8@(eC%pOZ?E3<#?<0B zdR+w%N+IDS#>Hpg)DkJeHS&Si;lnonj0!y@)ztWOi{@;{HI*{BXog_&i0WsBa~^LD zYWe-s-E6HDAtf~gGWzj!MK?;jz7D0U)M(IcsHd!hrqePk(BqUp5B#v{j>k4!@RI!f z@h_5~Qcuec*Gx4NyJUp56u(&QU`8G9JO2D7s9N$UE3q1(($G&}6}n6&Uc}v~sK{3$ zdNlh#j?RLss%{IzfJk?TboV)QgLJnjT_PYNE#2MHT~dN{H%NC%cc+AO-}T)w_yKSZ zd#}0Pc;;FjG0B;L%O5%{9Nu^De~nN0M&tGjF)X%TD5WHz1q6`>Tsq$cBJv1c-^R9u zLmO7a)zWF%leYjbqLecre}*@QSa2`CcBt@$L0v-(hti~~w=+V0;(KEkHCQaf$NS$A zd-uC$PH@^)4>L6T%x4|@*2L?>OXlHwgu<>3$lAl|%{*9I2o~YaU+??frmsEjB7U=@ zn5`S`m}m9YsHZE8cPWcSOz;~DwaJ3x9db6Wi6!#)6@E|0kTa!ue*H%J2GcYd{|A?* z?6z}m=Q~ozyplI73lTp5-pEu>JdHwweyWM*zu)69(Ta-wa4W~Xy3we=8%#%CCAj39 z#ZT}~7t2EAj*TpZZ!DJGM}xYg1@m9cR<^~815FD3b1wm`8b(%EgiIALJMLYwhN**r zd!2m^IYxgJld}TOb94%Jo=sSXoOgXnd3Jg79(P?X!KgT0pj|x~*4BKRER=9WoQ`1~ z6Vr?~(C&tUFgrchV1r%TIKYv*!BP?>!q%U{aB!06GklWN^Q0s*{A3yyzu{@1)OvdUWGNN~P zd3X;9bkW5SS*2Craai7W(-?;sdBApDcMar5vIUEaPnDRK!r=H*YYq%czHNoKgvY(Yl-fw@~I#)j^bLF)|#vkUjCiu7td+Z!xZ{*E)(l4okaP4*U+a8)1 zost^ECShbrKvBj*TWjb+sC~sBR=w(sq!DkLB@+#!_Z08}^UHUq@`WwAUukk%=h=fU zysvV+4lzBmcc(ejp$|85Lqrh^69ImH?1Qo_K|cR7Txoe4B-Po0W>z1hZb*wzIv2`) z^Nr%SK7@=6MNW2k4o<(H*NB;o7({FLqra9`!#&13yFSF^*+fXn&=@JXias0qaJBlS zS>}2&h%*JL>qx9)iZP2%vgiRd*Vo+C=buVx%iO?Tg)Yp~EB=@3o&jiiM##`ms0Uo} z5B<{K8oR6&+Vlitaq5vG)xZ-`aFKwuyCEZ-_UXq*(0hS++lqPfQ;R~2#`5BDq_gf9 zdC!@eqkS;TJ(PWK8p_K*Uedt>&C(&;!ead!u&{11u8U6lD$4pxnfq6&-+Qv`{>eEa zwKrO0AIbE~ZDiFY4u^ zjHlah9CB^y-&H2P^1!2@e$TsEW%+M-@H5bY>nsua{E3O=sai#3X=j(YC&PH9$ZEF+ zWLS;2FwtWaq~8?}QoB^x`lp>wEC;*fA}7Yue~~YPMmS6YcR1bVsOx83Eel!8TI9Jo zTnWp!w$xo1;v7}FZMdsf# z&xYmSInjoTI&KJJI;_;Hto-36Nq{3l*?PQv4YI_igzmOa$%!^*V<~~^+Mx{(NHXT< zGyQK^UU~#Rv>^HXMBGChM}gc=>P;&D{a{V7-v4nbS#jr+Nts>%C%Q>QCO?BOa!yNu z{f*3n$73x|QlKY7=!S<6ZZlzGe3*`5$sMe$LHwWX^sJ^kG|PC2SeD z*pw(+G0HD<(4ft#6t1cH^Jb6phU0EAgP6LnRr8px#?F$`dcPY9i<@ruVs35i`oj?7@sin-X9(la?=e`=ji3sKx7X zD_l!dfX(leoP^%83q1&SXbMd`;kBH6&4fT|UYx8m=mE0m{f1PY8Zhkb&8q_`&o0YD zX!T=#^)wX~t+5_p50A*_3G2X?qAM04!~gV+QbF735KSvCw&v(W*X+Ica_H(g?7L+F z4R@fEc5}yHZShbaL?otHinrzhFX^WEVHD6n)vGuzZ#}S+EL|;wthj_x_D#y(dU3!a2 zEHe1hj?@q>Zs+(Le`JPq9!=znzM*yKioN@3fra8wVXxXNTI3^6!bSo2U*IU`KC!^_ zKbG%etrb!5?<%u?e%CYO$Nz})-mgM#O$>BE8=!5u%3i;4b)y7|#q<4uW;AU%2MIoj z39EVOv*IOczZ#P~5f^=!o2yoP#Mgr!#txN+1#a1bOJXMZxKDE{4DlxX;a)eoS_h#o z@PlFV6fHoF_oFb&m3lcSYP4+)d3aosdN~OJqbKd_V=)~WZ9zXE^8*5ajPuTwW)fvm zxtZBm2>~S!8!^bx+!E?dppV`fv{?>!f)gz2^DoZo=4+2B5+w7_)1|vJ3>pba0xt9ql0aT zOfY?J>~%hfavXEKEKBR?6Yg!035N;zq^;*}>|ad>neP5O(Gv=L{)-v*JaYrKYMJ9X zs=Bq)DiR~~wUWSPcNl#vnlr&j;i4ZbAc@Z5sLK^{2Xzcn;imED{jx?5o8L>#ssuG{ zPmSX?rYA9wUtp20LxaD^uk;pqV-Z~wlpz87LM9J9(It!rP zCEP)5y`>R*-qxm=-$AHHtKHsYAVJbMAX1XY-gnCh761D8yH?>pYFMY$)gWM|gKuS? z7z5M0K$t!on9Hw5C_36doKR8!FEmo!S4M%zXO!zWF4H z7NzqYX8%6V6ZZbM6j&-nf(WlRpvv5JA=|fAYfL}0z;*X~vSVvx!pccHH$VPcxJ9l& znS!^GuGt6rzEZIJmSL;Cip*TEk)ti*qC!<%f%7@+B5vJvnp3`1S+Oq#s?Mt_X#$p| zd08{eK3aj!k%S?^bML3~A|Z{4hMUI6mjVJ}AEj508gzZz3c_>v1j^q8DXU$r7xd3_ zTdbJI;w!d*ZvFM7Q_Nl^r3H#LXnP7*a8^&zsW1Beqx4h2X682m%bZrEDUF`fqg$Qj zqK{*9=xpamE>Xbbq0@~W@8CGzYtadDr9DDo=D>ZY&FH(`T8tA3EyMyI=6_KYRapjE z9Jc4@Wqa>$N){_{B0uge@`J4sTiwUK8hasGz;*xAwS?D;aU1 zM*6LE2}oF##P4){pE?n&{0+*F%4|JfJ{SAYhOaI9J&e#tR`q_kDeVP<*+YGzE09W5 z7h-h*dBl#~E&9(juP7f&tS{3j*yF9dUFVp$(DiF5pcdoaQtJ1rKxr!Ydg_7(mp>5X zQ?G1;_1^~(pTDMKZB|`bfukA^govSurtjmsQ@>)0(J_79IDbCPo#YfNELi`#ASU>` zp^fykhqy||(o&{?-V6kq9l!DHwpz{K*ml}lg}jCJd#YD4IWhcofE&Hp;ey0t!s^-% zd3!^SEA(ovSIh@FF`LHvQBAI|o{48(o;To$gyBbVhN=C@{D9}igYoP20gRAp=7?=> z=>z_VW?Y)_VzC_!ff;Hnf9N~j^lW5YIf&&?XZb<3%i0I-84nPFQtM1`gRK{)*d4)6 z4*wi+ED=;;G8+Xes3$x|=6G;4MHEckq0}cb9E|_#2Yd#ScA=?ja>UXO_Uax^n%TzH z!@N0yVLJU)E@eQ4P>LHuZWBT57W?ndq+EX@1PV0#bIWm8jr(>hj2a%xAt%4T{ZP&7 zU73ws6U4KP_WVFG>*M@1bQ$cj>b585Jr#0A%JR37M#JwWc`N!FK|uwJ=AUeKzxNsa z$e{vM`kjJlEm>H3^h3!ddZ^$2UlzasNOIlyN4-!f#NOOMkyk2LyYaMw69_Xo`z)&i5QWVorbg&9Nk%Y6O!zi%$C7cFXvE3pmi@s<)>v+s^sm z6)bW;drXpvG>+T$HRdAJ#{9>5Dj?9(CdsEYQOXYWvAeX;aVc+hhox{f=4UO|L?4yv zc;bppFEwODYpngK^({DmyOw9`l>f3lU=}#Ish!DU?ki3WN8U!`k|B8xVj|Z#PM7QL zHF`=tX6fZDia@hPA=hBQ}J^K+X6_{A@A~FmAc+Le0Z2Cw5Zb&!` zUJnY7G(~h}>>@#u-4<@6ZpawY=UnMJ4IQyMe5-!WbDy<9flLja1{$h@1iDKyon%Wm zyxJOY;HtW}&>*#$oD_L6olK{5dj3AB7c`EVoG`qB#$QzfKIiu%xR8oE+;{Jy1;@|IW&3+G^##wlaS44AtBWZ%x;7}{-&f&izV5u(B>g}_haIzs z>hSVFVm8G8SVMU3@&;%2PtfkKvEn9I`jexjURqvlU?oV68&RM2hIHD4&8X88D-2;D z`TiJhn{TzZMKrOT>>^fR_QMt&7-ECN3E1H#=YPf64{S-3divRUywRHT^avV)1b`o) z*lU zG;~6WQ-}Vv|Y( zW4&UUVJpT|bx4}L+15_BGAr#9Exol){Do$quj(dO?ai09-&JE?BV&3>-Wt$5dAeiE zRVi)8WFE5+;-nSJJ4vL%{ZmC*00-wWIHShYV6mx>sr5=1{?g4XF*bD=yqCX)d*im zWCfSxA#4t~IBti_R?n{YZ=N>>y#L|E6D22&rLL00aKgQ%&$r-&ibOa*wXw1=o6Osv z^K3KF$6D%W;SF?e#1W2hO}<~K7ophP6Di{kD0u-``@N3t<)Xfb7R zvKK!cM794Qc=A?EWZZORo^l}!A+tN}JKegRNi`6_kso)WVKYGNY;yrAJ3Cfx?z?JF z2-ga`n1FY$vnc<_907gRaXmi&ng=s^VGidsq=W?;elg+aD|fZZpmzzRIZ%FF)i$Aj zko|oAMG+6RJfz{F@{!y&C0Iof+jddY8HC!SujSx~h@_OurCzhPCa-maXZ_{s@4g-0 zuY7Tk9u0x7Tx?cNz@Fi`wZT$QJ9ZZts$L4n8yL}XLntOj5Fr!w;FC>hklD4F3yP-C ze$)s^Ldbq~D${fxP04WGcuP*SYpGwgWHUIVI>hec_tHL0Nw}%mLb+tKzDX|J~_ZE|JStcg`3ih5n?E85lR&FnS zEDgJ1I)Wr_DbzmQt90A@(WO2oqzeq<3OKvtYecUvOIk-7I~FT6y)9Dq#V8~j!c~7F zVsRord!v_ZH~6yMv&`D%lg^===}_VL&zVBJ?XJ$cF)#8co{(Uc>Y3Qsc5*|=f7I6} zWj|jQ&3PH<=n!9BU9lQ8C$Q<&>tEe6h~3GzUu2%bz-b@`yj95-Rn}Pu_1R@>Se9^i z7mN|T-$#5X@J2lpt7y5ae9lf#Kr_*b>GrU|1or{?rZeFL^G%n_p6R?xHKNm|QLNhk zBJ@7xu059>@V`7ZLU6yPprjU8uVXG^p&8@tn5g`c zc#!k7)2+Tu`@^#tL_>u7X#g&dlGN)O=fu%A0(RFAmuRbRK!WNx6fU<0F#(68G)d)8 ziiDFHi?>&eFAJz|>kFfr9lENmpYYR?1|&BOAkZ31ax=s9CXzkLVplE(Z-v_SJH#%tKY zv)8h4<{B(D8^aD*Sdj&&41md%4e|$($53vT!}ZJ(!r}$zZCKEL0ql37C0_+3lt#j+ zALwUoU$rdAimhMZcZhCnqm?d)IKg`rhudIA&JmvRE)h z6#FRp9pf5d*vut!Df_7S=LC7hc7?eD5wt4 ziuurnQ-0v_BY7UOx5i%q@AmR{e2S4LjO~qjSYZXTY(bHn|I)TXn76kNI!0cLM-cJ+ zN{I8#XDyjDr#3E)$q*Iw<#(O3Cyynp+uhiaUHYJSmN2`YP;ie4cfWH{JbTx+BZ z8!WShR#u=Mo&iThY{}=1EvS9T;UmjRVC}fUlh23FO+>c;36D*F-QL&i+(gs^#xkIK zeud+%H!zmnqJOr#UgPAsK_I}d_ zNn~*;iKCED)lp4Ce&mkXjE}h0XF6G-8z|I_gyPrptLO9e>{#rf-11Xyz8J6XKM6l+ z^l_hmZgLYiG2<{9%MNb2Awt90BHSL>t+2)7WP^@JCC1`OM6pQE@#HSGNNu*5Am5v^ zd|rfKE;5wG#4uyaju;y6Tk?Uk7*_{nA3J@Mm@FG{P?vt(HZM(23coz3;mcJ*MQ;Qv z+Urc1`YyvaN9R;?ospzL75|+Zxf8;GNki)`#&zZ|<4L7h zVv1sEqc7On^T(fCpBT;#NdXY5)5=oDtGX*$64B;QbWiN)8wvqsc{MUF{O(KZHE&e0Vu$^-v2HO}DL=z+CAIVs{Hj{l^$1 z(p=Ehe)m6rSNPYSh-Vk2r&wKIPMNsSr{c~@(|Qq49XbPSOx8Ny_KjoumYqc?+@Oa( z3L+>JKOTR;S$S>3xvB;>xiHE|hvkoFT6Ow(@O@t8hK*#eU;isit8^<4gGM(pSg3t0 zq#Z_kU)=*`{379HPHogYqMAqs`^PG%&Ox-qo#zDgbW>IlSnLVhd;VX*y&Zz;2mxpl zF?R%)VZ&1A2e6>QI@1Ax4V23NOM2_`yf9ZXc$Y0TBVk~0(ut)vlP81P@km@8B@=8wiBd$zipaoA zTD+9Y{9fS@OhGYyLlowDo22A_%|3_vUf*8_VV`l>ct{e$XN+3;80<%|S<1>l<8Rl}=}L`mtKb=p_5; zR^h_&${X|NMaq`d(6ia`F0I)Vy!R=8GM!R8cn8Fd5`G&-?Y&hk%4keNhzb9U$^vt+ zfFktMj!aqN$B#TK_$tAwajKLYxp62XnJutw)q|v$3K*Y6(v-zexxB)Zy(?7-*uLS+ zqx|~Qd31@a#A`q1M!Rg8oA(_uUifg@ZR)#|Eoi>O1@rlL z{FGCsHXY?<#eqk$S5(6<9t?$EmSb$MO;*2gr9Qd)(P(=LErBttGBVi(w=;_ULjl=O z?yoNjeZpFgndYx;*_-S}(|8`wLd0ls!p;tVRs2gG_Y4+$xezOAa?6L+S5xc6^tqLs zEsgz@?bfS*9j5B(|KIlYyj3o!{pC4x!EKG$Lk&ODwOE_Cx$)3lD` zh?gc$n;L~oE7QK{lHJwVG4ffFVLST*no{-COB?}0IY;S$c^Ds^U;-eiG-Me;ToX+4 z)OiP_MCYq=@>1pnc`ZS)dDdWwWgSV{qCI97UT}9R>U;xxzuUEqJek!==NrAii{(#| z`S8G-trByOQ2K@lvLPL?Jmnz!hfl2@8RywL?Mz+Ai8jKtW%u8@rWNYtIlAy=F@q2Q zK76RlN0PJ=M-cJSl#oHZT7{qC?pDTT?oN} zVRhcftSRj6)WpT$O0b#P5?bd#4vs+xfs(8=ncMUDTIciQ)8+;q3JgjfBjI0bPhoFq{v1B#FyC;MfJUOkZ%EH#IEA3>XvU`fmBdMY}a(cgU! zP(b?u7DbJx(8@f!>HOUEj7-r-=wuwiwF);`Z*4m|#0--nc%a!sh~QEeRxZJplL&t@93p5WK4Q{RXtwSQiHk&)j1QL43aFOOUpB zzWuwI`e!CWz?PZWGLJc&F4Fi*nD471c&YQ4Ozh(AFh?TCBHz8dBNF*69i_c>Y--6& zyvQ|Q+>?F`^Bj?ollpEvc3rfn0DB60+dZn%7VTl`nrk?jPiaKis=vB^wfSCE>8XQj z#~zWlB$tfN?<+bKm<`6}I!)T2sR#UG-q?ARh$7DZPL1Ft?kOtr8o$z9Gc!HRP#AS( ziEc}C4Ms-$K2+y(C(eQ9I{|Nxn>05vn26>|EJhxXao zngNWP#hUByBUc#n| z!<*Y(zlxkm?#t{vo64|s7V>=aGwK(o{qYY*-k57CHwM8gZ#n%J5*v{oUx0!g{fxY<=y`bXRc4|5j*E(4f?I@E%}xcIl1h~wd6c@v%1|c|YleFg$N=y%`GbMj+k{M9y9gyoCQ0iZ+#*D+sho0TCr0}gV!kp{` z4zaKpN0c`6V{*~%4(F9yI0}t{!Dgk6U`8y|rAnIDGN_3^Mi|kz&II}7dFunqS8)cq zA867JAI?M1VSrAbvhr&G?1pvu3FX*{Q-&{hw9sT3h1l zH>jeWozH^Oh(99u2O5M_?rrADqr=~ZbU&oVr>j~yFzcnWJ1otgJIPWr8moMTok?B5 zL-0pK!jpO5tDj;l%599XwsL}5z0LBJ52!Dzdmvtnd(svuh|{2Sm=zm z=ZT4kWL$2{lz!n*h8H1BlA9K$`jAFFYK|h0{jq-Rsg>V}2-J<;@Ko5f4Dx0Ri zI6IfJ1Z?RH>PN$G`t$ZkprLvkvkYgMA!`)6cCnkmloLp0K9WJ}$L&au%2MkB<8==Q zI9jtqZc~s+63-|g>mIi%4d6oz7YJwr1Kalar+lprv6B9I9RUKEl+owkx{y~c#vjtK zB~40WR;kfPe+D#}Ag3U#{#rWYs53=F%XQ?MBuuLWO-WE=>nO&*=xdsS`EQpt>7*of zLPahkAx|Na!CENP{`lQsF^E^r+Jk!k;b^Kqm@PnOuQQFMJ<5WkTHx6JVjj-$82FTUv}R2 z;Y8sb=UJsZi-FoZ+590-6Qj39M?o_wSm8yJ2JeEyJziU(x1^DkRI>rM;_jc&zq?cY zP)@)!GO_oaHei1}h+rehIleP0*rnB2bIEivN3VMdU!HW3;XkjF-+VC7!rG2(H>QVX3yi3{J7WR@_7$1)j!f*VMQ1ds3XFAo^ zC`g!AI2xU`+`ahp$zyIxsTNS~bxncZA9;i3_i-@6RKqiuZvvjlDauT)qhNbT)Z$ZV z+BHEYzXuPAj`=eI{DdglwS2RYX~|ooGGZ^o8QORjuqbYV^8_;$!%B4+BFY$#;eE84(s+Pz1y$sJD5rdLRn$!EP@tO z6X4+oQ3)WnADJkZw_b}}vLun)oqcOCc&KXjCbC=aK!(gL+9xFQ`3OGWjGgEju0C4v zvcB;4-Z}c1Ws{;I42}~n#jE<zuf)YD<~@J&vr4Vqo+5#SgR-< z_r9+2yhvZ$9yWUBoSB*FIBR;r{V!8ksGQDwcpANBw?9D@O(xVQEBY@M^RQ90^eEw4 z__2>S^4KXOyU%i2VX9+9Cw|hP&9uwCS3<$%dcFOYy|1;H$gwcAwWwL6nS5*b?Asfe z*QTEu%wMNWGi(Y!{|lWPCOyTz?Rq6e;q%&YQt8n^wlZlXsVACrF9%1$vRfQe8o(UR zk4UPt$Ko+Gtcy}~Wyu~jon5QO!k>y;Aiw%^TkdJG<*iL97qs7$LTwG{Nsp?eLFE11 ziSV6aq>ceHG1I#1RIm3g+i`kQRMur8s9{ULOOo3IT5(Z3^3g^*6;7|NFfLHK% z`2YzQVJiML{NSMY&81l~K@KowmQ2aT&4b`v@pp|^+7JqUg96^KYWO`_4uE*a*=dAM zsC|T4^^54>@z! zJ9`p6F5puC4gdHId(M^yMV?uWy1*3cYd4y5kW;`q%?QN0H|6?Rm^*|LxR8J+VSvFw zgb_j2dKytQpOyFi0nU|twO9~3vC@obHsl&9kMHpJ4dLm2s?lPEtWbGAiu4a6E(Vim zihwZ{Nh8Z>pYn%)+IJtOr3&b_1Tg$m*SHS7v_3Ik+ptJ|b#1yx$HGIFRG}B-L0*|) z9sHtbvGqkHl&1*coo;AyBE~Dp<@uDs;hDAnIK%HUR7a0__T%?@OJ{H)m~4Af0DCEn zRol1Xfd~HLj$COC8rT<0wrhryP9aw~k1fsw8~;7CRkc@EgN+qmd-XX zAN>U`a*HK@tW0bEhj_XMgnS$8?1yq}MlPd%t^3WHr-EzpjvqMK{ejz<3# z*B%l6vAagnG8jU0@C9YOH$yY3fepd(=2G%2{cK->Y3rNl9_89|&&M(Hb5>6D1aniR zUvZ-oet^-HjOBID7ON@JVkH%9K?Hu~kPNiPSruem#*yA*@^!^&3Id;Bb}1z^Rt_;P zS4f&=%?@}qs^&#zN+nV)0!jr2-8QYdH(b&6r#m$99RpQk zPa`8~s#cW=6>sjS0dN#P`dcG6<$701^-|bv_wnb&k*T;VtwPn^#AXJ2ujJR#zbes4 zyCF^7YO>`Nl(v2Oje(0G`yk-RDPzLk+(LMIt5Yh?b|ZPsGcb$vw*7_78)^A!FC z4GMexxZS!X0d#~5#l!Tuj9EsutjbiMZ+{Z1|v{3^?(i>)TiCyG#^pq}rv z$$j%Zvt7jd8%S?i$x|Ne<;H?nwS}*TZU0qUn7rip?x}|?2TCDKW*i@EMnzmjDl5}W zRu>Nr6$;_d8>bvwT5X>6X&XmEeyI0XuN)qcCbA-J<_pES5pMA}lqkU=Z9_g`)v>5CJY zw;n@t9;&0m4oI@;dk5re7=3=bW06M>QWxz8Bx$gEvy=x+G^0XBsNEMyJGXx`_fbc2 zR?oeIv5l3|LzCl1{B{|!RpZIEh)}-qMU{4c;}cp|$NynAzvmh6xp#oRtITY`Gpn|K3!IB%2S0ztArY)(tO_Po0pJ`Oe+BKV@|lUsd%lFmlOzs%XZaj~imqJU1)C!Ksvp%jW&; zMEs8OnHkBT==>Ao-Njl?FwM%b@Ga(?=a)S{+bWa0j;B6zuVfY~D!;L@v6tJh4hgmo zmA;FMy3e;UFDc1J?Sg)fKDtjsoqxn0yX!cf=i0A%5D*Z`@8(0UekYzB$ntS-%^1MZ z;TEWKk$0(sGU|_`bg9h-&vG>8_e97KLYQWtPO!+m6@d(*P^RCOC`nPRpPitD-bN0| zYt#ns^FH|#v4MYIZyLaXZE!XfaYDWKeD!(iLs%Kdz}uVat-t)CR|hRX3y=Bn&j&-6d>^yN`Htj+dIlr(ikkC3~DA#U^!#1L~X z?F5#%c+EZY?$lU%_ZK2k$=9zSM12$>LFYo&Sk5}Z{tC(@|8uPgJuhFJz%11Y$Lwfe z>ytB`0+T>+5Lejq(bmr)jYmZr(}d$Y=++n&(EsS<_j&}hB*Y2EMZ7*ZTH9s0zjFMF z{`s#2=o+1HLAS1aqnHN?ZR3MKd2%UCwTA4k{Ud8-Usw+;nZ-)EAYP_uV_g4ko-6S- z<9$6!Xk2V~lVzdW@y(l{XQ~k%)XifUj?Dq;Tv`ems!;N9If=~#dt;(T+jfq=h5AnC zNej|5Mbt_$FU-}fyhhbFY_53Bu#gE3;@q+j8XPfw!@$_&po^Yg^Djpx=l-csT>g+w|(l=#tK<#hA5)YYP8n8 z|L_G-Rb$ygQ*`H()1-!$3jLUicW{(d_oB`!+=7 zzg7-FYdq{??2~@~(-yNFIiw`%aLx-uv_> zJ+4{#k@O5*>y=JHTnYZCQ^5GoNC+t4zb0im|#9#Rx38A9{(XMm`We1865SoK}=ynhMf z?~eIMAd#dIig?|Mz@aQ4j%#w#XV*`~mOuJ;y%TnLJcYF+`%2A~p!~iuGrih2*W_n( zyCo*mHgA1wF=*kJE%{cB8=^#lH&8<5pWE;wrQf{iv8wMUpa_AXn?xZVCvEYPa4*J=D_ z@EE^W_0@pg(NLYeuaOf>zwMlAD^Is%BAhCb9Pw3x+PjZdoNI#7o<>1mT+K!p@*sp_ z^tjx8c*wYnH1EXcAHQU{TpI(#l7IyYXfpj-uY{@ZA49=vHx@L{daK76+rYtl_Q1mx z=1TszJHXR>2<>@yom^C)ICzfaP!1E`?efwdX4UfNR^dMd_dNASmd@{*A_f_U2b-!E zBL$31LAB!FS1kj7o}RbG%igxQDI$^3Tevra5a;jn6P0$KL&oehElE}Wk!+>xVI#8n z(T4C}1CJ+MobO>v%24+vtl*4XA?!N5B}3|nDxqknPQb;7IC9#r_UFUH!dRV>z?%5O z!uCEO(ovQ3Q_ygc?e%ly#Nqbdu+ZSw)KX&jmW*&idsLB7Xxer&GDX-K>652MAgut4ATEwTJ^fsFajjQ%w> zCb$2HUiYQ^*33o>GBpyG2(|wA(`;76%k*vKDbe+cwfUo*Jf7sI?#^bL*R*s4k5ETW zW**|iBx)*=im!>^(>L|CB(PQ%0-zo!;1YxmGV(ZLc^gQ8#?nzo66j*u0%h z5gPcF}nlhr8T1 zd8&{XDy4+2L%P=8i12$q00=I9=M}BofEqP)&5Z~gU_Z+{El>M?GRG7+-53*WuM0PX z)e4;y=FZa4N!r^fCg=>mlIl*=d@#^n#@}4$wfd5*m6j0Quzz~ZSONisM*PBe)uw%M zFe^5qv6cPdEfQ~*4s!7L)d3=1-r|=cs5+wm3aI62W^EVfDd(d`yR`hgyOjUQZ_9Vj zYPYn~{*5%_+p4`X#=${y9WGWa7m7~`NCi2k*dh5>yfVRENd6SK3R2PT`Ch_u+o2H# zUt=3PKds*}THO?e;miMh4M8`_5Apx`LmxcEfE?IYntEnkVEl?mo_DqcCxarR`4H-; zg2DXv6->u7>X37{(^W>xuGxynp54j-quYb+kJ{PRr|YHG^FC6~6UXd_0;3z-muryQ zeORNovR!*RacO#aevo}yGJ3f(($v)KuD4nGP-{7f=rGbzcEwWk&!FP}OGDkZf%@?m zs2_ljM9Tp1-baO`bSO^}Tql~gp&5)K(l|XJF)z@tTaw&zdeWPs4{J$$`G2e_6!Bfv z;LKIIdnTuHY0O$Q5Cjh{4K2Z!_l}XRv)%R;cf*e<4YjscM4J5(h>2T6g=Z36tIu0` zYa9ULV~}h6a)}R?Oy!$_J(b`c1T8}$LqS&j%ozFb_~}1*PQwG^YW*vFrX+P8=JSDi zy5Q|yua52vrY;;T=haIKL~^T1`oB&ClVRpRC^skQ6fS!7Dx~aU~m{#BSk&bm2_I% zKL#vJQ5h8e`S|EZrS<9aW4jtaYn*uNpjoqdYor!WEHdG!Om{M}eIISJ=_M=zZ)UK! zqX)nx9#*fYNi%>$en$J;zC{ypkz46Go4AVFk)ze=uLL{3tPDlYx;FbH@fkh``E}(i zM_;?G$n1(Wgdrhf`^f92P}_9frmPVb6q~CjSvb0WmGx(^;CUos#RYjw$njFxWd8Jj z1BEoOJ+68m)O)n2*cZ_w&nL#g>l_ftRcDc-Y_&DN^Mrav4JmaC*=Kc%9NA@gk*>^! zHCQEsm)%N8ohtz|ow{InQdqfl+y#NzFJd#`X1Nn0glut&f6>fOZrpcONbPeBmLE;+ zsTwt+<7psaSR9{hc>caID_F{v38el00t^6~2jUTu0QIigG40%)!T+_M7Ly7r^L1yqo$v_w)*6 zWlcxZ!`EhTle0AvP;%yRs8J6M?)(T}KRb@~H4PFQTWmh&a; z^aIn#q<@C1LYdD$VIU8}i#l-SgP8teSc`eKYaJhVp0H|PB<|ivAUMglp~&Xi!T=6G zB~d3>3zl_{2zT-;Un-Jm3li=S1k24G3F0A(kemWgD`ec7h}8w~i%9vzO<1kD(34}T zHG=woWcXYB(@T=-8l2-ZnOmr*ZQVn0P{wtxnQ6;6B$OniM}&BInsaNzV@dQ$_|f_g z!#nqBvZ`cTs)gew_HUs9(E;X+W7kd>do{c2iLrzIB_-H5Zno^4FmF`*7$`hNv&f8uDy5boarlV3vxJ{PL*i02{vk$|GoekYR}K&@^v*j536 zAik9E6HZQkrwCYWpNc$5>FNTQA|GVYw|a+Clwajyj6%BIX_CuF)j9Nwl$_z z>z|`xGEhhC$de@z2cyKPntz6(J~7Ri7px_i%4b=-Dy(||**kKCJJv2e$yKqS2;eLb zL5ZZ=n{_Da!Peb^6k?kZaRPP`mvlbvv!&dWO23Ortee5#`70FM_K{%BF+JA@%W?N3 z?8{I@Zfj`g?g}2FjYQR2ei2W1c}R5`f4X`q{qtSK{P14bF~)@YdmLUqc4^RbKNUbg zehd22#w&HYooB=Ks8&q&dEabLp;ZHrgp92oEMVYmoC<{BEYnA}vPQb`IE)w4n||1@L(7v&#Zdzj~_C z7If@(2n(`M{d5ib2Tk(z7j{Leabnv06h<0=F|}V?WwSo~M{QET6f4BZ9jPEM1DJ4a zO}L;-)X_xt@H>i#&Mi+^{GGNSGnWBLFX-7nL@T;ZrUiX)Df`{*MfX`kU{MR`JfIJm zw#=7>_?Gl&cIN|lm9UP5^Z@Y4lHdd=A_5i*3u9+B70nVQNwA-xG9&ERn{QyDWRfr; zrvth}gz^t;Wy-f3Qn}}?j~IKbn3cAUfw&%It8RTJ<9gWiBeiEDj6`NQ#Mkoje0D!7 zAIgw|%vis*l2EmDegsL9Zpk#YA8+Lg!pw)=XCUhn-$KfHv+d1j0E#Hw^Xi~T{(*5n z^wYjF;tunDwi9FukNNc(m1hqfWRTXgQ@Vv@FJZhh9of}_-8hm3h_LV=*-#p#2#SwH zW{Nw8QFN6@KWTy==1_a@F^7n;o~d&vZOVOqQVG?{Mv*gKn%}+$&TFZ-6rwfxdJk?H-4yTsyj#agR zEcx@ANjzEJ)Fre=fJ5Pn>lMG&H^FDe^iD`YUZoQTExg_HMnBjFGH7~TKJz^@no}7X z6eI2P3mWv{D0w~Grqjy;6U4su<)nl?uE`}EoK4moXhzCq3TQV^gd^)dw?l$q$WV;6 zq7pGy0-@hCvH2+bA&^}y)Qj$`34r|>kvHwcsE!>U>(qC9^_)BHntsy*R{G@5%S}kOrls^U&QL($dlm(%n+h-HnuVBQ4!` z-B%ufZ=ZeEnsbgZ|6w?76es(JeVslj{+p2&Uv(#<<*@i<6=O=sX&0840}&_Q2MWN`9o}Xe9Ad=kN7NJCacT~mQL;sgTJcR6N@eFAYzi~a{UNh2M&b+1;-F}iiN*2<8 z$H}SAgKG*;lufty;tN}+CE|dC5DLsVsHY@i zH7lfJQNWmu0wtp94{#XxUYR|;_pa^$uq6Q7P3tm0g&w4Nh!w?7HnXGsfB)k3H0zFT z0s_X1_`BgzyS}>%+{Oy@guVN)bTs1(pw$|nKKP3-wUr?_MVNk`Ay8v)5OR5y0raF^ zfW-r~5@367lZi4xDXPHyD*p6qS$njd;Ig8Xne6j0atTu^XJ=*MBZ3sqw%pU+)dtpD zcY@P*qIK4Impld0gxkU1rNnig9B8`Q4!=2Z{YG#^Jv+!5EOf zpxq=xO$PRYTwI+mk}sZij+@e^_>)Tcc^#U437?f%myqvGLYxj`TpS7@n3pKYkg)g? zhXHneXIfY#iew{B8gByn{==%?|KSjKQ4EgnS0&W5+Anjj(m$qyG2zQB||oCGkFq^D_Yyqywp+Svp4nVAFdc z|Ihy(n5`uu!7woI0BNg`^;QgFw&2SILUxUD!Xl+lqABQT?VN;cbQ%#W>{RG-|8gry zI0b_aBF~H!s_-zgSEYkn(zBGV=va{@9JW=Ajxwtx3X8s}0k1l+M0VY=8yAqqi0e^- zrO)^;4|61djYjy^Lze*SK&LNOjsI zkcZ3#VJ#}6}LFZyBcZ;Qgj80}y0r{CSHnj;%~>`8dEv_>Qd*pu7$m*$$P9HE@; zs}_~R7&Hz*U=d^*P|b?#uRX;+?77*KUlDL4HCTNlA4QQLMhd;#wsf{Y#heup8k^sX zq%XXSTtX#Eh#wgxoS5F0v^+f7i~N}6aELM~DiO}C!0?2-?_f>BMmP@MwaxZcUJ>__ zL`i7-F{Z5sJPwT#?2&JbBmH1c+TCTl<1U6xC*x1Z?~8|=(IDHtk$l|^=d-9L(Sd*KYY4k{6~6Vy z3!S0(@t77=Qh|)v%x#DA*XUJ6f`CEMsDbwl225Lb*za%oQa2C{(p= zNcDW5H2+qvf?e^RU)Jx-T448g->25oLME|>D@I1ecTG3J6R8ly5&u7DqrtDXW;hTU zu(auY+%etN)&FhJ_N;swR`}Q?_lq{D_n-qh4*%u~6_@5cF@U|97XV)3wulQT4KF6R z4b6(eSxsa+q7qV!74jAuk!!Z^0RuE;D%0On$gc%3Vy9qxOG+X&bXdE-8*R{pS`aHB z8tUhcm+!w5(oN_p^o#ZU$RkLytM7l}6U;iMuw(!C-55&^af*>%qdJXYg#X-ZanA}n zrR4V4$-^q7bpHP zS=UbU>n3H;a$CI}f!*b);H3C7rD!{{MsxL!;X6;uBG;K)SajQ3 z#JSGw2_NjafqpF3|G0u0mqIiW1TxISGRR7rj~7*=iVvgAs!>y;vbiiN)t$tD0?~52 zc#%~+n7kZJRt`-Uo5EAkW!Ot`W#z zr}2!7!u66Ud*Da)dHl0Zi-q)AQ}df^wBr+@y0-S4q@>PF^TmbE7uSJUipk4K(bpWl znOBi(CRo*`RkuGSoz|6>c6Mg#9lk!-Z?5J)$zezj+@{ z+8QfnO6+G|ol59-wLwnKVH(Z&atYm}p@ zaYUyD0vt@U&TXvraX$B&jvzbeWEcsO1lfYu=R?+f@s0w}FNz<4LCvlMJ1O%UND`d* zWPqd9wHxA~!Fn14tI4Z?+cJ5_f%cO+9r`7XldmWoAjp3elASGT9af26pk!B5G6cI$ z3e+%PrJ-UaAea2ai%NF{DSh$^|Kd13oQoqwbyO7sr z_~Vw@nCEPb=)2qRrya{bNxzS$9u2?U`b9KbettvV+hH35#gzNiM(sg*R8B?~W?ec2 zrld{5#hUQt1@{2ZT7WCrLda36jnQ~j+@$Hi9&c_0eJbRCi)dw0RrsE>zcfO{s~Pe)FVAxlv{?sCJ^@$(2kC!@eQ zWUogxIAzPo0cgp~u`85|X}C-Ctg4isc@-U6X@}U@Z`5<3P`~g1ly8HVh`ux8xcisO zPIn))1$Vw_&#%$Dn3t1(vJL+nu1n_<<>-Z*4iSCM)SY0mWv%Bh<&TVgq(YmBNw!sPiT`+bycm2EW*RflS%kid%IU&j5TI_yno6n1*K(FnS?{(8=-1ye0 z+YXnM7m8$_ahXsH&e^qXyocuoHE>7riTV&cx}WxycXDmv&k90y1UqRSGI*H30fP_a zr9%*LX8a{7Uq|o)EIRrbQfXr&3W5rLB(Iplc>>R9jl8m7R6PucY=CdIm2fjuZ~VQ( zL7;#-yx72<;wFf9v+XLTMs@(tScyFBa+$|6uYh`UVLrc%=>jwJgQ=g}+Y{jzOIX{O2Wkv%r4x6H7KU+v52t0i;SY5Zk!EhTr{ehY&IC3dB6 z&SvlF=f5KHJ#nXRSm56Gk?dD&ZaE((*NRpqlJ4RB9 z7N&`aesHiO^Kzq6VMi@9fFU4YZ#!i$_IA#Fdp>+TukOR|lQY8GMb5Cls0fGSb$-UF zt=%;-+A-f2%WQJ{sP?&>aO82z+Oujk@1~tS`%=)0ZMjwS+|!&To95725W{%AL8U6E z4{L8rD;4msuHVPMEYH&n-s-oK0j36Qeg#%i93$gV*-VE2LUgs~lj-sL3!jvgrUM)V zyUmv_Sg+YEmy5@2VTj)<{b2eVIQmraJR;3y>nR-`oeW~5HrI$ah!AdyPd|QQkZ`}+ zc)FbBs95wSh1{rt+xp^$e9+4S_oWL-%IlwGPrBWS?bl$af?(waRX`p{ z1@XlXB+gxI)7$J8RtZ<5m%JyujC)(z0%2uo!M+P}#_N6{a}b@cHP+ZxJJgAEQ`=Ky ztu^cd4@;>J90`Fue!h|P@xBz!vSg=6-t4^ZC1^rF!!M=MvDR4j3n3U|kfOo29P|C5qeE$>kM3Dk5`0VgpMoC@Q{=C*k)2|7RgaJ09ocX5RD}kF(iIYvy@-w%A zQ<{)`Rpkr=L1otG#Plc*yybACYJ=bf7kGCrk`v+*s3?l5gKrWK8WL!t_`QrgGRwyD z54J4<&c7vCOFvvU4MT0VD{vU(>!vKm>i4ZROIAhd%%u!~$S{%=!(0M@6?q)NoXeZB*@>pm|mhSY0kC)5Iy=5Rm7?e;?{Fd2Z zk0nI-=#06M#fP~HQw_&Pu|gj?+dinA5OIE+)2ATUM?aoYswt1?=PWq?7yh8=%aWnb z@u`RSDo3Wh2t&q>1saGdQa)r@j9m*)R}S%i-~ff&*S2EytrMYlBvPYz2vUNQpETx*zBpj;2{Bd|;Ug-ew#6Xl}959wZ=YJZ zQ{k8vGw7FH(7i3>33^>ra~bWJA!`aUI0lkjt#Mc}?mR!y6hdOCgY?=W;?kK_U(0aD z?l~Pg9+{&g*|ulgjWO1&!CAQP;T>ZPx?>yE%I}GTLwtwCMVYA8tDAw#`i?LF%-)cx2`(TsspEy9I)QEbeP~Tml{ZN2?b;9+7 zFq!Fb$DtCoh&Z7aLOd)n{{CZ6&56afl=!o4h_+cOGLcT^19@%w*uR)Ut=d`TXKB_^ zwzJ|Od~c8wUCb40s%Wa$FTjDam+MQo?tankh_D=+u+K~&|3R@oIB8P1{X_hFiSCTU zSSm=#6Z4V6p$ym!f>7)%#=-+b*r z7>#%7{3qUaqq9iC%gD{lBlmSnD9wq`WV^$g$l2&UKstSE!EF_T?3s)$mmaM7)i5j9 z>RL&{ZxbYh5|l9F>uCF;memtNtoYX&+{P^NDh3j}ac(u+@HJ%)kbiW$eeKA1n41 zOS)Iw?VLPTcyA&8rvc5^XUU!H+{|*}xyn(2HkKWY?f^MSW1O=%6d5hrdu^({v3;r1 zJ9!X^rr_gUsw%grwE0pt$+j2c)N#faHx1pWc+Vx+x<E=iilxJOaKj3{%uK;icux-m znS|^89p3o0{goQR?42%*ZtzD@>~R{bEU`(=#B#hFCvV{J)Os1(R*i9J0X>|{)q z1bXiOo4D?k=u}kr>(}f>iDF!#{#E2jIU#_zciDphtu&dzBHH8*vigoXT<_>ujMVUq zsOdHVK;_p@VSu@7t;?e$zQ?g)OT}%&iOX|g*=?g_4J^J|G z!2FyCnTZZnohhtJYduc-p5kR6^84X!?XODHOGwP%c$xrc<=p7T)(D(QT56vPy*Mq^t1C zHM!-f^!&RG!=0XXRPJ0Pm`_%}ljtP^D^B*O37c`-#v(q5jO@_Ar-S$_almOq1AU6C zbKy?j@w`8%9(>oqHMy>ev$C-*La{H70GrqM=NEynP~hcEEAF_Fv&uB$3;I`jjlnz| zIl#>GGK8I&Gyon6#SrRb)8bwWxc!Ti=@Vh1`XXb0GZOG;++UHu^*iW$5dsxxZ0UF3 z%VFtV|H)=Yo%|cdLk5$I3G*Zkn&_tqeWzy=Vjc$g>{vi6LVgm>`Tp1&EhRVB{d{k& ziD?`EsBi|gmQW4xISu$@P>mh%+{)S!)Zhs(z>E7BV>goC!Y0vsk-BW4axyz-)y9GhIuh(Gf5h6!Ckm$5hyq>wyNZjwqh7;GYk~P|& zEW#JX?~DRV1MlGm}oSN0o59G+c#|Q?cv5iK`Ha&KS%l19?m# z?JN8Y=nJ=6Is_)(s%Yp>cM8F9sI-MzlDgxQlhU3~Rd`l)%mUKBMW$MrM~>4UMr)*% z0^e~Pekb6#JCevB8>#hZ@gt?HVop!WwPUoErov^&x|!#0-v7%kkILp$-j?7;TyRi+xzI3S0R9WFu!Nlz>Ks0%LuPnZ&i-YM#IV2sSK%}6u*U+6ph5=4k4_zx zyF`^#0z*$-n~s66C!7wb6f6btsmfXMex<`6aLaGVoaE6m9f=Mu=rc_?rrsM+Ac_4} zi2RK7OWU{Z9~vlG9t3>jXYui872TeDXspK>Jq~HWRenLD{n?VCxt&%D$0O+9uR*1U zC_--wiXI(Xgcr-qK3AU2_dNO4f_#+>!DdSy6yJF&<^G*lHyV$p1i&lHHh!@j#+m#1 zO6|30lKNE6UG&oVxiL#dc@2iA`kqeLopcoCr5Jkh^^=v2O;k+GpM>t9?ze}B6h6lW zkIM^pr|zBd5C|2f$lZqj0Od>ZLT3y6buY!sx#$+3NQFNj-h-`LDjH<<@4z(KVnG1) zlIB&h>wKZ4|GhN&EME>)GUllHf7+tZ#hZDEI~Cd6&!r4^DH-Pzx&%mGe98pv9kCHH z+dvhr@cuGdw8W#FR*DrHg19-mh-rgYBz;YtsvXnPi~**dn*Ni|x;*54o;Qle>mEe= zVXR$4Nb^PLSV~`W*;n@02b!(%%Zd$V;KHQY_Z11>-Vjp6^KEVu)+94`w@!T>nUJKR zL27%>UZR&!W32Uvs#Dev_E*4>fSS8vycofZ*&q`R)6)u6Rt->Arv5rgV#%3}*ck3! zNNl}C3c_QP7q{nGv=%2zvCB2a#9}{A_d=SbCnHU_?>xuybY(ta-#aT~TwzMke}e`; z2OA`T-9|>Jh1A0m&K_v~4tP|oB%*J6{jQYSAp6?{V$tj^Xx60*(ld$wFH6_>UOD#ZJxO=Q;iz4`WP*If7S0pypwMUjNNaaZ&CRY&~pXGPaV)>!-XDnEF0tk(Q@+LLzD44nG|gfg0oba^c(V*LB5CJ zQzayE^m{@*9z2cHJa)c@6LHN^sA>Q~WpX?YWUEA4olm)W`4e#Ka+U#`Z$J~6^^LBr zF9UZi8xo)GOciJ4Ao<4JQ82^KPI|RP#Y0*mpN~~uJ8xkzLir0)9KHTCcR)G8ZcmF> zCPinkvU*@#QYd-&kab550lw14)PwG+htcpO=G}bo5nl73v zvGX?lkMrW_x3 zS+BufCRcl^MW(^-X{>>cU=sANUSrC3HPxMEaA^1gqHRUX?C!HzVk$3>c3H)T^zEYX zGUjeU*F#?(vB%Tjxae@+&p4oriFzV!OL5!EWlNdMWrm$mWh0mrrwIj1k2qj-?r($Y zWdZkUBRv1BA6HSDyA;Xmp^);lxo1Yek)7ovDkmYEZow+^QOt@6;#68wV)vdVn&GxV z_{{%Adf+@JOQO<%IXdb#alb_}PuSuF7o`aDr!(E>W#LN)0sh40pK0{>GgzI_4{J4W ztFx>@kv~n8zhT5GN#?*BrrnL(-XSU(F=s`yx2t5+_yz$hT$_YBn>8J(klc218YQt^5j#SBYNa@H0bOp7|hGZ?_@T5nJqZP*?LK?3Uem<^o$yV^agEqxOEi#Xw&cLW7~!!*ybf;L;iy(iOM{&UXu?fxt4h-%Rkp9?Y* zmc4^lM@a;SN-%?4CG6{JZ#;`-#vN~b!Hnu#CPf%TM)~tUziN}`!fnmBReqjrceJT~ zc*4@q*X`BRWCA#V{J=)8T=EWy#X#79&e0LZwV?x(yk}#kQNyOV!}UC?#GgA=#c8RzDukgEtxCUFYf?OJ8U~Mz$Hd&$4&+DQCmoY~0k)hjf&UZ+1Z<-qg9VI^(OQqpwTwi~~x>DC6D3 zW;-5rsFw2QzUfnpDzqyOLBZJMIHMc4pZ^}~_aJNW|4itS(m`xB1Y4NOo_J}TB1&gArkVd|mjsZH~E1u1`iVIcui2&(WTw3UJTIPyG8z= zxojG&iPx`F^dr|mWbkOM>ZyJhav=?rj#bgEMd(GsA)ao#zvC-EL(SvfNlI17f?&&W zHM4^aQ%B9qUgGxn*+_R@xrQ0=-$%(F>j%hgz>^8=D z3KHvlx43}^RU%r}@UR|qAW|eb?}b%%{?S!kob6eZ)aB)<;>_>1)#tW#z5N72!eg@$ z&AWEjRXsU0v~lZqc6;{##H1WYk5~Uve_qJn#af7N^IOap%h@7j4UJoC!4k|PgVHsz zs4KO!9hkLl)%Z{jYn05Ez|+%S?M_J#zDO(f{c!+jCU-t{SrHzj{>PKe6?}wR!$Ada z$0ao}-#hh<-p22yti~!PyFXhkSWDym)cMt1Mnd0EGxO=07Vr|X5qwl+>1V|9hTFzq zq*E>8xah~1%Y_kZ<1ChZSP}f%Qj@%hTWvI+!GaQ1hO^RyX^6KE`_1Hq^AAY11w9(S z2l-3dXbHnEjDPg#iR)Ou-yKF9rv{suBK~(9=~y3q>m?}WY?_=&nU6~Z`p!&J>c|3y zsG^%E&vjpcF4Vb3Q+p);_k0^2Gl?j^RQJTBtv&^QkF=({5iVPVFVKGrM#>07z;Lv{ z`FG!PEgBRw6qKx_m>NtQ=k*Ld5`waYRt>yufQeF8@Z)TXT_n>jEB7W5iuL$Am12Kn z;dL=Yg{V1&s1GoVl~|9ptu&@J<%lPq@n(En?-Wb3^0Lo?eIoOk=q5kI(O{M4>&l+n z+*oPJA^wyob5w#M)MYn1krwgyBn*ghz{()qv6mrHaVh>0?k(2cci<^Hhv8vlvhDG5w@#}sSML5w zP5k_%?#UJ_csDpH#woKdPkqyF|ssvdjfu_OI z1ny`8zq$HUyrs&ah+qs9xLA*ys6CT2PIfDrYOVICy)Re3JsD}d&yD>zl9p3?&rLyL z_6)C2>YD7gMWzD!RQY6?9anJstfE2tgY>N0{ZCp3@7@<)t=|m12+9evy!<}OdmxH5 zp2!KPwGt8Fj%q0($Vz4=O*lsT#=m%55pdxsqnJE5{Uf@;EiU-2NzrBwUu>OXRMI6) zo0#>Ao-})r`bI}1;^kU{rs}98xP;x%Xp1K|x*2l1Ij9Sn_o6Smj!k_UPAB4cFDCmJ<_d`U!lT4|gL4d6F_101_0$6QZT=F|DgF5(75qRy7hN@8T<`C3ojg z2oB{ZSQFg}{mO%k4UZHuXZCFUWF`om<>wWU1ELb)!y}OjEirySC=TS_$}68Dae?R~+aR4{B;d6<6{An%H zeP>MZ;9-d9G|pKwrh)YarIOw zZ~13aiNrgqRpQyql?DXe$ji&rvTb?4qlX5#?mPW7HBw95Xy~Ln7q^BETsN#$$1@tM z=(*oyE%5ZO#XfpLKj@}>Vp?F^8~@(0eonv4@m5%U(XUdEtypTUDIp~|pv4#i+}uXC zx)JjtjGXv@<8-?xqGnVDHvtFB)__(|jY&$lAHD#P(g{XzA6!U<3F3nLkI}$O7WiCh zdk0ZgUcbe_BL04D6>2MoV(El)Bh9nj;UW)HV>;qEXv{%PMkFPj=cvCs&U(4r%2uS2 zCoa|o4zg08+6!OSmJuasnlNM#r0lYeHGx|#M|D52e_40l`tUgyYjw8hLfU)qZq`(m z3*GDKKq1(^LXpx&n%L0}1Ipi8A7@>dU+S^slWUQz(}xQs=cuI?f(+UazBz(zr|RC7 zK&Zh9={s?~caWGO=HDj1p5I#nl;<|+%i6Fy{jsdY-mfLm(laHR`AO9Y;o94NzQNpV zYoKseLU%t*>pK;S_HQ9pPmBaDr+r(DomJAn#!b*7#cGuMUyi6)NR|HE)QCnFVkp?P z76di=4;@NI$`2KHk$*>zNFx<13SD1oN=AHh=HlSyLYUMP7){>_K*T9s_r6Q?b0rjT zg_x3{UEk~Soz}Gt87{++^r}&Z;uqa^qo*Hy+p`KA+!73=re?6((~%tDI@CfqQ51Re zkxiD}wQ;=G9m2dy`Xj%eu6XLlNm(q}S0*|=j(_;~G_?ImvFmU>HtiK!x8y1N zvn!Uk3R++$>d_jz>bH(eXDsTq|0s?vQej~Kd>}3Qkkp~HF3{Ck=ytktfA+BUzrEMz z#MqEoY$bf>+``HfJCyCAPEoz z83H7?c(|j#1=WP}AJcsI{H56ymhb0dT*^PF=|<+5I$D1F27xe%fak?k7&bTE>wWNqMUw~bd29W{2O7#8PSjG@IhBs59Cm2LygX}lK&+vwd{M#_C=5T zK?T=lzDMMc0uO&Y5=Ntmd^O66EYtsv_{Lr+*!^bYWF?P8^k}IG*=Lt3kIO+93GStT zI4XueevOl$f2Hot>MUL4up=VGhqMxJ;26MH-~6g10b|;ibNcxK)4KZ()7(nAOL(a= z?w3RPgHQq&u28!+7Lt}t<=U??QJXKvU>vrvrDp*;h4z|cgiuo>L4SlBJtiXyJTJs^ z7JYozo^v8b8ssy>b{n+;h;igMXW;@*Hz<(E%HEE0nXS%IY9JJOj7!+Oo*5gL!LSdZ zr-yp%Aq8!dka^C4M!Lr1Z7sbsMvmfISI{i^*E=bR1p^7itl-n*?iQCcrc&?2j*g6U zeE+c|Uw`m8JLt{^LstEj`k&UjYQ#0oknmAtf*Q*)_fMWRF>NH9zQyJoO9W$yaa9xx))pQ;wj zgRb^PK0$Rv;74-U`per_jwN-V7f=c0Z^vu{+pXK|u44!WbF_~4bZu@5< zDV;AeLJwVR^D|3^^lh8$YFweMM@Tn=XS6g##*jUbns!_uWC{?fSMGPlClp}#Lb)tm zeId7v3q^XmGE8QQiQ_2k@zle6|1?&88NKcQL2u&SOkmp6bikx?M*H`qkM4D~PtYnb zmS|D8HPyC)k^dIh@NgT(Vkch7I)xuu?+ix$rNmoffg$1cdevgIZw@ustaM8n{%XsZx^)d8>6Q z`^|EaLdytf!T{1Pc*oBI%)Qnf^uQx|2WP8jMlb2b*4OevJ`+Sa6DXFvN67J4Zg%T~ zv>>W8YKhY1&i*xTCBM<1y?_V?JUW{Cx*x%j&%Q2FQui|I=)T*^em;k!IjI7^J@{Wz ziT0XqI!CuJzkL7o%=W7zMMDnPv)PF;Jo#g_>1TEb$LZytUGDakV1D<9z7Jv`tTvI* zNbOV4l0QzBZf^-Qw&_pPA1Ek&;viIjRkz>6rJi2=8)keJ`cQzRWS$jEPS9nKTT69Y z3+7QkbhG_&(n3cak@c?7RSQDq>L458Sf7^zm6wUaJaxjTT^%2lGEt<=>?jv?>B;;* zAEQ0VK}XPEr7DLs)DXb%fPkWd6GS#Mg=B9H?Yc!}gVp!9d5JX}#CDa2P|hbXwGjZb z|}kN)LGrMZB6tvU=YbYi#r zH~%xR5IetzYB;@XY3TbzUOS?ZvVANVuKfM|@Gtz2KrZ|s{&@gZ`nA@5QBrC?5hOUGa3i)_Qjf|w?3tky$7DQyITJ4eYD?YsW6OP*d`lLBzTP_Zk1$qOjnWW|g+Z}=$N=HQu`PlnO3L^~ctF4vvIj1D0_pX;Y5 zrVPR!-0&xDOQRNSVILSQqN&Me7>IwDF*zZ(<4;CjSjHu1*VPB2++cEizb?Ax;1}u$ zaY;!J&`@3^gT7j?y-xopvjg`Rbz(nn-jPOj6;;|Pj9(47`~QzNGyuE*qn<`8)&8Go z^W!1<sYjc5U?B+5R#fUCQczKZ=Hl z>3q7vUshfY&FB9j6f1l~WN<&C;jtA?=XZj5Z?vi}u!odFh4&S@j}}b77nb3Byw(M- zJkY2(72l9OOVoWMChynflD9FJO@KR3O`~1;(TBBm3Yp;(@DQ*YY$;SN|FAB@k|qj! z<^#JIuXU$b$x9ao&ajxwq*7aDmKRqoyrT}vM2=u~HdmbGg*q`s^ldOx^}dt?Q&)nC znC-lG+eEIvzh?((Yep)e0(Ss(nl_1JrHxPRU*3k{y(?p?feNdq?S1GFkSj(+E|Guy zhJUDD!yvws3W^Ka+9cnZ;xc`i4aJ$gY~;ME!8jCGx%(|6uY85MtzNt)B<*1PnuBsg zA*cWge0BVMIoGncc@2vGqF8=yZ>M<7*O_X6_Ne5=m8BiIg|{L{G6V&e(8a^aalS{| z=>E`^!#?)hlgfks{re|&OZ~$Gw(cmc|6Td)g}U)rw^?0h6g^%$N{QPt`R_X{fjB}t zL-O1qRzc(1>>Xn?rktEHUkxdFXDS0I4QOG&*+ zMHu19t$F)AJ9XZ(mR1EL+-AWO{zoDg4~u%q}17fH3?j|J1A@ zOSy!%Rx*wBtJq-YRMa2;Cy2G=pFkA^9v8xFqaQdyV+s`;blVi&Yc=S%yIHB+zdu{% z&GhgUXB#zY^ey1%_fNARdc``rOJmP7p^c1?b4$f*5D)D5>XOIS1ie&Bu&cScf4wny0I4b<6cF9_fnbB$zMV9u1; zh)WpjTW++2u@g`Zrwq3xe-qA1FAV*jjs^*K{MIox6T3mlud%B(WgPoYpbAcG$378I zpnDu6`+t~2b=DKwPddt8)doWf69YRa=|_6$hq{+8>lSSl6BavgiCTJkIaB5~JA9$6 zuYFv`@E^mEjK)d=9RjIkmXmAp=UMuO#`}EzTG?b~;+60Ddx{x`drQg*rfjWKG`|qe zqp00U71D6tbt&izJ{x?C!G!veI2_O4DPcDs^#^z$7;#Pt%lD7{Js=}M+q3b(L>|&> za`~ED)A>}=W*{fV_F+GqDoRm1!u#~?m(pln2YjYdwA(AwmY9j(65=plPEnpbTZpz# znpsak!%v~N-aGk6pN5AuVN1_H%(b25(ury@1CYQyONjlX4-9wp^sLHd=#Y@c~AU^r)2 zVN#iNosy0+XNfNo;LJ(ioH28EUs61;-^kBfOV zHL+4hsm#?;^{^pwaNOmz$5^B3R#pc!G@|`+ue)$msj0_;U_q&hKK-z@<4raIFpV#o zI=|(`1^k#-aadq*?e|J~Lolji_U2_+{w^Pq3gD6L&PYJet9W1jxpcUPka5V5B4~O@ zrq|OJa}Ru8sb9(8bo=g&BZnmW*D6;y7l(cOr(uh&2Z0t+jUTRJ~^j<5-`wn&Cz^b47e>EA7-Sjs9h!?iEhF z8_4aCKI`^@=NYl3efJls(r#3U`}y_?abgdheWEP=GAxhrsT;BK{rz!LFuae*Q){E#U~SK2}kz z6G}VP7%~5Td&*`WxZGcw8ofA7o-qF$^(DVI3Q}FgC?A30!tmfi^N^&4?{Z)_Qy;yY zy$z`*ZlawLrJkP?O!-u>Qx;(ywW1J}sURzGOab?YpeRMfqnH&kk%8eI8~M=bR<@Fo zAa0z(h4xgw!2Y-FA~w6Xb3Ud)OQlAgPgy(xT%)s07cn`5>0iPhBi*5B8ech6*a;^3 zDj0k3rz1`Lp7POf3%shLEg6MA;mUCl{dK0N=Vd78ksak~_UZW_;IG6f^Y8M0^_YSa zPz6gGiAb)~MAr9CiU&&dtRRT^5Gs-P=q#ma2mx4$3yV=0RzjaRr?xo@C${?R5DN`& zBA_ImMFM`HnLG*z!%(u>1}!!Z)Zs5NKs+jW>@uJ+(4MKKMv86cQhQpqwqq^Mxw_M6 zw~K|wY+$RUw{@>`?PTyKpM!dYBY80@@tqyAeIyX}Fl~JNaUTZSFP!R2ibQP`d^KNF ze*bTc86dH*@qN4rFT(qvsEEG)w8twNobyVT1RNaI{#aCWuu1Vzpqh8z$CmXYj@;t@ ziKNkYDcOP1TzxX&=Rn2Ck8Gx~O~w}uVrWG9m}?HFk^HRbZW^!o*8P?ESaLV|j2Cnp zpw7A&#zHtHmxVZJe_TnQ^@;kcr+%1aGMx$QvwJ)d#*M^#HKt-@!cR*4#_#@SLR2{5 zc?prtPS%XwOf8p68DJKofV+UKkaoMhmhdQ>8!WUN&41a(L_==7uY7)oPZ9m2+7+qQ z(5Y029`rTzLj%m?5@+OhT?@)Usk0~RiRAC02dyP3VRb$U#17p{EfGdai&ERVt&!#G z0`*=0myIU36`QD)l3M!Z4DKv$_ z-Tn2r(~HY>o^-y)HLtCelpQUw&9!Ao!|$bG^?_5$vznDV_c2Velu)V9_aFN4dnQNy zwUBnN4h0kJkO&~#bk^c0#YKSnhf5h(0(3*hVAjAguGSN6G7|7GqSpY(e4v#6XT)=bb zqeG4ddQw`17BBwU6!HBE@U_g*sL7Jgr@L-6gPnwFJztouwg$Wd^-IcOv8LONrww@E zDfl=%vr3`if9KKuTmorB#5x|EmgJkr+vR6-nctw#R+E`|u2G z3nV&p>4RYT1J`VBgN-pW`1EYkKK}L`v-9p(LE72}0wL#7%vQ%y&u8Jzoi9;C=y6)_ z92m*F9OR9kb1Ls)5e6S+kc-&=qB(!sg`}oF9jvTh>}vUsHEepFmfitz|3!o$z~vVe znPzBz&(rUxliKRqvO5+I3I5D8;qH#crn`R?qBMU$%A%Xpc+OCv^&@;Eg6I;r%eW=5 zS%4VLwZd}ad;u4Pq_of`9h-Ek7ni8NPJqh_%lCTDnW`4mZp1D*_%Uf_DYA??p!OR* zB`G05lAKQVLNrm$ww{jhWgUck5WFu@T(nV^FWCOo7hZTNsnMJs{qK{Bvwp{`dMv1& z-}-1mwg2eEa)Txl#3x9mt`(@oLP^R3@Qzr?q)4v0FHg(qgeFYZ?qmbf zzl0WoV@XD`c{Z83foV2ru5w7N1OPH5vw!&()+Od#hvl(ors#^4_CLj*>{k;q7mM=5 zRH7jW#r_VVXiIQ0Q_MV9C%{BtK}<1_x?pY~7m7_SswYXR5^LfGt3`T(mcK^mU4` ztD;fLnUNf5%HO^u57qLq4CHAe;|`4{hDzHZ05$V&vV#F+AIH>|Qs<=AGyZ5N(Mt{L z0OKy_I{L4^Kr`!@4{$#gVq^&De((}#RNL0G>}KXIwK?lsX-0dUGexEW80_UXQa}=n z_&32OIWA0|(0LMo-jl;IrxZwRKgO?3V#Bwzb7ndO zy({@dbt%EgIvr)-u)JRWg|@nez9Th)JoYlm9L#WeNwodf?mB)nfi+lfxznkN9;nqaoNys5Ht7lUvz= zc>At!5E{}+xDGqaV9eVbsW+15J1Cd_AxtC3FHHcGR;WMMqBwvA=IFs_Cs|wQgu}9J z1dO4pjZ~s@ReR%O-^S)^$rV-e){bSBE*QCVWL`9V?nTAsf#1ZGH&UINT~|>w!BkKR zN4;-|q)ju4PB7N{8VZ=E;;$&({)*WtFd15}#C3`W{$!e1h`k@*S5{sSEp0?DQN$G3 z#Y{6bFi8z>Bj_IFwqbd2@k|+ijp8l0$?49U=;?qeh1%_c-xoe$5DQCS6E2>&zc@j) zTXyGly&dt;8T6$M{otkVp2qZ&m38%|QiL4&Z=K~j3OK)<#ivJBF+b*WBWk!L60+kD zM@a;sF=TmGdkj*$2mSs!wB)* zPE7S5N!0;NMnFqQA{a3!6^po$S51@LRV6M%tl)bFnaN2tp5!L%)MopH7nMLGZ32q- z{yAQ*A$kk71ynm9tqm^~@Wx*zrY)b+nyR;U^@Rsu+c|*~&@s9$%vg7DNuw%#u*_#n zhSqEFZDSO>G#&PEucH~=Drvj{t}5{?5$32-#Z@ z$HxZ(Rj#nz+Z%6@$U3xAgp+7#HRpDXRGD+?35zlIm@#}K!<9-ooFDaULYMnPpg7cn zZP#$xL-p&eCs}*#V;1IP-6+y%JXoKB&41yg(GuNi$2(>pp9t`KYro@-PFerC6re!@ zujx1}ub^7nA`R812X-K3_Ap=q9!)9+O#69aa71J`Rlp>Y{87c}W@S?Zq9v8jlM07H zC(-s-*f*I$5*sliXy;yV7JGQ3(N03&PZBcJbm*~9Hw44QtH+=Gpp&;3>b+fAI7u>) zsv{xWq<JeF&_W_K_5l%?-D27g?caikurve4&jm@l5 z@S-;G>l*vvp@uFSd3cDfnXS|+ zxhufU)oBX~Kb`#}_4Mg{RpZm{_XmV$%|QK_6z$=AV{dt7Q9R}&1lwi$61*oQan}=d z;b(r?2no<+Vcg`gAt)gacb!OzH65{QXq3Mxe8&&?)-LvEzXPM2j~;?LE$6%kGAA@l zaozS;B6`MW>A68wNvX}@)vc1Q77NyPHTLKk8F!B7u`=HYTl_6ylj2*WP0KwpE?Vha zjsD>igrM0p7}Cv3{;p!P#x-q@s?60BD(4ms8C7`GAtloR&KVCI&2}q?xVWY4=8W(% zqAbFVxXw39!vVD#Ogo|muUGOUD$&((3>8X%e^IpFK?XzI_LoL?^%SUt5xYTM6J$Ch zYWG%5$!9*AERE_t9n%#DUGtz(i4+p^QNloq@NmL*?_aNwCqo;-8#T&OE|6UBm6)0E z1B%xsYZ$IPV)G%!U{@E((N}BE*9P(>(VgRWl5?@PBsCjB2vc;3)T`R^EKW|v*aJIf0oKZ@*fSb8j+Cv%V6ZYKMfBKW>Ikr zYB9^#NcKsggINgj<{jY>8^r#bQ@w8gv~V2UEMrUATxCO@|Gxc2r&S5@}#X2-!ch2ib|pqebz*gE)NRG zCTl`7w(%Lv1Nsw5)IQ7^RA!A-n5aY4*H8ErCmMkl!>QRxveLd=Vg#IdG=|?JoW6x` zQ7h^(Lpy!F4_oNXmAm$4Si%X^lFacpJWlvpo(kA@TEXXOA5jZ{*ou>ngGg?49>UlXRj2=yS> zZV`_dp8#RNmROCM9teu9{$)fAs4)V-HBGLBY*Q{Nq!08B-yA&|NIMCEo@@f@JpVIm z8};g`?R!fL@Gq4)RFZe@G}gsFl3b#Pc)qh@?@*4=RMJnY@11u$vHz#4%CiUn zPcgvfp1?XobNZM^KNRZM;>9(X!-e#JZuj|MgZkOXEUC*V77mWPpPyKQMBWN&AghKk z> z;jJ!)UvA$1F+c5qm+pbr^fO}~`?t{^)a#F()Yyw(IKSC26tfYK-JB7R{K?F(U#8sxAneTP4$oo=cB__!+z z`|5BLKR3xS5=o}F!|I?m_k5rc?XpAh2u?pml6&9zdN(vECJS+-7Ev{|iixLl__N+0 z5@VapSPG^-a!mLUh~LD=G~Ux;5l3lNKQcv$Bb-K19Scq$RrfqR`CrO)M%3Hy)fN`4 z@*`{N>dv*=ue3@vt9NGIY{+I15@X_mV`2hB>5BDID0fMtz^Ot9Q|?w+#}wV`bGzK# zzkI#n!Y%~*_S`_7Nma46Wx&vV&5fFo{uB0rw8-uPzL_k8#Sl?bA) zDdfHBNcs};v?kGljc?m_Lp z+&RP+__b&N-pK^XMGRVUMXZ^s|cCc|B8&3}_!)v2kFCo-*f zsYXuY!&J%m=G*IT=QW<%^{5*|hLt)ahNwSf2=b6Ab02RfhD&>vO3-!i3zh5MC} zjQoo=tzaTp17-sd&h#;aUyZU{HtiEaj*szWb$DO3=cwbTDM{kJ+hlK9?%yIN2=m?D z6uzKc0RhPiQ$0(qD86R+_G*OoM)?%HDMlr=yj#i94UYo`z+ya3u*W1}Bj}Uy2DGhE z=$$%-iMMhdujyKe);l5{;^;Fi>0xPt*+r{6qW!kV@V0&L(8)dI!gS-?4=B8>1F^kC z{G19akF3g=t@xF5t6`Txe%0hSJ|X!I#zI{T?E4R*3M@10Vg57By`K6(bHhIhf0f?6uaR=gFNHAM1?Xo?GVz7$;fs3hw8ppa?DQ6b!>hBs%Mib9xHu-cKP6Y{i| z4#qBe-glTSeFwLe%X^W>sc6$T31)~Ql#q_7k~vj2a-zsI)VKqghM!G%YFo=S_gt8iWoekI*ZEB9?#ur_c1tt4@H%ou z#jSLA=Q&^43^J0kG{goyHVSID1W3x%$vrl;7v3|j4&GC)$~*{qtK4vTnV;d`w&v+> zfBy2M9=PO$1OFhflF#DK-v0fTp(Lzc5yE2Xy}0=JxKUp?qT_QQ@Q$^`Z-(0+(RRo*$KflgfH#6i!GP%+II3@kWA zDJs6-!t7w9b}YbRJHPzYB~tXuzilqqIS_ zV(8B^`sT%Q`?~f-a8zlTpX{0aw}X8}OiNQ>KmhMoX^UkUW;@n>J$>QDP|CS&kTqSAKCtqTTej8S&%0} zl>LCCIdp5$yn+ofp`eGqL|yAO%&K1jD=nI$OvZNjN^wA6RR;19BVU+y``+0GcDH~v zrkrj$F{m)Jl8>^md!C-`z=M5*=ox=@;6fzh$ zSd(G&DjHza8sS~oJPJ zDFDbp$hOj=PD7dKD;sU1!D>C}i^ZE!*%K%Zhi2l@xwE-4@8V`fAzQ~^xiE07Ss+gR z_b#mPVDmoZGP>)ELg>3q-69Roz*0?Dm44sn z=2fBJu8awOm7;Ui;OGLpRn!xge`(TAgh4ZkpYu7^b%NS?3c{OgCjiY&ZUACG4!{xzP4YHd4J`SAM?Ksp#b4M>LMcBfWlHv zRsBf+LOGUC=n8YCR`wkJC}##EVqdSkE%;%banfX+)zLqzS5yNMaW!I@AdJ(lp% zh<9Xdi!|ua0A+|{?rMXVS=~chJ;(FUV1h%RqGQ}TzG1EhB|Rw(wkix|5Xod4F*WaE z_KUZ;ZHmX^NBJ)0u)mVp4o_+c>9;t^W24j;5dm9y&+M)yD;nW@EO^CV~Yl$)PO$a0L1@hp1<)&a|n>SfXRF1r94aQ zfS9N@rHFM?PXtS8ujezsT6n-2)k~x9pY#D&$2ODQGD-lA>k~t`UTDv!~ntBA6 zHNU?vWo;y1p+Aht4;Bet6z`g-E%6MhXdxosvjFh)fX38s>Jg1bGnU~ffURX)X`IT- zO2WYD9gjB|X4vl1VHoWOquRfc+=kZQs3xYsX21L>xgrmETu@F8cgIax3~_ch(@XH- zwAp+>Ch>=I40Xffnyb>!UgB^wH5bce10jC(s8t)ZhYNJ1vHsb;XrY)H-cK#m?<5>wfV zhiEwF*~BOcYYTZo?QC^D5OS(uPtv=)EK^jd1mV%1HT*m1>Nb8gfu&#y8+V{2D1E39 zuEaHlY!%`_{|)k<^(FG%jFNG9UU^G0`2E}V{xDYS34%G7vWC4S)|dwhCooC0$L8)v zXNwaN$A`F)lfS93@>*T+B$P(wha{lXcSTS^vpM5j1z6-Yx7YArGLh{n7-h$qNxE1Y z?co@4pbkYuCx$J<@fSupXwh->MXG4bg-fV$S>q(FudBxfIu>0a=1&G`yDNCj8Cf=M zFM=R4i%ITaMSI;O9-S17ywKzIn9Yeah|Fd(n>mOKvO9QryF0j`u367YgEC>f0_Y}R zFcvtJ2ti7uvaYOO$Tr3-%MM;ev=D8}wD`bgf$|@4D*~T;Qx%y;p zH9DR>KG(n0`%35egdsj9T*LuxI|O(3u7FM{qm|48I|4oX-5h!V5Vg)BRP)86N#^XyTidtRF(Oy;+ewd`I$7tXGi zmF@$VS7Kecp^JuUR{7coJbzIDH6DNQ|9=L1NS|VL$(cZt@h9Erh~zZ-{d5L>rQ>fF zJ*B@mU)6D!$o#KpeV2-6s03_Mk9`NWToUj<-uaG71>{C^)=oj;D2b7MXAELmz26)I z8YZ6>)QVS@$Uy$Qjg5mMZob{Ak#SHjr~f5MnFO3_uE}e624yMQfidwcei2YXP~`}= zbM>3d>%<^Mp_C8>RI-9}MCCbw5+I+~`+Uf)S~rK{sLpz?OtrHh4so5|n?R%v+#8h1 z%e%lzk3m$2M}P!J7!uJU)r|<8ZMEX3{<|wnw&z`3{3I`d2dE`mJ?aluuafbF|p z)x2Dgq3OP!G0FbjPevxxq06GtmvnHhtnx->ii1~hPEuTkuulIJcxn#6Tkg0-`M7II z1Zt|O%1<_lHwd7ktTj0ydr2%j{C)+-&VO?$!;6*80RHmPgs{ol#y4YE*9>plMVb`Y zi5e3L0tHuf=3eM&B-Z(Z_X9M$E>=& zjIdYQVj=M~4U(gJWofKG9Q$!^&wu6ka=PrY&5+27OM^kT)sODqC7n@=FCPf=`@$I? ze|v>5p6VtE^*Mr&h<{1@R-hYIY7V~3zl5lahNmHJV-_0T=v(2W8qie&RACLQGEEsun!a`N z013}4DvO?-V*5WweK-2P>TQz9r^DT|?eK@gMe4Z|<#T}ygQ;9q1c-{xo#*H*Zrbr5Uoc{^7F>!cI5Zsu|?8n>#I z)N}J$e2@6z?wW=yKkt0Jpnkm-E2@E9_0&8uCMsIja=_dumY$5dc!~jhpB(O8f#`>hOIJ2p1p2&4EPH*DK z_nb!??ugQP))T3n6xQfahx(zMGl!=N6du|78g~3e>FLVZJhVhE@ZRHhnv-TV^PlHg!*De7J}Sc5 z>EW-0Ydy!1eLi@aSY{4;v^o*&UV93PLuj)3M&r2KbY2VXpST}UV&=p`_Q=o2^-_)I z*j9K*p(-#{z?hq$j?KMbLa=%_fdu3 z_J+j`4N05*QPrLgPAoccNDhvUT;{XCpK8gLKs{t$kmSU2t4q*lLy&Y&Q+GC8ZWMK4 zX?;_8i4**ANB|M7zd`P%)XRAY^0%B2AV(kiF4r*$O8Nxe8d~X4M5ISqb$VWxh3o`^ z)b3x=UqSVo7!uziZ1@y(pkrf2KiAnG?a}t?tcK(5jo&xlKxQ5Zz=fbA?HhAMQrkyW zC6;?PIv}h^S!>S6IvK_-O+l8D5vzB~Lbihy)Y7Dkp7>P2-bYC}VznQ=zrxI5@V{M> zo29#bj^1vA#_@HwoOG8WGD$_{u?B4j8#{vi0imi>id5H4x{s796rQNu5P*d;3Y6FF zWRlbJojU9yR_|r}mgFkM6c_`0VB^YZxbFhvr*Fi~fYZPVYE}-GZGB5-bE)cUf)}*^ z0>wuZ_s$^y6B!CHGnb72Pbi*}EkOVajQY>`@6VRKl(`>S22nDvb^E=I1^RYyt9T<4 zS6#mS71#Q5b{OkDU`t}k%yrzKiBYq|w68V5kme5%^1dw&*V7wx{pD6d&_eaI&*~dh zSZfakYNQ>zL*1Xdl}KosoDHe^KZGS*W6xCfgZ!NU8esI zdqq6p?TH$Q;!%`U+2QB(>Oy#YCtzyb&rFFfz zj3)Jsc_vwEW;(r`u8{0VhQZFI3fMfHVrl!PVl)L`e%6SkGe{lvi`f+l^7wKGy`B1%hsxvQs zn3oQjjy?VSt?$ne@NTkR*Ev?PKMjPfHBiqasMP5r7wh!7BI*+hMQd(W)9qrC6IW+`jp=*Y`!~ z*EcJyq1c!J8JQ3LWdi?KR=1J>C_5?qf4l_V{(ZnMo;{*qgVJH4=Np5Auxc4_OFexE zVyiEWJK*4xo|Bcg1X;+-X*@ISkwQ`3lenAm=FgGKXNtymkJ8r}n{9RO8(!I=7i=>u zdCX`0*2i}w9-b;k8Y-@2ogX+XNhF0&p9MK5eX)stz7+PU8X%VBD_cl-z7|u9q3^q7 zd@NYSs4dk0<5^v;ek`e8Zb(ftsMp1rS%jwC10#3=VF*~BgTr0{J3R9re83pUC_n<@-$}Cn z#_u%Qju9nI^&sHhL=cVo)^N)NS=RO$wWYOxLS{Xqje4Z5N^~hq9%81yq;ngdey;Ft%`EU~g2XMcpYYKjFRCEafEf1rVvB*sq`> zS&!3#ZB_+17_k276S2kghybZrNW?q=#NM1OUjbTvLgcTg=%SJk;Jt;qbKYndb+C`$ zHnNC7tw_NttIF*<-_Y)Ya4@?4eYSU@A+A!4!0NB@c13wk{IBo+QL58xF2V|r$@v=< z&{D z#M9+EiDzz07A<612Bd;hzc8MoeQ)+WyoU$YERb6D-k`iTtsBVve)U>OZLW@US?Kfe zJ{mJ`y|1@CHh8ph`LI~q8`11#is(IozHuCjjPKIqbgn4Ux>Y3a84{*QRjg+(SoR5(j^{TRyTAL z0*gU+7Dt>uCnefXR|ATvw!V|SfTT}mGI06vemo1vt_0xFy3Gauc!AbsR3!)OS!}j~ zz#fu)Yp+dkpIfk&(ctrRR)$ftMR3?;fO0^R1R>Xy{b$s1y8qx$mW0)}?ETvQSx(6_ zuOL{asZ91)c_Ts6KnQQTXVT5@kK%^dC$W45@Y`muZ0JIp`r4QLlhY%)<%eD0=Tbb( zE$>Yf7FtzLW$vyzmb8|&O?mU|6RFGk-6l|kTb;yYW&|B$IM!`uLSt>lro(6)4!$B$ zNq>%!NZHi~WBcZZImU?oXIf{HwjKW|j9Z|{%wNsHgwR*o5Z z{oEN-_piihS%z!^L9olYfqz?}$u~`y*{OHT$kFkIE*mYVUq-JRF2z0T#0c;`q&eIq3lASE+ zr#;5sPJC;y#6YBHL2K6DW8X);J)AFRNHI9yM8OE_`n%qogh{VABx}z1x0Oht-+Kc0 z_J~h+m#5?fw%f*x_n_kNH%6iYuj)umusD}txA4U*ob9)Y8oyl))axIURpbwR+u<|5bXO>o<+V7};1_}Fq!P8-dHPu3WVhdEWSVL<;_=yd( zJdKnvKv^HR;X4>2W^RFkt3WMK2J?W8((}vfQE*h`S^HLpX*Y|Nd&8a7O{NibBlcw* zK7N%~?(oEVCCG7zzS264;xzR=TS4yA5B&cBp(w(G)up7@()yb9RwM^AWe<*IV?kHt zaZcLcuc??900usQEdT#EzKs~{d!Ob%BYf{8R}~zY!=Y@mvJeDJPN%q4no(jC`a~NM zba`B$q|pM~a2@q=W^_^6`2TA#fOIa-6)NrJ8L-_mPWp{=WoU`PSKS!TnsECY@QjYr zv952M0EtScb;DbE%Z)G)M3(r$;pT#BjD)k$z7px4M_|8c@G5!NIE1;l3_GV-jMg;| z&LDmK{`$Lnw8o(iP1ub25x6Kowga#tgav(LVne_RH2VYNX!oCyuDffMY#7aE47IQH zBjv-YkKiD6;zQ4DA{R4|XcpX5aK;Y+LKCZm7WmdTJgLgTWhZ@cDVI3w#1=XsB5dJ| zfBK#;xe?(`qjWJAdxAT>OtPgP%ZMLf=Z24D~u3AIG&MMj-F$P$YAzTqtd&LCbQR$nd8EZWW1R zo!0x&CU!p{LVuael#zj4Fk#%!=Jn-UQ29p_KB#OaC2rVoLfY46j=OLXu#TnBLq>po zYcB(7FVl+iOiZz1;TpK&uO%*)so0T^b&oZZ^366||7M2Q;o&yuKP_XNHz3B3@qvJr zpP%tdGztf)`Y*Z=3r|0&PD&CCXbLD`k%@ivI}0-m1V94i?HZ!jCl)OwU|tD?o3)8RKA2}z23Oc&i4s8i+Pw*j`Y9o} z;(Py-Q>)}lxp|IYBC99V@XA{cQsRd7{9UXxJLIDxJR?q@r+GW-d%@3fj$`f2PI-Cu z)V-bmU3Z{RayS$vI(5vrE9uN8COI*Dm0Z^LPjSJN*UW? zM=QB4-ggMaljZO*vOUDiVGKwYT}lXOs(IkEazDo51~>!BFa`&9BfrZ}Sf-GswBE>b z)BTdrEil?rj628aN70Sm97l;OiMzgD0rsYM3>|m<8KA?$y&J2`U7=&6vCC1j`hzHP zjYPe3h-Z-%<1?C+LkrL`phk#(Ztw6#u@jRgMAh3d-E65tP}8B72j(0Iq*Fu-J&WAr z2M56ZzzkWb+#eexenT4VNaryttu7^~a^Zbj99xservKXgE>FDUb0t3hw-&2XU|&(4 z{*-R{H`mneC3hf>rr>xb89M!bF*85Q5E=^?)em#lNBz%_e%X($bM#B?r4ElSs1E&>-@`TWv?7%i# zA@sLl;_uk~cbf_o5vizeFpkW@=1qe4W1K-A+|u6n1^`JOOb93??@u-`GJlv>U0X#o z4(Zc#KrJuAy%@#aLs5sT($#z&L;oC4`@eo?b=rCAcRAPbwV&Ouz0`E<<)z54tr+lu zr&`TDq1)!1Z7rm$u3z;oGMaAia1G(TPJA@h?%`=LGV`&P7vKW1g#Xdi1L^tc=(J(k zS0545?s2^`UH|4y@*Ur=nzJJruL8S--0<9|>>Q{Woyq}P@;OpMQDvwCz;?P8UD|x; z@fp3jfvCrf+Cf$)`9gHDb>G7mG6O8NvcDe?U@YdENo8A$N<}(zf@;{b?Uxu~ptoz9c)+U^_<%6g1OpD5?v9%*x}8`;WwCD~KW8AXuoH0LZm)~zb(3Qe z3G+?0T9&CJTI(<~tVt6cFA|G!`{KJb-WS_MrS}JEbSq(WBXI|$)s)9e+Mxg;DikHsI+9%H17fEd&2rU>0LO;BQ zNREk`{q(Ob)qTfkD%fI0My0gwbl*@WJP@_e!$P0tMn)wWb6rGU36Cy>(_5O}#Z$h5 zAP;IYPPzrWKKj0e_l(O^tli%ODbzOwiooL}Ybv`r7TebX9A+TKBQ5?+Q_A4Y8+dVu zAd8f~OQfXxD-!d0`pD=171u$bF2JBh1x`-$SUp4h5YVAesNLc&JOYAdiwpbe^L4#u zoyC0l6S+ufYF?1U>B>UXQ-_4A6Jcfh3*XK{fPvql*N0n9XW&hdvHkUq^n=SMv=IpS zq?4a|f(j5=%FuUS;SAgVKLQW3QJ_FJ(Bigu5SE2F?2PB+8P3~62;~XcYb`{aPVH0k zt1&EHNS{bPm*9nD^hT$?UvZqB!fy{uuu;yEK~apPn`+=)?7iRmqN>mGJWAED>P~ub ztOm8o#W}XOHe9YnHk^KK_SGNT*xp7Ke4j`+-`$mTQG%L)wp$hncXSYEG_)mgv+&5) z)GPbivCo9S`-3dNiYJZ$D~R!( z%Ph@&pEfVH`67Hv&Mx(Uv2qq$gw;Ejcxb-yY6YjP*DXq%rT%jB7s|2qc}a2E^Ft-sD&@7IUJPB~@haXDNLMS=f(}zfEt2!0~l?yV_8#+`%td z3nLZT*3OhojsMh7%V-H!(hOxU!!mT@8g<@O8g|v}5+raofYzN!kbO8}C>ImYG@#H1I!A>qdg~sQ^JUdPjHp)S zbo8&`N+a>hDZ#5NS~_G5es+Hll~+*caaZeXS=_Jk?_Jhj{KAqW^PT(5%5|= z>r3~a!d%uA_&%Gsnn#1llEGDHl9A*yf(8E7@{|;{3tK3bz4gP~pYI5XsXCiW+ok}g z`qBHPnCXOqkKx6SWx~4_pRQheM?Mq_4-6l|f$bLbdjNZUh_Oa4-1~vUdbWaiz~KID z)T3QVeK;%E>3{y)dYec%F_E-XZ~y+R+<8#q0{*?}wnrMBPNJ!a38R=lPf&S)?(H$= zPfa@i(}kvWH~gJYSNd7MzeWz9MONOWAfBA+I>()*boHGr5M$jb8ZSf?Fq2V@`aA4{6%XR8kz zJnr#-eD@-*xUW> zi^r&dA=m4F#-!~Yzslvx4ZnQhR)@bY8X8=`N|1Pdc+5-NKcF!Bsv&c>SiQr(!=HA1 zuyg)_tmIra*p0O9Kb4B*2ejKP4a_DS-f^mEWicd32QJIrU#(yJhw3y$nP zeVf(=gtx~`%~p&f_+!w%nbIOK^I0Ql_o;Q{I<{Z5))}I?(-<<5&1oz7JpOu<9cYr- znP3yMga{l8(@-mzmw^2@LYo@N5iI{<1zT@;ub+s1tuPz5L|)ueTsQT-zo>uxPLGAp7U z#W?AVL7Y1~nW&YVZBdR}&gV>U^rTVEkQgaSt1R0<3h>%YxR~*PG(; z5x+kjJzT2UayQfHsw@%k* zl2fwDi5Srj>-j~zW7hp&`OwwAP+wQYu(y1ZtoUN(4^En%bY~ANnW>AmUZ<~%YhVm# zaMruGjY50Rw%~xA+zd~T z+K+*NHu2ty5vibn>3EEE_pq?rzWlMxAN6oW!EwRpxJ@68OP*kSd9d(O5Ij@8U|uh9 zTI;0Ke9cYA#QEGwi=02QGu5qP)cOjTnM31GB*@=@niZU0Q+tHsD#!yU*N9Ay?b#XC zaUHF9GL&QNNfJOC6?y2Ky>C}ejBLD3>@OPqomI{%V^BrOpU*Cb*nAhB$7!n<^=aQI zR>Rle-E?M7cfpkP*1$a($KM#AX@mfI(uu;KQPMZ>g?r=SyZusret(oV^M7s3hBKK9 zi#v8WlQdhNL%Dw&Qg(VAYk)sC+T&hyzcs}DyxzcwNm&F_?{*(Ds+Ms% z_9e6VAN!6%tXR*Kx+1Rl98k>;NEg-^J$^@h@%eB&lIKWCc-pe4^9JCuk9Y6cya`~J z&nAux$!-~zxsln?Z!6frNN0DZd@1R^kEgBERQMwKhAR(7Sw-b;X;-*^_4#PkYcAEG&FJ<&_}t!wK1?=4U7!#s zg6)xNvX278r)JXU-jcl??)hl#2INS(G@7Z7$Ma>><6D&BI1j7{f}|3>Ob+E!B1wXq zmjD(VHYP)UZ=ubbjS%*3oNd*$bnDKqTx7ezP1xdG_D*7VtV6(2lTe9{(2qDO zEAW4k)KY|ZLPNZl2=^0J)qtGrN05EYHj{`y#jy?zD%6E)09e*CuW9b=p3Qp#-{)YVVz-wdOtE!1cGgvJvvl6gmn4Om ztlyx68kH|IS+;Gl?R5$36SN+m@ycR%JOa-ubq*Ez6*%9T2(Jb-VX3$bVPzpbc*j@;YOl z?76C%Fc$L%y_^e~oez&BNf%*%AaO?)$y2B7T6C_W^n9ypleh-t2fAZ5{IE~b6(ZPF;UzcG{@;uAdOrAAY*;TPDtr_3wq@GXR~#f~r$AZ6LXmd5 zSDj&bB0Chh7a<6{*3(29E`ElnFdetaqjBNwZ!W)iiI~w!(dZxZO5B+dviN$}E-lkS zfd0ayo@SgYdrp&XX@m-@U&8*CI)xT`SG^z4^07($?W~u8ze$5UJ|9jOh*cpzQRzgn z(uNKCj9Yka^enXliy4zE!Z1-0-wbd<)r>{fWB8|@PH zIe0eqhHWPtnpZLInA^cCZo);|g(17dz=vXUZyJh)loSc}o( zKG`Nw&?#?gy zpAY9gawjTKGU04||4e7CYi(ergPEKK`vpHiF*R8p1em4k!#h;oprE`v#Z=WIQy-Mytg-b%k8|F7uG^qIBR3%cDUJ4T0 zqb}@o9PCr6JJ7;21>9|&NM0FBAK`iWBC=+Xg3G`w5SQ=O5^=v+)iJvL0U#@ID4bqVKy@f2c+eU z3%L}GWdj;&V0L%Qvt>|>K9%EmIcMY|M23sXRH1fdvtRa>M1#^`K#}B00LhjEC*zMZ zKzqfu*r6Gkk(d~Vpxzv71+7j{jokBGhb~{l2q?7$4Gwg88b-mc9`cduQe6!-E;Ei` zSO5MxXa9-n+~XJ|arxG``Zf_*!F;V3bkdm@Aiq@B>k@MN z@a4$B;{o~faB8I00rccET26VLs0kr3MNTFi5k%+i14`}D0!gUxufOx!mSrlqR=f&# zol-IuFH}h^q-S0yKSdu|e$1^SuFl7z6TZESO#4{tq|frZ`%ZtUYwv#VLS3B3^WP*a z9m)|fj-Y=T=`T+Ab>2gjFoAb7LcI}}zMGN>@#NN9C&4R;V{e9kIgGz$`@t}ZzSY7( zn}})e;YKB_!XZ~Dk92m^-v@~t2)PdmiB?LIK!Gy`@spG zRBtrxwaj{(J;u`l%i-!{A$=)WXys%>3_BejWAQWT6Z765uVrX8j~^|AyEq#(&M*Eu zu+zk*SXnNwLB92Tx3(e1h_0y zx>B+2yG{vDN87IxS1&42$W9%3+IGGSeJ8H(MLWCv@YsIE(@tH_o>;bh13f>3c}C<# zJ70+)k){;nK>!vAAheeILf+(~*LItpKDsj@~gF<3B@B+FVo?{^vm7g)Mp-G~egMP!(@ew}lZc(*4WlcY3&Mznc8{y!oHEO)lpeEE%L$& zQTRE*uIj}-$Vqdwvn4)1SK!|pidmslG++?rfMD}gVU1Rsre%XPJeLzh1&X8z{w{3m zC8vchd2DzNYYf+f-bKd@rq%4f6I$12NsXv~AsKGcPBIt}B%3>dFsfOa~nq?RTDzLUWUtGB7f|6oV*;?tQimyq+G6ODwv^$ zp#_N^DwFqLz|3iBhU+%nlb+KHOs`MK8TnqhFS;!yI&ZYKpd73V+`d%atk~M=T(!PD z2pXF>)!nSrh)>Fte7jn4ucmR<>Vps=2Ero3Vp)-|2U25T8Ib?P=s+_x9Fk{&T9n-A zs2kUcFMP8+v2=3UVc5Ot*DRy9z+PLaSsih0{j#v^>a>&WI>@){E}U`G?_pERxYKej zywfCJUzA$&S8SYX$sA4Q=bIlL-;@IAhdVU{QFg!PR8co!?Vj@GX*6r(Ag4ZjHYnB2 z)vMSouBduMWUpHIetRmBujsr(&?onVqyE+tpP81htOnvtkGM<7_GLuPOo~l;smZl$ z{)DVgyZt*XY$^HbR};pW&uTxvF#Y*5>(qldJZsK~n|M&H@lZo;WL~hLE-uNa_NV^@ zBK`Agl*(!;#K}^|bLTC*s#xo0Hf!=L9rT&&H%SNhXIpCmX=ZJ(nDyEo_;rOZo*!Te z+wR5(jxW++X=dBm*UXE_2Xi3E+4T7JO{BY9aKj=Cu%2&tO{clcPWXP>-keW#rFga> zUp!CGsS~lwAV)`(h0@rUV7+Ha>3B26>#(lH>6|8knC_dlJxu>X%&wH|BB+G3^P8Nx zD7=EpCrc88AUX8+@=DoT_^(z>GRxn;3B_Mt&;AEdL9V|2UWF+wI#S)M2ZxZ3gLCpC zA|Y0-Mw8+dp(0fO9uS_Fka&fchVx4z;*jz3=A6I#97!0c5?vwFBz=OS?aM*KTz-m?$W6 z*RO5Uf6MnHVUJX!MpT#fs-Jsr*`^zHzFt%N_INmr_`}thU;QL>cH?Z_hw;$b(WF5D z>lbfh+_zF$WGbpuzu-zpii7?S5^-g72U5DYojqt?4|>^HbshH&;x@M{-qGxGRnU#{ zD`iqr9Q~QeY_a+o>qPSX^QU-n&SH+XHFLPF8K16`7~x0PbY7^wOkr#st8((_84j_z z_6k#zQaIVsN@_$TcjOf?V1>zyjACp3RpzE;@^*bKWr-;qZ*Qf#zlT$SUKY$Lr#mH% zV{J`*ancm(2Kq?wdTAIMVx08iyn9HgQO0B=Oda=3C3^XI1&RjT+Uv>|eddERM5m%! zam5auQH)Jcfek*dy59;E^nIj>`BM;yaoF!2Qka0i5N>p&vbAL-tAd^@M|pOjI6HD^ zSS@74Mk9L%RB~8sG}iNP-+oNOmQu-GzKZ*54I(2MqbOIU-v);sQ;9 zwdaA=hzPGzAs1vTm6yjaC zpV)wKRWVu)1e7H-Jqfq59p`K%dTEhD9E8GHFK$JjJRUJmg(je@>s2o)zDr6G|NnduZnEycBJF>}|_8e4?n)7W_; z#Hu-7&bC=hp6}tnTOs0-HRg8rSJR zsp)ANq4PEoGfkX6wNF}%AYyI=(w~B;ufjfg0b}_b+`1-(yhw`2+Ok`X5py$f4xIk* zqSKA$^?cxQ**Ab&*Q`|QtEXW-Rr`TIGw;g(Z)xM}5A_gohVkk?V!ZMHA+LGl$Pwnv zo5!kEtJu1AD~~?Yt zzx>O;%vr9TN|eN(I=^47<6=W{9oCr|7joHwCG5Tht?=|z|gQt z-Mb;V7DDkR7SF)hvRe({?q7`zhgCrQ1XsL;c`QY_nz5Fi1W1>wRkBIOha?-J$ zc>`n7LhM)H$2oRh0g#*8KlHuH+Uv+b5G^Aa+i?`zXJo}jwsfcgVebH1P6qaShwyx2 zBjJB}32j25N}(tlJ0f{+RthPf7a0m6GLlu|pzEq6rNJSz!fcjSkLAaczKPqU7*@`n z6KGRQD7mgf_OKe1tXqUWwFGC+ag}(~)}?qwrh)K!RP^?~ld4$wz-mNfgyLg#_amlF zL}aHRyZUcehh3~u31Qtj*fwrWJz9R2DoS|_h>60yZzb+PKz&|bfitLu~Jh-~XdB*m-GCn=7;Lr2(M>Oi^$Ra=k)Lpa`x=#Gwv_Taqt7W%9*TzweX z+J)Y-1H1147!coVu_S3MGBQG0LA(2ubzlS>tCfvqU_vIl8n^TP;7>TxU!f+2LAa^| z9ct#8V8*JnM$1AQlL`AZbxxO$Rg<@j6r8vBpg+705#dvoL63juG8D#nUD-NhSFe(MC&pp@^i|AF zYmtLN!p;D`m`pU?Lqt?MgWa_RdTQxzJjS#;pCQoSf!V2{lOm`~iV_**4~SWmq+3afRGokzcS1zLU<+PHibtgwEOvZwxrvDELPGACt0gmS`tSF~ zg;4jqunisqW6c7rxArJo&iFCtOJ;({9O1{r-WrNPmL`zLVq7ta0XQ$CN)X0mc-{U1?2Tgny@dME3MEhA~Wxj>I`~4$o)qS4_k}P!$zAd(p-h(Bu_7f9V8&lb+7U z$4+3t3KQ+|5MdZBNYA1vFhGJgf>RxB{MqCg41_H#*JU6aW=(DZ@6^|_r>TKYjGaJx za0p#!xIoac3D`DXUB{>E#Cv@NLScLvDTJLcmh1ADCl2$uiRDC@UfP2lNUulnAY-Cb zV&ubXR9fCp@TN7|vT?6Asx(kjSE@Hq3qWJCATV^ZD21|0`Z0$rgcOcS})I@sOELF%3TbLhPj~q$Xv$r2oMMOha z1^pYZZ5oK&Oss>a)#A^%e4KX=D%)6;AE&Ag5DK7v|0-p*+opAQEG7&RoWR>0PxSVGCo$Y?Zp{xVWb;p-nBperGQtJ52$lfBX{W<9Fj+szF~l z4`=%U=;>E1r1%)LiAC6_E+VfrBc-d9`LFLppHhN(|7z7Y)HNxk&x`NidGs#iz#y`- zM=89d#JOCHF}qCNOKnFj0$y)b>`Ft!_|)AvN6xGJ@}nD+m48+lva1(k{xt0Ur_`9I zy-QjA&sSk@+mCtA3PemKvNebt973B}igUJ7h4~a@D?qxYsie1yHCQjaql$AIm#P3D z+W`rYVT)^l5cefS!SM>1IzcV`oxd`A%-n$?RmiKoKElRhgst1r1&*V}9?9`a z!Qx6a#s-zXc;W(XdpG*3dFYeI;$Emx1+7_=&O*2eO4LTm@E={yScYGm$RKN zpPk~THzc{xVX>yb%bY9^Z(Iqoy1+-{fP)YM$Aw6b;6jH@LWD-phU7?{IIl)wyiQGz zLq)sA7pF&ZxzoaO;ZOGTb7v+L_6{Hi0xT?9$=gE(%C_hAkbI>RWAy@D$5DYnBV!W# zOeLNt?!&35!Ku22KBYu0Y(@I`?A$MMNB`Y8$IcTqs1`TP$2Q^|KC2jaVGC#15sdp+ zV=SHlu1okrHTXPADZlpwT1E=mghJfLRs~c~ibHrkirqD#5VyG<(vmP;Xm56jj1ipL zYf(PWL!eJG*e40}JIr72rLDo`y%&dBcE6VkN0rLl3g6@^WEbk>6nR;H?Ljmh!Xfba zp|i!s8zImmgUnA@Luu?x>Mq;lPcVo}(&%Y(sXT2_I@_eZ(WRr=AtTQqE=dp(B{;Dw z%=D!mYR=ot7}tsW>U-)QFku|S;VBsD2EjcRF(32b^h%_JL{AdNphoDNjai_hCkbL6 z_Yyucgs-3#``{VO^$XR#z;!V{`vBI@UQ-L=5k8d&xq7}*7A7Z*vNvyS#>`2#{Ve+j zv0i!?_lmNKNDItI%CUEK-c04YOQrJtcWOavh^pQSp1t@a4Fk30L>KVrgg>S@u9OJV z|L^+RPd)V%fAmLx#8Xc_MRRjAKls59_|A8}Gx~UXdOFWM^9-w2tpY&TZz|EUv$J{j z*=KJnOf@w%v1`{Z($jxG)Wd)G_FEUGGBY!|aNz=lg@qsb`1$kaf9DTz|Ni~_{onsR zr%s)srKN>8-gtuz8#esLzuCKYFJJo7m$-QGBH7v5eEsWR=g~(W{heO-zkActQmfDx@_JZn%w<+YIiw^I z{>f(aNkwRjrmGac;ILW=Ma8*G(@-mrkr7asjkEtGT5blNMG4$@=-%6pzn9x1n)lxF z{XSqMT%^1ylan7ijL-dKp&HZD9BPNZmx^HWheT|d1ys>(5uu;A}1Yf zY@SjGXMjrrI{WmOn~sN3)CL!Ubt^P#nB zvaw+)KC_#?jtdme{R-Dk{S5Dj!e*$yk?y9W_+%Vzy@QsYi8g+WQczaasRX0wC36PoJQ!XDM+{U&c+0MT>|~g+RX#x1oh^<$Z?kt`@X{EM+lC zh*K-i6AIL%CJ=<4ei~Y;&?k>)LE0=bB2thc3;Wd_ROl`IQ`&jD+yNdt_(im?F-X~t zNJ~I&->mMB(Y^5QTL^yy-|#LZKNME#z3zTxKYadej60VgGExvDE9L-1N7702Xi*9v zGi5sE`48Za&*03(r@2`DDmP}!DM_U)oBM5IqHZQ+-e^(3K@k-fo%pZ8 zUstR_%R--CswUWB3sI1*QY?S|3g#CdL0+gqFCVK|LxV$V5@H%^Vlbx+k(@B9MuZW? zXnd@SH3!7P=_+Jl-9ogu7~*RO$c--GdS44+M-?D@hHg&mQlsPf-im+Z=?njW<%XG= zwwOuDGq9X6G2VDyt$v#3!8$%Y>Cbqv^2d}WO((&d!nuy4%+6TG`*p9fH0MrYJn;-W zL0-D@6TEr^k4^XzU42cI4rQx!)B(kOBOFG$N=4xuI0az~Nkv@z& zmMG<)KLXj)kF)m#_xLYA_1cK7ksqYrUjUWc29gO6pd zSKqwzzDm|asi7#tPY#MPM9~u5A`obZk zlw?Fk@%hpz{Gj4AA1^LpzzP#~93o5;4MD&PF%S+jAwH2=sTstWCVQJ3S>%sJ>*ygl zGm#l7Y5bz<62GXr$b`5g(jp=mKoD7+hjbjw<+G51VZ@m1(RuQj93DpQQ8ktREPARz{Q`5aZ`N{Cgq zw){*)M-TE!9md1!M-{2g{!_|+x$7v}v2Kq&BfWaU$G>Y&nEoz>u9CLqYO#e-i~uK*Q_j!nub%Y zRKeCi|4Mzxj*A=`Rw}HHZiNttj>K3y9|A$_Uu{!;u_kCwif3(aKT+=jIf5Z+o zvP$Cjq4~UM^QK@mwyDM1{iiS=Sc83QQ3}OhMc1(3JB&6y9}(?WfbScLeNlduc#Bly zpaoM9=_zP&F^bs<=%vMo>{J*Ip~pv)dHEu}1rvC^Dn#?3%Oevbi1iApx^3R933I-~ z;cK%a84S79^eW|4L%&PMkR&r&XIh%cw+;{T#AH8FCK$TL=Xdn;cv%F`R0Qc6mQ)9H zLPEo@>tv*kA+0GAVL7;0TF_T-0_ma+hZO_XV`6^x0fb?w1nrrn=((BLFTV@H5XL9( zqIB#W#{cqdq&-d*2k%_03d3Fx#{H|*xnMg8j|VL-8mGMrp=oGSN|3gLh>O8~{}B4J zIe3=OR@c{*l96DFG02t<%m-FuZQhQ3=Y#nC8sny#TsmPf*z01AT<+<4YO+6PwFi$+ z5DH4%TaZhp2a3y0KoaOMxxepc2o0iQ1w|zWS3)*%Ng73y4FbKA=s1`*MsRv>n6X73 zDk?3qO_%YBUM8l&!M8)W*PyQ+Ca&?&tc4k>5Uif(A!fK8k9$_(3Fh5T@QfGhqKi3G zL+b>$6TIa*xX|}X2;miYN_C0|uxyMq%EroY2z~N+oXV?U z8o0F$=(Ec)9$1C-i?>G8BGClK+J(0zeFC^`U86-Q0C}MjyZ$=*^vP(Cmm#8k|1FhL zRlOB_^T-pUKiBnF@y#Po@Xgu(LRs?6-|(0JXKiqBke6S6nUg0^(%Ra}v(G-u|N3A5 zi`dxM+qR2~iz6*9?E`+BMd$ zUCU=a^BG=v;RSZ>+Qlb7`AO2#(^wb()YcZD3#;v`sBEj=A zAs9lNScsOApi<}pLA2srCASWS)XH2-hf*Z@JYZYs6ABc#dO{)Y`-c#PIcRAqio1}P zfjcmSCMAqmVPs<)_U>bt53j>{{}9+V)}gZ)OJ=A@^4KWco<2lwx+;p?*mr*f?)8>Y z>)Wl(xN`}F!?+by7}F-Gf=(z563qKosY&}?OL2}@pf8w;)6hK1&;S)@td)&J%Swev zANIl1YGATWS%+lrfLcNGd67b>0j!~;7v(C2hu?>E90r{sY6nMd2)7CVbRabHb)ya3 z^8K&dwEKT8qgaDM5mJh(z5&J3ijRei6lLw&xD+~j)TAabj6Sgl>t9~Rc>E6BU_ajC zg=iug+0}=1U1VPXEjeC+-<^>aJ57vA$EB{}UTH*+i$PzvPz|8{5j=PF4UYQGKp*Ps zM!O;G@S#{?H~6x@=D|-(v6xl54B6d>v2u>$UPMI@-n<=S!8Bz{Z0D} zREwB09yu65WTs-wn~YOkk1>Cm8Zgu~Bhr%4XO?2`Ifk)e32sY=O8OZHC<}zogFbJ{ zXv8=uV7YVX492}H(KA!<4tueij?z)TkHVRs#}}1~?ujC`U^&f|Z&En^F>ozaBN-f0 z7Ql*XoZTaFH4#3{Ke$&V5H)wG)yT9YrKY*osFJIq{1|g5!%z?rAB%myO4$#Op2Ju^ z2hXD$2tWUpimvbJS5fPr2H`$0T2!Q3-ONsh2(L;(3x(C-a{VI3a`Jc;5LQaGggBON z8wME%mjh_yC!%HNBUY^h!@zp~FrGUW6aLY!K&B$nhHLRH=Tlrw`}N-3p370-F|5etL!#H$~SxteN~B zqP$7e_8h{nnz>m0%55*v-dVx%b3bCy%x_>AxA%|Hk(ngK717;W{cFF^AU<}?Z#>mM ztVzql-gOM~jwNbh?KsLZJu)FTW=_J|yj`)DYzL8-j(zA1#)4@|wK`)W`h-H<)(%8g z`UfWc`t*rdzr1Nl(y~%iGF4+MA}$*9^_{Hw^m+t;fk3ghq?8CDkW#X)=uUj5!={O! z;O(m~P&0Ufx}meI$i9nNnX8$eF^%fp3nckc*(mR2XTzI(X7aO~I`AGRJGb+vv%f`z z5s6p#V!IZ{I^N;#qQ{6bVW)Hr<@^HyQMxD9>kOti@=9oDHm zgzhiFa;|}{W5$)kLsN0jRU(sO(37Sj8AkC>^Ih#sN=l(&aDWtFB=KG!4;76k!ym=L)+RRO7h+hB zDxzg3a=Npf`wGUYb52vYul@apdQf?ZXQKCuwbCpIeX*!*eOZ|za4@~!(ZKKCHPG;lB1 zsx;Ucr7HFD%w@&&loH?ltBCYy9BsCEa%nWDS}bC{8ePLmaeuAP!F44)A=ptD=I*gR zY!@=4HPWLr90?%@zJGFvZ_J70?~V=nxT4J~N-nJTf+W2%6GKv3P^-r9qf9H$bDFJDC@#1Z8QQ+>f? z>|}#kD?HR*u*ohm@J9=>i*)wC6J*(aUUt4Q#Ozfbq7z;EIwfJtrfi{(v;^I4lFn9j zJxCV@dL(sM912SfuAH$MD@k3 zr$9&3!-`Rsnuy$cLfIn|<8CrOy&l|c`!ViaiEQu2dSe&*kpgo*AWR`SIBA9>jGD(E>?;#Chuia;Q(G>lp*cs&@2& zA*eOcCYNAGw<5J+#FVC2A>7u5d$keAQ3@c} zac~o3u+LsW->?LG&k4*s7UQ0~!f-_;`aP=@^mR-IPFyT@v>(~qkC_?|FKokDHVfl{ z)r7BHLmC>|m~6s657agwr9_^nK%YAqW5ZHpD2!Wq4XdLIr>hU=S`)^!2{_Sy9FKwB z-HSH01mFDW$kUf_2Ztawig0(Y`oP*c2tEJi%|U%q9C~BBvH*HLg!Z0*d6RLEUqqWW z5v{F{1U*jut>c0YVnqERT?t`ZfxsO{DGww{4~zh>iO_{wtrr^D5|BzgqG@;*&caPw z&hV*Ac&Cg<%S=|!DJVSp9kyx!*I_s+!+6;q6C1TjTs+}_2O3iAK!qMk%9~kW3{yt zww0Ps8&`lREkuutR>@R}u^8jW;P&=|l-Lm-^o3IiwRPfl_bVmC1FNyF?^5Tn&P`jO z!|iE^x3u6}dvJQ9Mu4;?lonwZ<>H>afD8@ehC;AzA@=tDxQP)YrshBm%pLcKL^VnF zg?~(RTo$d3d$8@>FBDA^)YiYx^huu~%AbLA3xL-&Vp%f#JDj=r4Aphp5kgXww}R`QU0~Ten*2)-*WV#MB8wFn zchNc6%C@@AXlSf1xR=7X2}GH(TykMOHLrT z=a?$aubB_Jj#blumYWW}{V+I$C(4g|x)Ob25n;`X^m=gio}k)o<3i6(o>sfywtLTu z*S7*N*~#RKrGJ2Pt`cKb8Kvi3|Xk8tktE+m-kXo&8q^Nc2UJ5*5k0?hXbmi(pJ5^bF7+jO2y- zT8iW2nUs*kzcjgQYq-kN+r6r&zCm2@GLhsz&5yB4Q(P#^)iT{n+j5 zerY7epyg#E41@5wN}SRHw9I6ziYm0SVuqi4ee`oQU*3-Qk2c}9cH*Wc68ySK zO)o(XTZpI#EU$rGeGNT20wXmEM-wE9Y?aU!6@lBgqIUpe{uG9P`L2Nq7j4cl0btrU5U zZKFjhQCdVO5I}bKsN&eX$+&&}Sdl)=%v3ZNxZa93sTeV_5Gy!LsDBX3i*Y)8kd;?) z8{04zOhsEf9T^Ovl@=krCc(3p(eGHq(A#?v$#IDII7CJ=vbF({nus>SWDLK#3-L#r zuv1k+ofwmio)C@w{pZmNa`0?e3auS56hxXPq1F!UH+EudT!Oe~8R3gHxIg(7<~^&> zdi%lW#k^}N(&xnrg>bujk&aDx+dj-k?j+8!RRP&%TaGPeIR0MIR}EO1}^8S%z)dxE=#H7{qpLwJ5hnr7zn*ei`!|tnqxsAgc-$ zh;ezINzj3_EddPILE1WJn}dvr_EFU?DU3H57b~gk6W9`hHn_Hh6%OOt>OI8!1eaVN z@hORT&Q;=xic|^M$?*ht9!7c$=+Z0}MpkbhvVP}{q*ZrNJ z_qW;hsi&S|)22-TtXj2-zP>*8?AgPjMT>6R?#BDO^?7eR_oI(K%EE;UdGg68Id$q3 zeSLkbS+nK?g(=tlO%pUmkK2FNw!i+^t+k8aG|v6?_FEUGQd3hoeE2X=Jn;ly``Xt= zUrY$W%9Shm(T{#aYHI4g@htym?Z}ZMEL*nhw%@H>xsoq_@rxh%H=$67Q0S(_rN3WQ zoWJ+I@8R`+5Pn@$R5W^$0sQ^n|NYHD`meRTyu90Ngx~-E_Zb@c@MMIHj0`^g=}(XT z{G%WJh~D1b58XC7IhoIW?xqdtr$7DaZTv179H#TaIer{?SE*ZWB!NZ%uW-AH=SDk) z0=do``MCmRo4R!u4&3tnAz%SK+u&nUOb(lO@1VA^9`}-xk7}LOsz}q@4-r1T`K@o^ zoVb9)yYwt6`=OJ^)hZ%J)isL*Gb9Dguws@U);=rz1zTX5U2MeyZiWD{KH_H2qAcU z{RYy8T(qoI4jnweju$tpB)3pl#dA+6#64eyR+P)8ya^OOybVe7zbUwa2)ROYfM-- z1E;@-O2cK#uC2(O?;v8MaZg-;$Oy&0awT`x51O2VQ*jW%yM{aUL34nBdQ) zP*?Ho)5}X3TQUYZx@nh^9V6;9Y1?Xbuc2jh<#}>$CM8*^6gw$2Zh4RA=ur%Y-6P3S zM|Ubqn$N@HeX-1+T7v8wpwqSam!JKM0`U%qaIe&<<8j(RE6!zdm50?||1z?voxZpT zzW-1E41EL0CL68C2HTGu6j;^QnVOQx`ma8Ub#@E=I}h`N$`f>Z!~E#-v$vh@kM!Hz zQL>y3^A=+7I*QY$^X*^#L|N-DR3kD|xFcmX1ctzJ_~U|ynbOzGqnTSd(|;Kbz&{^& z;pP(_Ie7E?MBrB2{(iuLzkB*;BNwRpXI;{KHh2bkWcFgT@ndi<)$+q#TM2bmE6d}~ zdSrFIl4r-qkXc&7r|!R3u{x?7`0-DFN_XW*%2QfAcFJ^m4sIsc|2-1oWBBUVzeiH; z0$QuLv7^zTfBRMyBmBen)V1dGfGdeFFX4~B{nw+r`^+=X&{T63x2X*g<;QL5P_Wq6 zP9i)W{`AlPTuH@`oaLp;Gt~F@z;WPLAo4QMigH0p4118ThH}Aixazd=$)7wz|J6=q z`2+s_Ocw7ueVqRGw-K??D*pW!ZQxS_y3hI^g<|C_%-x-ME?27wD#SXVrmr1-I< z8-?t-euAIB^#*ClW%Tyf-)8Xxn725QxCDVK9gZG7%8ng7`1R(xE|$H3O`Gmx+}JV< z!^iRC$Jw@R+XuG2(H?r}A&QHO0jQ{`V9S;*$l(yqsY__R*VMW3w`UOvv25rSlq97g zVxze9_Iteg`s?c6^y4NK2Y&t#Zsj$oI?0Cn?`NWAWB>9Ut}U9x3&%%_iBW#Er`vE( zT~hYO9!L81trrq4AwhkMz-7UqhQztQH?k1A@bh2?-wl+Ml4$F2mV>ihrm$ zOmKJz%YbXOjW9As(={C}R$xpu2s$GYsiS}e3AUe_#(LZy3sHB0EA=g81sp!P_D-eB zGBkelv!Bv86i~LqE#F^*@h zZYF4}*F1IN=bV~-%ZYcA4fVSMvEyj}V`hgmbBey>0azxmpDk(F!7et?@Qs^rvSmAk(rT zHk$p<{E~e~_rcL!0EpZSw9FLTrgjkUsn0$^hGkeae)Y>Lig%^IlTg;H|1-y7aL=Y(d`up|nK4 z`|(d93Ukrw<8W)Qt7DO#j3ABjXoovvr}DG(%lxCggWj)v9ckID&s#~pCqvzTq(n4b zVw^XcdnQd+!7_0%d}qtc$}tcaLVUkY@xLxqqm_-NsIHLv^aRWYR^wc$<9kp2oW5a; z?u2Ce!xFzKFf>8XlDwClOKRag+*KSwb^kj!7i2X`O8|g2}QW)uMiQk`O2UC33_2J&go0M zaQYDSz1>L5R-r&U-&TvSVGHA0Gk>b-c^L@^qJw^Q$`^M?cu9F&(F@n8k1Y?u_fXIkAYA@Kl zyL}hk;S&rGNn+wPf;Eztwz!xc$T9^FdmksaJrmD(ja{$qW#9Gv7=I_Qnq0gCI^hNf zEnY)=S@2-&BgC|(Bdf1)f+2SPWIM8_4|%;6t)p5cTQ;>LPwwRtU;i_*f+4i%NRE8_ zpLnme4y`yB`OFa&5)c)EmYWGt5o~(+;n8u#MSGCfPwpL6E{-<85B=#u?)%s#CQO(B zz~#%AdF7Sc)#10c4I4I4US1ABO-&6izWCxtZo6j98fMIx0YF1T1J6GDEC5kaQOun? zm(I@4QBg=tObk&`YGP|y7M-1)ANrgC(b3U(Jw9@x3#jY=^$11Ci7vnnI<)q-5*Zme zYO!-1hxYal=N$w1{eI%&;s7;vYin!!z&15CH5@;FoM)bS22cx$_uY3NKl;&+7&mU* zZQJ(t_R`wgiqGdGA>k&EG!O`onwm;pULH?9^%RE>A7~7p6dw8tvDC=#KqBplvbFdie$xkSX=jF z`TUrV+@YSge-N!ON5Q9Kqt%L}?I2x=wPiQ@7azlZaVsJtN)6n6UgU)uHK4n}9f*lU z8Wj@sZKU?>^uOP2Kx~) zno=b=4kA7V_hQZHag@Vh^yw3o%_Th^B7MrL5VjCwvXBieN>vuN(dW&?dTF}?i?3gx z_$N08zhR~P5Ow5O{TctOL1(0Dop(z?E@W#Y2xfYj#zbvDjeS6GKIq`;mERK1a?eMKklhZ*w(v> z&-U>^G5DFydZJ+(z;w3$)La_ou3 z?P!9;L^Riri-yQbK?a6Y6n(G@5giFR>B?#h;XdOvXdQ<6%F@Wum8A9{Xhnt|67O;lv+2kd^oQ}cS1MaN?zq9fIH7Yd`z zmC0-;*wm(qJwhmmG(y>}@4Q0=PXt5C z+HvU=KG#Fo@Kc;n%K46C%t%{=HX^;O>AOV0Qk;v{p+bU zTG&$O+dx1u`g~rTBj?b+v_J)F#N8YK5)-AYSYA_2s4W|U3Q#P@kHI=#0j9zEt{S#B z-?Z#TnNdv3UCRTJIXu4ll5- ze$_t?hgE1rZU)h|BxS}Nih3dtkulIGNpYhPu7gNPKn?~;G-7GA|9isfg>g$N;Ygn? z+q%%wlNF0ss{84MaZru zL{ubhLyNlRZWN^ii2N)(pV+8Adrc@+EU5l^d;tuHkYP*h*VsIDzIJxwUT?!aeHjty zL6j9EA|h}*dlU;M7*cjOp9N8V+_p}%vH8$YjW&7QO*`3bABIpI&3}0rCaDD{<&BiM z=dPel8LvV)s_K-5yDfm0o1xy5&!bpWVOuSV)it5bC`DG);~c9%n>`Eb^_`;%F*!6$ zc%UEBlW;pb6iB`~$Y5hVed)=_#ySQKhj5G!!b7;aM3WY-8%7Ha;Tn>j-Z5pN$t^u!ac57F4r3Xv{cJ+BIBrlb0G;p3fcC-{f% zEb!S_JAT6Ta03kaAkKyEbI@k7v|tTsd6`h(gAgDyQg9BQgh)Rk!mA+Cxfv?iG$RG~ z$~Ek3UD##9FeV>k#R%u{-jynqI3op3KtsPnX|h4Ua`Bsj-Sr`U{%|DyVHYW3Qi?&(K$w6f zDTvp(*lCaK6YOsY^X%hMG!HsFRN~`Mg-*|)%d8BO&Y;W57K^z_l4N&S9fK>^&{xcb zP)KpNIyw~A;zG4z>^ZJtgd!=9E8yONGPK+bYMcsUrB5mT9S5x-2e+Xakra>S@uC;! zVLksA=3{r^zVJ)PNkJ;{=*6 zutwBQp`gU{D)4#KOhKSe66jaSeNv829RTR>cCo^O)NCEo1Ctkei0}*CBL)K%f>5`ZQI_`iZe8Iu@MT5X@LG1i| zoHt(wq`GFqmcny1wt?4F{jkr2arbh?XA`Jo!wc1;3xl$M5T~UBZQ8`!Zx^vKXj3Ps zg}{-J8e$^RClw=np5OW&{9mcXc;k6=!XMwpn7YwEHtzFimVx^l?I6Ejd+DW@ux*=? zl9JKiNh$GoJp9ey{0%WNF~9Y5J@CK-JonslR8>{6b?esu>-+lOsR{X;v~2%@O$hOC z!q1C~i}}PSKEc<%_O;R9ZQHhuwQJWhG&J;~g{coyOl4ycg+=^ zKKG0oNDF~Th(RmJA$;sSQi48hqUtm=Qq%yaTE+W%#^$M_QC%}m*n-RyL_!?SNUGY% zhk!P90;bnsrFSwVzFe%q0AfO+Drj7&Q7c6G848m7%oZXaT!ZZDM|e$wZ|_E1y#QzD zQMC#g2q60dxV6_YHZH>x>BoNceHa>6vRx^a=R7YH5eOn;qp*)wppVPPjPj!;#p9f) zz=@4Sj4$ANUn7G(9f+t1GJbWG=!Z67ZGI2`r|w0bzJwT;kBo_8_^mw{3#Q_nuTm_j zvauX|`&qtg?u4FRm6(%}%-=OFWbB%|ksbqCc@=%ZbjAEhh(RPLBDU_sbN?Fb&F{jU zi;;QhxChVR9IpVtd}s~!{?iy6m!h|Ip{FHdzqB2@vj=go=zI>NDW z>RNa&s)pX-UYwH`5VOj#&Q_wAk5$Zvp z*~>5-MxR;AyyThW9Gzoyo!u6Nlg74ft4U+qX=6K$8{4*R+qP}nXwcYB?)%-J8RLv3 z=e%d{z4lsjK6ArvwCe5J>(hXIcb$FtRE9HTCZ8#@I@}mgNFQ>ZV>R#V{6H%3`C52K}CG~?5vF>_sCIS7oF|2GHJf2J`FKvGD3Uwm61#Ch&UNg zTfJxmiVU<4kccuzI^1`D%Rj>1YdV5$?3K@$W+JT=6^Z@bovO9StU37bl`7z5?3g}jMvWz)afs7!2tpH&Dm7!O_76{YoelC z^t(Q*AA_eSLXYq7+Fl6ke7(#^p-^w}+aGOF_O4A`MG7fgpm8f$L| zFSiJ4vjI|cn&IUD%i3)3tWbmr+edtf9F<_F+i%e`1-rcfP63cpZP!Q42Ag-z-Kud; z6Q}>a)?e#EbqsO+dr!1~H(2L*xnuu)C@{-v>vZ4s+Bs*Xe&Z02IvlNe$zSf3%6H|m zwtR7__H+j{LUbf-=_~+w`SYbt^a+vT<6%yhe?oR--EaP7z#&zslZ#pq7<~RuEFw&_ z!hDcV*N;vov(Y#bAwuQX?OaqYOeGObtL+n(L4=r5T0xI*#YcS$!sL4VQkE!X5!t{{#InMN=% zGb((>bL77~rW*-J#uDTMamI=+7b0VrM&j57_`V4EwLTGqFPRU##EkiUV1KbE+bS?= zIzv8pg?HI?A-pv`sXS4DX9uw&qY#E(qj-9WCXn@d9?Dm8IOmy=7ciwp-!-T)vk`cS z(*VH`Tl4W&`b_;dR#Q~BnbpXe( z-G#ny7z-8vO|q(SgSZrQvk3kg_W0~t)g8=p2P^sbQg(T2=yT^pNR2(xR*lH`=om+c zGZtRSOF!~k#)!bu;r0|R?JVF&sa7%`)2vX(r9O7Yx&QPN!h4U@wAq77-`04=x&st^&_D5W{wj~#7xRgJ!D#6 zmb&+KiT(a%VK&@huPMuwXe$(0Aa)~1`xdy23_9lX4mvT zq}TrDPlb%Ze|DSsl9kgvB~4C%Dgd%h|DATq3U6YbQuXV zdI_q+jDtJe>VxrkjF!*=KPuEb@3+f zDNC`kG~4_B=4Eu55x~>LVu$d1!|z|?EJt+(EdHIS#odT44t{v&F*7lmE0GgLL?Y{W zg+4@Yuu*6vH3f+_Vzn$1a`eyrn=T{nC-0Loc#yD|?P6B8fGqs;rv)>9BQRIS#&tyb zmR`fvsOO?#ACppW6~qFc5XLG8>E3tGHApdVsm8C~n$tBNv0`d}89O8xQ)pZ)zV#Qm zLCtNg%?$|6Q?FIr6>#{*SK-@R6aTAQ$5sw%M~C}&`_Hm=(6B8=oOOe}N11%AH)cb} z$wQFG?G-!Cbz~fx|Ndo4^u5joi6Z5iG$^K?kmJ6l)t>cW`mvF@MkHGgP*Dq16rX2g zaoNRD)8b*2dWAC6xgSAXI5;a?zu(@FYHtyckQP=~C3SVTse4|Z>Nd9||9V{RKiSCq zrHf?fGkx~CI{qlNw%(wmq6(?;{7YA(|5Z6<(r?ype{-Os9-0Cowo_l2p{oOY}Z3m#Gq zFh8W@6FX61l=Wv8&F5MR7op86%XY9;-V*u_I7#IF9&kn)zZ&k&wSmBZ#%B0#ve!wxM_mBgh-J6yAAI;YcW z<5E6<0JMZX4PLm4Zk4M0Ei-bA5R_0*2*NmN;paQ1n zRqfv_mK>G6JeT*xQN`aJvBZi(qApIPmVDfnIt&&@B7mEw@heJVVNN>2?lDW$xM(lC zGthL6{#s&}kUN5!NTMzae$1S6g?83qgcuf81*O*sWkQW4CP%GehY*QAeX!En{C#2; zf0D^lmV)Fz@JmY>!ILJMqRqDz72>~6aG~lfSbTgCEnRRe<%Dr@kuSZP=Rk<%BxAq{ zbrNaw6ZoeD2kLTgo9!!4VWdVdBmSgT(lxymzJ~)8Tz45NQaS?QcHbDcNal9PI~=|y zeR|9?hk7t~U}T48I2SD3O2z1RR!S;ugg2ac)7r<}J`>__2|N7!jcuUU`pOR)sgQyM zxI|iGRkfi378xrG5vEBIUCY6H_qp4KL}3eR=;#2#Ju%DE!BUIfOx5s@VR_#4=xqX0 z20Q#If|A(zytQ^=X9-$X838$MVSZCOpXoxFr#zUf>~2le{qQl#3~?*vX6`2&9N!PE zi>I~aQzZSaI=qi=49T)RcivP>O#P3uih{UP_ZLp!r~>#J`4m)!#)bR%oKd54BYaLc zMi1J?LYVGj*qgp$v%O`zs=vlM#h0Z_ok#rrC;6Ee_Y#HEFQe3HDMVU?+zcY~0g`_Aq?=$O$R8Ol-< zzt1q0-!E07^A?A64tlDN$g728_oO7AlN!coi(*6m2?UmDDBwI`r2=bdLNgjBuT;XS zb@xD~;2OPC84Va&bn5b?O*S{ms_4y$3kA#{WNf0R>Y_4K({T=FtTJo-EHr8@=V^X%^rolFo3sW@qBnl zTK(|kXWeiUod%C(Tz7R&f?F7K#o&`FQZ+RxD^<{1jKj*Kx#a)_*;hYzlt@;;qHiNm ziavi>@PdXi26K|rsTGtznO;br937F78Tu%egn6vGQoxk$m#G3Nbp!B@9BZ)17;x4W zquU(W9Ulz;s7Gsg5d7MJhAT$#eszk(aA0)IHpBul zA=Bd;n%TkKoMFK=Q1LgsVZTO7Neivc`*piwDz*c}TM(Uv>#Z*QmTnjZTGTu|=q0#V!N5r>y{2OxYppGx3QDaU!)`ej<>CUV5UC2PKo1xHpA8A2S5Sl{o}3 z1~LfKW0b~AZ&xF%=#_vvJDU0qpyMtTWm(OZt3Vw*s1EqjbBBg|@1@F_h}KN6y6AvI z36SJO9&%#8BXE>!!HIsUzUee$yg#xg$E-T9o*m@S;^8#wbgQLL1fpTh7Rw2q;V8r9 zJ57ZSaz^ek=U3r50(+10IYG!vf7e$86Z{tpU>UmCNT}7_3~w`_S)RBeMa&Y*_!Zu) zk6YiMMFB~~6JvS`Yo02ScExnA)j8Fl-7SVW(yQdWOp02pARRYzO`Qp906tnD<9ka z#^OWUBI1c}^dcX$q~Qs63>+Q3dTb z(i5OX-3OXAF7Mc%wR>;cPe>%ronXb&a1GspqFNmFN8BrSyzhR`6q%6uet1eP4rE^v zdH#XZ-@G|pxv~;*8s`2JQs4`7>=)Ledu9s<1iK zo57#SF7-b00pE>Axk(%L)(N$ege`@P2*Mrs*wK0*Boo^2akVwO5Uk~ZQN@WwA|y{2 zR2$TA$BCM!IL=4;+Zl5IgsW+xXB(hD{ecO?CU799DzDj@Ws`fWI&SK@YUXH_NiW_~ z1!HEKDD zQ#nw26h&~g-yNv&f0B}D^9qOb$ppODzE8<3(?GSUsw7!FBb|9aQaZ)i6*ZkNsF3gRY8t{HX zPTvU`l^j;*B%leD4h6#ay3`{iLx0`wSL;&TWwQ$*B$9dVwgc>hz28N73Uq#-LP_e% znIZVlyUtHQGYXKIkZSQ@oVYSG$Nx+#sU+O;qCN6jvr+-+^2DG-7c{~H)}WzkTfInT zd*O6VH>jvLrag0LGG-a+KZ+ALQ{p!$^pw*@iu==|aF+v4PA3j)ooSx8xhow%0Q)mI zL=EF*-&t?S+lhGmF#zCuXkT51@GDbxC_HVr0=AY;vLzL7u^c}7W&U-te;6liiYQKd zYFaeg{i{-7@p??)Wa{?D0~0eYG6ZNin(r5M==DWt0CLcqN*$TuuPG}7g$;x{>Rl&6s8 z3$F$ER_E#$lvy?{^Ti|#d%Cc^hP3aw5|T`SGuQxo^oX58DCQclYL*!n1L!b`nLGt* z(LphzD?UGd2UJoL$TD+ZK~Zt)jX?8V?e1{5E9pwT&Y*{L%*Yu&U+4|9A-C4!3ZM#B zWBIpc4!uH<)O1E=k$Mv*;nr{muh@=X`c7h5;+c~9{9?6sgN;L@H1`8-A(WKKl0}#` zG-_NJT1dYXY^8~LO44(C1B&jeCH));L{aWH6-LF+fQ1xs$~eS74m`u}<^V$BoIry4 zN-1uuzC~|Ki#6U(UQgWlQNJ>?M3Dl`P#IRkDsjKs9JeOz*loT8Dcb6{)TFX1e?7s| zDA)N)(s#v8o{-N>W|(bb!!DTjlXJZ~?@7u_x=(W5ftk)o4EVKxa~t;*IxnnL46Xpc z3(|=AV;<|$fOu0vys(}y%R&jhh2Wv)?jcRU*k{2xe4i@*a;9%6ul@KNgC@JtzR~RX z2#w{{sZ6TgJ9d2&8jf<1LmYk#e-ZewF-dT+#6ovyw6fP!@|G)q56rPNL46y6cGz(Y zq4>XVEcQ{Mt!A5aPG*0HVCOeDLc5MRhlfo#JrtD zd2yC7mgh@*2e+>T_tRHIm<-kH=>t#pF1kp6O?{>ZVJ;5nTp9Mf@(+Vm#OZWNFL9J) zD!E|Q*&d?~Wwp=!ablF{@44I>Jji*6!axLF)p9PdQTI zWs`kx7b@RTIJS-TUsa!WaUn$p?8XTM)}pwS!L!)TR^_klc7E}JqTSx_$Y)ejl%GM? z??YL4X0zJSO)a%0W!XhxWvO#<;{vSsszPW|Fr220Wb+BL992q2$$lW;DPb9xgiV?1 zyK(B=KSLFzAMoxUW43cL(J)eTx{;pVF--U>$|VwA7N;Pe&@=NowK8^L(sU#T65PZ2-S7t`3NViLvs-;x{Vkb^w5#S_ z4hrgKRE#FmA|LM5dXxS`76Nfoq_n7BucF4prI$A-y3v~*uvFZB3<%Po-7S{Bb{AW& zC^ngGmon;vWbt?TEipqt20t zB`WWxvk$Q6;s6#T^9sYa9IO@_WQP6-hdfB&uBsYaGz|8@uv*g@f`$F$86CP0Q1ETvfa1HO*fh?h$ft4HYnGw_peokoJFB{r5f@T>#BCyrJpVV zsqD2TnHVh0AH5#hebXWoK%mpD z%o%laa*sMiILXu6S4Cv~b4w?4Uo#btGWqo5QYlC2ujkb(qHAW5baTWlqRGq0^Lomj zj?h9#iWYzOaWbh&?%%+Y8i9A|Ffu%FL>O&dARd&Y!aqvo8>(233M>|Zdk}1ma`=c% zp09;g;`<-7RXZ)#ky;b(GsKc0>&D{v7B90y_a=9{r2bYIv6!NGtu{24=%~jT8Sx!a zj_6LKX=S)LX&8_7%dKa9@{$}{J$@1FKl;kq=uvy!u4yUBb`Lk1NcPI5hA3x#*t+sg zxjUX=HJ>j;dO1U~;Yd~es%iOJ>|fm7B?c5+1p;~<&QU;V6dxNaC@+urpPRzW!eSpV z5JQ0EyiA%t0|^PH-LFeEx2r}mbskTD08Y#MS0$0sgglsXXA5ABwZ3(Q_>`6N|A`Is zLyQ1ddpV-lwDHmlQ+l4N4=@F18Xfj_z#4up+kMDapzd`ypaZBnw!lyUz)POHAeEiG zdL;YULh(}mk*L|{Gy69Dx8TKV6(GKEb-~W3AqTvSW&!;$3^bh`|A5|3pQinGfTgH~ zMijt<4E*?GIio`Yhvv0jV>BCd7W`5lWXh<1m64o_1}-jHHr|K*u^Y{m--~G8&TgZ_ zPF`nNofYX9KPCeu>KWi~eX4<+_&sDEP#wZ3V#)*{q(G6;VtL4*S=Nw-JkFIfo@XwC$#x^##L1d)vkg<+TpJd8zvYd7iD2THtYw z4*9PH?Cd*#p@~r>Ucfn$evc2d!vgnEu0bJn0-(`*49A^Ji2>`uI{qL#VWrx`=ZgW< zIXT>*amj`GgB$I!M)fSJG#FrMG=M~WSG6oGabp{XB@VDio|UhhTJp)Lj%|q!V=?ot zN{{9D1bjH!J>3Iii+GQ|1>$Fu-Lr{0@r%i+ov5Lo}ZOq9%>v7P9zRai5%DZw_ zh9d~?K0+Y_X5f2rW9C4Q*Ld3Ds3|cfya?a}GTiL)WQ*64Q5arxQS8#y!U86U`AO*d zmDweRI{->He?+pf(czhXJ=1=u3N{#|?3ve_h?EDzQ}-Sx0UeGCIS`s?*+DB&XLlC| zm2G z9&@4Y!%E4ei&{B8PQ7{C^R5q)s<1KP1n_sjdo;ACoWd28z&6++W)G^fL+!=%uD>%5 z2N#7qtgM#rx5cRG)8_;{+&WKss2N^y`qzoBxiL?nZ0s=boImXmaz;5QGq^+~g3F7q z+z1aX@UooFoWecDqQ(h@3uHNDjnIVB^eyswo}CaGS`hNHp3ZRbJNmy2lm0GYD*9oY zMU?Yq`QM1NFj4!ID`qEjU#ZAvI2J9}tv0(2hi*1-`Yy$LG(Pj;z4l+n`&4@k+5!`? zF>v<~G)0hyrjdP(97f;WJ;;bV`G8&wG(M|TIjf99@&98Pk=kT=%hHnc)PE1jeBx% z+eegFc?gvGDU+h${y>2V;YSS6?d+!23@TFtRQcs8+KVVjT=4r=TfvVC4UALE#RPGFr0_QWQn)U>-BwTBujs@0yFAr{aF=IcqUNJu-eWlRlv+9W=z zR#>@>p@ zyv`rJ^NPS2=8>W!>by~aIc3roF9({2PRz%?eB=l_t?}+X3{ZjR1KVQP7rNeQ_RyDR zm#W6>n^19Bov?kU8^v!)%LZ}P{r3#+vFxosd_$WrWv^Q zkzMKqCF93XPpY0z{ltFz5aFySf!p1OF?eGj42kLqtQ21bFR{J^=%Gd*&; z%*^_ow-HL4+rNC(zJ6&x<1W8-(}b0O4%=x(BK;ddX!u1YmxA%PLh=ML=Y)_(hW7-yV^1; zSFG^Z-5hmU&aq|6G|g^{Y^O@4HXI2#g8#9^TE7pYT@8sde8VE7B1H}MW=QO_BacRa z77{Ha#*WqQFjjIJF81^ryM628WKY%g+l$k#sbi5VI;YOLGN@fKpawamnLB)y0;vkJFMmYIAWk56k& zUym08P0UWWhf@1L*>NB!qkn{ z2Gu$98y<3F;*4=RO+oh{6>ws?L%HU^FMxY}J6?onrtcg^dsW*jn?bV_t?&y(zK$>c z^SVMGnp}HOGiQjOp7Dix*CdjPR83haQC50IEnsM0sR=qcAxOjl3DQ!J=rv59$(qFc z?dK0nxskF`VNnUv_yZQg9+|3mi*GAG0R&S5x?oEK6axdwY5OXmg8|yfFeM-KhLwh# z8i+Vk281oY%Q-fPnXlZ{-JVP21dkqwLCmqi0sEKh4Z;59J7!*bf@pD-3dqI0`X=AV z-1x9z$PNVl4_|Jru$O0@-SV(dhg<*nYl&xMek4E<+2x53+Gada(y8s3WHn@I0t=8k{e>H?4(u| zOXo3F1J(ejzHwh%BJa46uGgCrz7P2|UZY(7=myaJSX+ecJDGjEGjb_)7QC!egZ z10GDP0i2gJ&Y&pi>(V$!dN6>RW+@C98s@GAeMR?7o6YKP}@C>|XcO(~Mc<`00bX!v14N6N1%ckS`Y zLbOq8Mfwq7QEz$zoZ06tj|NuS#g`Oeb<$f;WgftR74vcQr?O<{Ct9eG$|kCk^sK{t z+=>?9m7qbSVapu1G(&>}&@<Y?Q=AJHAbt&>N78+;e~ zHyju{h<{ixbtga_w$Wj`fl(ks9!1SGACDXy#%~&~n8=Xr_c89V3Q!5&pR?3$&P4%% z9eaT?1}i|mz2eD3FH*xxl3V!Cjk3o1#d3>89&iw=(+FwmF?7QJP)+mqVcCWS`SR~E zR`*1Jk-z|;R)g}kdx3h6GOPdY;CA*eVpHWAW_UPdj?jwKUR@%SUrbyHsT=C|by%3* zQ3=M*UbVkOS}I$Vf9s8C+8nRW4H7T&CF^;$PXxw`3)(^0v9tmNU@K)iLS%ll5*Y3r z13J?GRuLdk0D6sX`B0UO_)a4x0LL{k)%*@-x&d0WiZRYeZw;lf;QP{R;Z(&=0~7xr zGE(watwx?Q-Mn356c;7x+8S%U4&M4dH|Zi1>{cvGX7;LqD$8KOpMBMU2H8rY41qF* z+Ixm+N0sFXr;JwYD%r5~98Z*vXe6v^hV|+`p@Ca7HM`Y^4OISFC2pnF zBTW$w+SUUKnT)0q@Ja#QGbliB1&n!*Sd^hB5Q4T&{NiYH``M7^e&wD?zkrXPRnexk z`1}ll$}IgEuK5#A_3wdgwYJi!QF<@H-2<*~n?Q^X*WcD3D|7WqOTy9Sxixx$Y>rDd zaDI*SNsQcO>KMRQ#(bn8)?9kG#HR$%@kL3Hw8Qu-WHp>5U`>yJX626+mDtH7ZVX#c z3(rLS8d$2VuGqNB*Mmj!BK#?7vBSc$*oa-`@1);IdB-o^CF>+jTyk&$^CaK}9`SbL z0eWqmPzpxdJl_e44Az-B3;WR>3B1)CJ^mDHe(Cw49a7CjaGFV2%tS1TEdEEyZQU_b!;0 zyOnZg5UFUJj5jfB=rMI@O{qNmxhlQ7EnUs`l*03NE)~1k) z>r~VoL0e5R)6AaRiUr+KBkjt>$0)U`iR9BnjE(24AO8fV9dX}XZB3`(cvNI2xBvZt(oRD@Y2H6ur~>I98~MWVQz8Hw|DOvdLq~yW$<<$0_S`W9<0>Ns9YkeLxlwolPDei; zI(_3hA?pTv0pPLwnzFG6)~zOTT)Hp27b%cEFrCLb`V+gWK7KxJVfF3kg68xg39*_k zOon|7y8sP`u9Vm0pxyQ*aHES`l2Zi$mdd>2u&ky;Rqvw5ItuR^)gJ1CXM@i60Uc0N8dl`Wfe zNByuDSs3;n2Ms_F0G*}t3n*sb+<49VaaZ?*ua;9|o;yP=Mx@7#t9~bN;j``&@|fe^ z%&6IDhED5zwi1OsW}4&m2!=5v7J+GZG>IdehYaY*cwbKnzV_Ze^zz#HK3Z3BQN-HH z1=%R^*5;}fi4{p1@E8PSoRZs4XIG0`ITdL!M4Ud%(le8@D;MEK27vY~Qnm8@R`j1A zrOp(>3(p6u2=BZf6TB@qZnqpKN$@m3Jf4U!DQk6WEMtFpkr|B;895NvHcub!jRAyAv2X}YQ{3gYdJ6f3mN!YB7S%3HtK)g}Avsy$+7#-1dM*W=~_LLL* zu0+492@8O3KP^4Y$-u^5Y_(PqNV`2g@?X2odg}gwVMh4D6&m@|xv@}vQeme+wQWXi z&q}~IIWxDq?I*Ud0S2^dGwNB=6Nc7>I5$x#c~0D!@QzE+jnXGLa_b|rio|E!>`xwG z770By==2AiN7CtYbG?)BM_HPBDEOzq<0p@7^d0YAkWW&(hy658Du}+X&@>kn>SP)! zjYeNQ{a7>pvWL}#?uMoeqUM@vGtf^;5m`0!PIp47YIy!DP*xO!U!ZFIN2B)rubYw?=0!FHdb+0_sJ`=mP-So_e= z6O6UPo$rk?qT~c+6<9ymnrByx=22tik}S^R<$f#jrq9G9%)g2iWXOYP#|TPe`jrx? ztwl0vjxFI`#iuLFiri(-m8c|I?|NRy5Oq`WhBTz)jNp7k7q+`IH5`xXp+!-wxQ*}G zZ&_;FY>p+hb6kNGf%M0DBWAr)<^OW)&c=?xBod5(%N-ipv*Ph(X%Sa+o7Th7C@8s> z*B-3s@_RUO2QpKxwbT{10&dezOd#s##%JP(A?l)b=k7RXZ2B@)rZSt!yK7IGp8G$1 zrnZ7AB#I8=P7kn0V~jXyr=W_^#iR~S5nSx6-#9I0h=>mZsU_))NS(g#&T%h}HfEHm zhcNa{vCsFsV8S8(^DKBLDwEBW6f&fd6L}cal43*RxDIgG(YKr9Mr`aHiSK`KtwVHF zYXvhB#+hygLp{#Uz%ar!v*$-eBSuBZz4##0$0pTLkQdF-V8HvgNG>Jlpxx_wyiPU28C8aaTCuSq-0eBFN=$>|4)f-nR%9@^u0Y7D67Zd9oW^J3$$YV5 z%BOgcQJAA|Qt~4*@Hlr34ZqC=u54In{S~M;dWbkzzx%Ew!9TJbH*=%A)UsChN-@S za4cL3oFF5mMvsJyG1|{8P(f9GU$8?m9xo&$H92m|htJtJ^!PSFreF5;EFt7&eNp3Z zkRmoGcJO}E%2DosPU-h`$_Uc;Ls7TOb(8mCKaF3)XI(NcBgK}9lvECt6@WE%Jah&f z=JGRPRlrRS721K71#2ocamvpiQf}hrUxui^OEu<|X24+POg8;EteG97aZ!OlT0A_ic+1}SLqNMI!I9`T0(-~I<$Awa_Ye|sjL_NVS=e*^4 z5cpW8BP3EM4m$V$>_d_Cf%9T%n}Jxq(k?IM&}cF{5=bAS<|Or(gPhJzk9Rig@W~jkXQyFN_S1kE7a>~TYws6; z-j|da?y}bzPV>j#e2UTM>vUHBgxkgEjjAWu#G5*~v2&F+_yE#U?uub&31s$u5NU9* zD>ONVTK%MHqXgXt+f?s}zS6l-S3WEtA0nRff1?HK^rVO^GoKu9a=lRu3};KoEtvIF zvmAIo-30$M{zLkKGSqiOZ6I-TpUC+Q@{sbx^GX?+Z1;FRF)fgz3bojlI@05W?I^sh z&MB1ADzliqao*G5NUtmGR%0KE%eudGk%fXksuF`vl5a&em`UtCay(+ro)w^#qFi^F zf*ilN*t!tL70=GE6&%YhIKFJfgznG;M|8<*&YzNiZaxV}37i~a6ro`e= z6ok=$u#8aqjoB_)Od=tG39% z#C%hcAIEO4J6FS(A)%X0L2YJfW&OD9j*GU?PbY4hcPoHVBksq>N5x?EzN+S< z&Cl(h=q=4TCrlP${2mxBe?V+jKcDoT?Yy+V;LeP&A6jZVFTKxAw}r*5Hod3{5Afi_ zO2qzP>N=E=XBSZv9Gey>lnq*%4OLWODdZ)RhlxWrjw?1+vTf>F52XIk=tQYz59Q5$ zguF+Pe1fr^(G^pW?R7Jasg;c1pOd+}iPjUG83Ux0|H*=daolx}2ojpx*TO%}H%=1h zYWeLrj_$*VZoAr4+zmTZi#=dlnn7#Y_=c(HX79dJAe@s~2upLRd>T>?rYMRbqM?qL z-eM^J{XIs+0CiVg1oT-B@VS6slJYi!yE2c{6HCJuyC@xj}GL z%-u^qzq@mu)tSzqkBAmqK-B5dC8ZAD(yg{KbcWOWd1Gl79IdMo>~To%?hHB2YEv)- z0gf*hj)g=uBSNGW>T#Vo8>f^oq(DxA0$lJK)xSgA+3hQ-W`=Zpk&inW_a&rZvaj^!}gb}tLe zlEXY6X_r6fesu-JBFCuhM0)HdN_y7M|Fq8Hoav;YFBnJd3{L(fK=$_uNcIcr_&_c< z1##J7z+Awt7+q`EyNpV`O6m9@9v-wadU|RSzp-3!GP|JsJBsXp`Gr@6mQ7saN!IOa z_1i-$I!>h>-M4x>!Ayx(d}lzNS#DLVnkv`Ph3K*y?bah<-z1?NeK=C8b!6tC$w`X) zmsi4I$p)gkIp}cZ7^h8V%w2`G>z3Ea0qh9>NX5qA4^%XAP`c*Y?xEa8Mbuw>U_f~Z z3szgAHyLKMZ8hDebaG0A3U)T1a3{ItRc^nJ0v~627Zf>-NVw8ve_rrdHT4FmwKd_XmXW8`|nL-~Io)s#P;X-&&XL*F2K+)6PgNC18U?)FRO80VIix;;AWuyondL1~f z;zaBJ-Jn+fOr^Us)bMkSb91Txh=eg==JbDi{BxeuL-Ta}Qh~id1rrM>{B*4Y=pP4A z8gGV9k|_2mQn}f4)-s-QW9SC8zk|7)fdVlJRdF{Qs3=U58-3b6z-3x_xad$+(H>62 zAf@5E5h2~Ah3XL#NuC$`W}n%-W}I8mobv#kC0-~QUrV1q?jQ%k+|8LKDypN z6LAhH$n6~@d&l+%jRg;gW(bdortzt^h=|FMdl#Md86qOO0Fc%9>>S-TK`(n>0y3{n zCDmy=_yQkaia`MwlU=8&-J{+LIMSy18%hn5#jwTb&sf zPU$OV;#uwsJr33Y%H}$xXO53#VSX@)xm!BBdrfJE^>@a-j3Vt0vMVrZ|Jw8E8u4sTVJ*b@9o}tsDU-hr2;pQDJf3h?U>O%g(e-+I zk^zX(?b%S@hO91Zv~fdUpUT&eYs9P}HzTTYALy$SjmE35_@YKUs#Y5{jxg7bM{+9O?>eSPTc9d@|R(;Dy0P= zIeNx!4Qel`yes+c)nW!OtLi^BO?E~3#wpW8$!2ZG@>+~!tB<*v7mxS2k(c*L_>~<(ObrC9*soYJhKJdFvP`S?XODqCozFtLnig;_S4a$QC%)E2hd=B2# zbKGo|%S+PN?SL=B-7R}&O3PUKTl3M^S7j#(o~aDk+?O5UlNr@z9%BBNBch8M9PRU2 z%*DZL>!;d^P14KD2!#&T@gl_}1uG~y<4fGb>dc?v*Yf~iQKYQ8C}E8$_Qtd;#v~_2 zt7bC6!%T<*xA0%FQM!DDZxS`(D?;wyX)Ow{j`B4-m^m1S_?!v5$cd)dYL^)W+pDk@A!hl_!AJDwxKTN6P&Cj^&3Or^-obT5z> zRYk29ne{~#vZrIyA2CF|;bEj$8OgR-#4RZmk5FTtPx@=KYozW{E9m2&vuDp+sHEx9 zqNMCYnasXeA~KLi#khSs0W1U-OxXcG%mmOzr#!X9Ty772Gto#rwEgRCKC%7(QFP65 zarbe&ZQ1VfmTlX1ZMBwLwiYfeU*@unW!tuG*RuKiomxP1 zD%{2I1Y->7K4dh)Pu1h>*Vp}B-YqqhI~ewZ{EVOlco@nGef66&{!pq;F%oyXv7%_u z_yJPMY4r=++MGh_sNs}wz$!j~6RNKc=BA@3PDn=d^5=P0Hq!W$gR_TtZEGN7-kZ%L z^%cLde9*=d_pq5^9fh@oOSle!k^KA5AbHaqcexxHr0RTmGXOpO?RrZ!AN!pJ%%*2d z4>*CybW3b}y9|MRnvkd-?@Qeqi?0ADX6*BvNJd&ooQAj2_cR>WsA(Hg5q5$o@=Y(i z%76g+CD-Bn>8c6PAOYeBK;b&n?QX9H!ZqKXip`8@o(g|n|4^Ifwn{8r2^7HrFwIjd zfri(0Q3En7GhIcga_qU19wup!@xfG~ayP$=#cX010Jys@u*zPpxT+z?Z19Ja*mS$* zMogo~v+OGw(X0m8J|Nt2Z-&WJ^OmLr1Q?Ct&+(*tb!$~K$d;z?OKOQ^!@E`Uel6g& z3@MFZ?q2b6#73W0i_I$3FQ01ST%2eV3@tv2{M3}(SS(8hR+Zzs7n0{1L;EXwiowLJrI6Im6qqIvx*cXVXzo zN|EyH_l#ClIbL)di?pXUkXwiOIt`1O_5iyh_id6}C3quIOw4nhct_mxGg1e0vP`(B zGuQ+;+CwFAJ~i6L8x)<858$sL7!v%BdPy$-VZLnRMbV**9FxiqoN2Np`)Ra?aU%{u zD_AR7fo#GaU62z&svF=sww_P@7XesEi%lKmDU0y2d@*uW)5|}XYN$buP@iU$Jf8=T zPsuN1e7YOOn#L>XOoe}iKyT}s(?{x?4igCp!ncq0j&8SC%1x|V@}bFWbQ_IrQfDc$ z;tAcMziL?Qa0IuMxFW#;rCtZ-B+Xro@pOFBDUFj(v5GsH5=fGJ1h?O}yMCROaOktC zRdJsK&o-&+fgx~y*+*sIy#uaWl?WT2bK+i4Bl5FAzVM|u6-M$ytl^)R-X~6`d69D2 zG9jOSD7;1Rs&{hqnLlct8+tj$jWTw)VHr;$-)sxWgbBn)4?I-u5sIAXFew4gt(=Y3#lKq4w=d zbAouU3$3#3&VlCm_0X`T<+I07co^^zlfCAU+xY!2)%a+ML5IOG<)8XiSbMYXZ#s&0M@8oo|m2%N~o8M zW0)YsVYiFo78zmB4-M`3PJj`485W_7hF-+w)@U@{4_xpK)ZtHlNNe=1!X$r(m?uzG z9RdLN+M`OHf`IfAaCMYvu-n&~`mX2&b$8ZpK|!|9X>HP!nRvyv3T5 zyMvH|rl=yMKdoAEPx%?19&pRE7gLZLZ#jPodVC#7hG0 z3&B>Vd1yIw1ChAL;k54&HMdY6-}w3k=`U5iT1Q@xBNXDoTqf^F2*|#4TyZ zXWYcg%m(5T)}*V1u0QKtqicWT8y{H-;0=OGYnWHo)6K2S7Q;ZOS*pg{C_EEKfpM^X z)M;W`pMx!Gf!yv<=RMZm2b8J05YGwvf^UdQiiv?6^GD~Sl+hLM%(6s4>HZ#BM-b;yf9U3B}Sd)LamOQ!{$kr(5B z(xMf~<>Nj>64kwdCi6U&>rQJsmeZVPYe)oFIjD^yO3yCD2f=24cJf)m`cr0hRqhut zn(cwFD%1ciyQL?FSA%Uww&PLY>uj2;l@!xsYC|sk;m`+xjl|;e!cqTqEw) z(GM=)T>3glTqb=7hB?%b(WoyO?$eG;w|5a`LVDI(2~V8R#I5koB72hL%`jdstpM48 zkw&7pcC}92_an!2NgMN{=vy_{4mV$>RPs%q(UuV{LDD&P-`5^Z2~LLz$M611nKTP3 zJY*TM4GG^;qM8g@&$4T(rBZlhWBsE@`xd5u-!=tX*dR>0%~4ip91J6*X4buh_uG#W zWRuKezaT{B9$LC2SIrI#M(h0b_X;iZ^w0Q}80h+FQSPKNyt%pse?9-ed)YoV+b4vn zj$Vq2HtodW80rG+A$T=%wkqUW@3xD3f-I$Yb4wVq(n1Iz(Db_4=u8qyO@|Ny+k?eO za>xEY;h9cCl_V_z)+>&7IXK(!D);M_nW^oayzlYxzOVC4qjN|q=8kK?;*@NW>v%nN z_5Cpaku=3sxI{x4O#w)aNBvEW6qyN21u;r{nqWZwd!!;&!XP0nhPfx;Kx9cVNIr*FbD4$oC3&`PTW7T8 zPqvS;QPL%LiJi;~Ry^6$c8k^tE{4}H_W4hx6zSAVpJ$h3ps!s?yV^X7=O%&b(a^_5 z*jA@1p3WHbV~?7LW9udE;hgC!HUNW^ETzLaQa4SZU<}M@1Xc)G4~OR;U6=;SE_WhI zu)ufs#uidSPOEv)rqx-gkaoIwy%3D26k3rMI;(+jn^@<%Qf^k@AZc5oLJ&x{aML85 zWK+8+=l;;$+I3x-Ny`4!87-~%Y4&wd*b@e^nw2VYponR}{oJ?GS;Tkz#rpIwTtKp8 z8-81f#7i=4P@pKTi_yA>MNv2hi0BV?mGu0Ok)R;X95-?S6I(~N;i~KX&hx4GV(PsC zQ_64f1G1hxwYF_Rp4@nu)ExJapXcpI4Z98*g%*!Kj%J#u!+X8%r|n#jQ?I@>^LQKz zUpQ0u>L;Lbd0dRL7wJJW$^Z4#bd;LQh$-WDYTD=2wg4z?+44ayIysS<0j|OZipw?FjQNpAm5mSE z<|0j-`uM$^^qJcd?TviL?49YmEPJKTOC-f|I5U9G(F0Ev@LCLAc0oS5jL7=US|NoQ zI~_+UBnaDhgf(oBmH{{@Q7Uq!ae4oyH(<4?_>%(_dImN+ehc%AWkoLxhEgtfa?}Ep z7>r*?oaO|8v9R+zy|c({y;U$jAfCD~*#E^r1cZp^9ZG<}e()Faa+qxb##$Msnj z!41Xc(5WzF%YH3s;WI6Sj5nS8YaYGD(DYVBy3_eCW$lYKkim5!=n^$33;ZRecHOI$ z5@JZ&e0!WRG{6a(WQAu`ruTU|)fn$He?oS`&LLq*VU>+Adx2-lJ=!bp$o>mV5dP-w zBPqs3p{i;#$q2Fv`xZiE=JOkIPom)iE%Wza!&Q>xR0)SJqbE2*A&ym-d%XhFZmd)O zy9Uyy?|Y3cAyFeluMK}O5g@L2kO?Y>1tiC;ehr39*q|E~PG z38y`7@Gdz-KM!Y;DBh)}*91(M`H$?EMaBthHy`^zY0jeY%D@B`HR4k60| zQ?K_MF#^mdN)a*b`WXv?-+-!Oi+J`+mFVt)M9VF499wj-JIQ7&opGf}hOGfr_Lu zOG02Mrp-qlnRd`%r*{xGH}f!+@6XRs=m!`0O%vzZbYlVBzYrf%GW>2Y_>!gh!78u7 zKCnjaco}KyKGsSA91bk=4Ct970X&C<@nB_cAWO7|-wja=V-#3tE#se81ie2PKN5X7 zIs5TNvA@?X=HFtZ)@M-jpy&QvNE#D2mb0S5L*^R82}NhBRuHQp(H-+fx0?~UR2mg^ zkJ-?2X)d1eP?=V!e!Z`(oWe$38ge)%66M~neF|B+*0vX+){_WeqV#&-5nnz%W%(o) zR_ZT@-d<<}xG$h-5!Yu^pNFq<7;$$c-H&t4UC@Bs?=QoEC?8q(<7wM+7FYi&7srEF z*`}_l?JWVL%YN4!VJ|;dIx6xqYOzq5Vvtn#KSlUJH{*=Pkc{*orwinLKj6@|+vaRA zEZ1j%3g3a>yqo?OUi>v_2T7IOP$qO>4gB%^0S1`EKie=7cXW&VAD}#3c(qMS9t6L| zZ|Yh_Q~c}aGIUSCGZwza)uk0}pSo9sisX(UUPtqIsJo2{7J9l&ZL>eEzkf(PLlZve z7${IgcB3qgR$R!n7ne5S?rtgU)jX9#vIe94rGjy}{d}wd5@Zf5lqb!j;3rn`WPK%G zwr%}{vV7tQkG#51|xDXeF4N^1oe_S`EV0IRBh75o~!RK}iiS-;$#>jt{t@ zj7N)qi&|KxoZyBQnrwXbkQLfr4uqE8T#Tfl#6phugVcBxai710W0`3~2V*C@!$$sX z+>_T6>f7DMNQKleHf!rRhAN=8Vr4s~4As?er8AP)aQEgOFXJb!D@A=D@xo3>efUIh zIYgkTwB*M6QKQEs7>4j=QMK>3fTutqHDI6H;TMVMk5*g;m3rw_Ijj~TJ`Yd5Ofhzx zb_CeV+e=UCBXI8mjq|zgERIErR>wULAVLEyD3O2+6mUz(yJ@gcSj?wHHd*kFpXFY8 zefdDSA4ExW!o6Zw926yU)8Z2TPxQtwVB^qBs66WA-NFl5;k7;?dxWg>Tzo< z#0WoLoC}frP@W(N=v|3xm_^9|k(B@$Hi@;PQUJNFE6o0j^xWk7a1N<(q@qcUG1Gp+ z&-@nD9*T?27s2o z>4%h$94MSKL~WtqE4qE)9yFfT1C*1@Ce|A=Bn7c{z|OIU93S^2Q6sP&@_Bs!4TajE z@5f$B$=2v000b==B)LhChX#Kn_&;7g--A_gfunVvDLe(S)tuq>pEYCuHojZpG0;c; zg&YR?Q$-6}ZncI{GP{}zP?38?3mgIf=N%HI5NvJYIl?4ciSO_JRj zo@;LapeRf&Ix(FC30YUC)UrnW5Exf#?y*WpUrdlp;PTymdPn}{CCNSN-j;fL#tCW9cH+1Io zKBz+aiSI?H(~^YWjjoYNV<@5|F^5ZcaiKB&&^KAcvIy%?WG1Q)i$eBGcRd|gT6_pQv( zZjq>VxFL$i$x7Va(QRfb%dm%5q^(U;Sas5zl1J(#98r%|NCrje>2VzIv6!WXBf|V+Oi7U zzG2))K2t2fGR0=9bdyfJP;tYS#~#a5lQRYPXP@Lf&Cn{AblzFVsyTwRGo`kb`J}z# z$vFG0&sT=mETWw9T)1nT674Hp_?Ir-ktIB2FAFgorD$Z!H@Ai-uBH>tuMz&)mKh)P zz3|X}z^UsCzgPJC02M@*6%Qq?yiREhu^lw!BuA+zMDyC_iNUfH^c8A=1upX22Q&Oo zk^Xw1Prv;PZ*G3J7H|Rf!p$>b7+J_PbQSUC)yM>_c#l?xgjROJ@7v<%fTq}38Ye9& zy1S0{&k6y+?T-_wm%(F=>_fMawH^n{!Mwry!`E=Irrf54Rd8j!2OP_}9u;!rDM$PS z5hvu=`jS7Z9RVol0fNt`ZA3(eef^DYPzr_|K*f7Jj`c2m!&w_z2^GyDm&n27qvOMd zi;>mYjq%YZIoPc$ZvO7P?i9~28hHiR!sD4nQr}PmA+o2oHr;nRZXmKV6t^fdaG+FpHd;5j#zI8o7?^}pw zJpEC?IdP{B3yRr^cX-Pm2r2dULh(czg@LCTnv@I7*}8G;^dff%P%C@=f~z4xaiDED zZoV1PZjdrcd47h6@Uopejcje+H7J7-?M5MS1IHY;py^Q}^RIg5a@|wk)2n*=3ueO2 z$_;jS9n#dadZjCAf=lF;JutIy_6B{l|6$OwX{P&sVOpl5rT(>RBl`+9ZTJ0kc z7{^m#GoaG~Z`|da#t4?4NKX?%JC{O2j?B76%Z- zL>%#8?;oFZtYMjF>Roe(Hd2JT&e$uuBe55V`Q+f#DGc=i3QAT&R3itH?ZrZ61sMC1 zbeKk2@>Qm2Oc`X=IoJD_FR;h2&kX>2aeSQoBRZ;lr*8?)2!ipnn_)C_I%WTwg)EJ- ztZ{KWOj}9(tTEnU3XR%*gu6xFfWoTuz(zOG&9EA9ceOtuV8v7DS+B-(8e#~q{uqOJ zU|RM5FY`+LPOJ%roWHBS*Z(v^FPYz~bN#?Xu*9k;9-|4?RS@kN*)SW%(=D<2%bdvh za@4|N_?K&Uu3J7(YDMt`*8j}0jUfXyQs{7$G$uUZ9aJA_=&>wl%5-U1!hN-0N~iFv6`RT@P1LMZx@0jfHm20+HhfeSFOqNc2fepiwqalPUktetg=$1+ zDOemNt_R*4=HUz9?yBtEsqDOA3ij#XWiUZS8NAJtC#?RAth?NR%sqzCS#;&P(a(yA zn38O<&00E7PFSh(pqc#6S(a}MJr+kInLMa2HIg44Jm8>DopfasyS=@r=W|a~Ud0zD zI{aD9*q&O8F=b}BLtd9r4e#HmiajA6B&d_yLP3Z^hnAqGBWjvZ9&`kT1`Ihnk1$-X3DFGql zD7x-N*`L>AY7R5ODnBi<(eGNGD@k-HV|vlbe|H(KmJ5|BZ$urRV#FQHQiOk>t9HLg zHh1_SYuMz0wZ;KWBO{NCFE2(k5BwgqjNf_CWfKCQv3J%*L7-kFNeSDA=OiL?7HGjw zZb15j`**h=Xa@27Q7N9r1a3W|vhnjX0jj*G~QYC3UIji!nJ z6#Hl5;cx*@9QjH9T$VaH0Xl#pQ%{s^cSVYqQ|bi_Bxea8F`C-A!u;fs;}aQ z2$zd??NLpRBxmh$WIeh<(w-ny&wWm0v>(RKd!A;!V(s0K;DIPhz@n4)3-=(K z(*>gf&WLrcN)1sbu`v%jCid4I{Nmh9ROm8UX0^@bcJu4g$dE{SspO9i`157OvZcA` zv=AVw31H$?8Pk*QE5s^j3T&RiHzwoV^!67XMhlMUJepB4xOsHKgxdW1Esa09*2li( z;CxT(cp@^99H|<0!`!YuJmd>2Pc=7pcFv?^{~P)`(D5Mz`rKm&Re@YYatU_(3dzjC#LPfo?px`hXs4kW z?@ItUdQrVC0&$}&4Diq6nP`u=9E5EZ8~~zaaNYNo1I>Apc>vM(EozoB5px+T8e3#T zb(Sfs_#G5CTsbSFlTb>*b2VhfkYmUw6Lk%B;!htw^_uUQ{|vl-i^S z|A-L`;ry-X7^&&e2a3;79e1#r8mt9$w?1cpL9p zTwrGEl=U|m0CR$8)`-(ij!c!UuzZAFS%upiGe%z9T2)+=g;V%aYqwawe-Z@fVC6WXUzURuMBt$z#b63s$icmI8jd$-RZmj z0RgYbs&`N+(VY_{1z;oy4Qo&!ST2&#TVrVPq&C|fkgS15q~tpCElkd?GU{-yRfHH!r< zsE6$Q@`rJjN?B{Olp*d$n?eRDp6{8^4WPAD9QoDu;9ZW{F_EUAAztc6(rn!6WomaoiyT6Q!ThFRZ& zuKFCKPSaZ`#~j9gk~BXQlD;OtQSW6mLN(Ro)82OdTt`djreW^(R!vdxaLC|5x20RoMPKF;r>FC}HzQqW$@25a6ef%q)_(hgDIC_>QbmF(&BxcsbBBw8oW> zwTDh_81+CA5s#cc8A9YFolD)MQZ;_gxYGB-#VB#C3`Z!Xyr~g&R^Pd(gGP9ScK-XN z3KVtDBud1?&%zs z2HMXs`A#vpH-7Fa65@nXA9W3|%IN^GWe8^=?TG~NhK1>2yNCN&^qXr5=~Orne6WS| ze8)}G#)841o1)dA*$VmdI)(d*bYb8&QfzPpc9Oj zC&u_vDW<&7eznT&jJirWeQdf4v`aAwz=KTRKmlA-S@6R4Evm@IXKh&+^=??=uP#}};F8Xa4Q+soh8z0ni0P?U9x+6RfL+cvvaeWBp zF)Q!HA~dGzT%eSy%Yi0>yYJ=xqMZTfbF znqGL}m(Rm+a)CWs%GTJG44c8gBPq+HFj}o4a++Z~iubOR5(Ay!^<2PfJAOQSmNp@e zj}4KN^(_~=IYrLt@I-Rz6M!gW>O}sDrVwJjFZ1mZ@OuL;y6Dh|}exwwQ=OnGTu>KcMa&GA-lL_xxO-k;TiT zEy}flzdG@Z=M8%)g1*1EswgK*Qevk<0kQjsd;WJ-VYag}?+WH6DcPb?@gI6zf(3qY z^^hG7ZV32+;n;`x|_*4&7?N=1*kT5`SnXOzN4dqv^cbeH2d0v_sJzKj` zi8(_*$f&OjUi;>e5-_l_;T?1;?d|tGGgf4-(cIwbxfJVHq?r(!XTML8*6`D?#H0Y? zOi7dwsPvxoAjU)T^imAMprrmJ}&Sc^MRFWJmihgkU4Ga0z! zXTb(dnJG)5z_H>g^?2`i#VkJkRdtVSIi~>b0FTMPLOPbO%p6xqtqC&x1`AWB$~kin zObp%~*|C3O=%gvrtjcRU;tT1M^(8yWP9$|gkc0~?SE)=FJb!x)w6i{O;aTdNuHRHt zpC4{GJZ(=%kuuY2$(b$(M7^M@$A%^Ay;>A#2nN|cu-sG?FP_VHpU3&zob!#W@C%0> z$ig+$90)Afoo#MeZ1lXo(HmV@JxuDLv8na>oAgsy5G~gGLV83E&+_s^%HSl}(qiZ~ z^&QEyjCQR%>OY-8BHR*BC~w*K*$ew%@=i*Azwf&I;WI&IWTGtI)#K1T&{KX@d;QGb+=FA{xDcX91Q`2 z@of?zBnW~VHB)$1Y_}?Fpe;mJLp`o?o>}S^EmYOnw!qE0&Na-?TO0AL{!@{?#ET#1 z&ZUyRsJt=`?79s6n4MuqrAd4nbQZx%$lJqL&yM@X)o1~rC4Go~Zwm53-HK2k)NE*yT1N;s#4j56)9BJExPPo_C%VC~AmvjR8 zfI4SWP9N>)H`IoZPizF`&LJYqP^7%bhqxK`Db5IC{^qETB;L#h+u6&Z63g~RAL@6P zejV5xj1*}Jvg(SzfjI#`g}94Uo|Uiv1}9#_;VGdz?k&&zl8$RD7@UZvv1?XlEQYk5 zgn;^_bIAJcpD!abuqyefbyFliPj6mI0{v#LkFfor?rvV6Sm$**d_hiDy(hM7Vlno5 zcKtdX@Xz|010K%)qk{Of-Hi;RU4#T(MI_8)bRrf69*#LIbyS)m9g8;zpg8)Al;uF$ z2o9dsE{s<7#J<$SyDB%HkmEy)Ul&(Rjfv&Pvl@|)ggRc`5Zxvew1z@%M$cYMx2KAOz9Vn$ZWsWiQk>A1(|8Ss4h7m+qvo1sh#}^ zNY`oNb!7d?uUw@NOR9+PXHAAj5J8#P6ESZXTnZp*odwy)_IXCJTa?g34ePaR2CVy9 zju$A|PA-%fxq8n-jW^~}iM<^XS2ppz)I)kk$$R`o5}ki87ucTOK?Aeaq{@n4ox|O% z+wga{WD(NNtCM4js_I7vn3)2S<82(PxD^IfSA}Ua>`3sps)itra+uZ`gCt}^%d{tC z%#mZf`qF@yF2l7H&-V&CK!?>e-W?wC{P0n$`-pn?o z>T+L$wLyr8P7a49xvF6?y^Hh?aU7fury>SbDe!n&5XsvhwZBvQ)8f}7Lk#q} z0K;>-zLVlnNA_dWAN& zig7X**9$;u82Z!6)l!iGyz!fc1`XmuYGuPI){(de;+bI#b4-dr3Zn75B_W_#{l8o- zy-`9G%$=$CR>^?5{jt&C%%C?~al3l&5UXEy_Lo&6C`PX}sL34m4(SJrsY18BJg)Z5 zC6cvc$vMxjzn`BMs1RP8r#*!p%kauYJ&B$g#Wc(+l5zn`X9D3Nu-I`c#e8l6$H=Zj z-LpcuSj6QY?jfpM|H6iNgppBqbW8Aj%I%59AxJ>h zpd99?jLc{*7;cJQ{(prd;>#=jl-ai^mxGE~V}{JIcJrV-%6tk@ZA_2uB;INOIyTUt z+Us?@0R#~2nk>RD+)6J{9vX|>G=Z*d_rHkYwjSzTo9ldF#rOTO^%1x(UH_K zP4P@j<&0BjdmS}P{z`o}O|EJf-jBe3)zisx#>~Alr(wvH8PW25NUSG*wxm4@H!q@0 z`ZHftla!7TpPUu-c|)&Pt42hCg(|#9kVKwkhU2K9fGYQhz;*&%TTMV)kLqsZ2W#Sl z=n+B6ziiE@0YQ5La@-o^%{lIxtwA$)VP`24ncwSInzAJ&n7-9!P&ST%Ivd49hchKS z8=fh~{{|euCzC%yn_9rQyy{dU|I(3h?>lKnsfEI>0sVR&wCvXu;jh~<31YmcDOZLa z)x?1QZ0ih%D~o^t7!?0ovjtsoaM%^=eV+K{@klV7_ID1dyw4p#ATgJ_P>$nW%2xVY zbC@Nq%teaS%GJ@R_)9O1#~t<}or_@XZ^9CGBdVSb_<4I{oigJC53kgFo}i$?Ra^SG zX-NAo3<NP?}>6s{n0aU?qdsGx9}YZy2XFGC4CuyZGwX6$jtN7Qc3rL_Ja?>iRlZYP1ne1@)MYYiLJPso@V}5v}2w%1gDO{wF6?S~{*SWy^&GvdL4b0$zT)!`A#s`#4Ugr*{cpDL{ z_<|bp!Gj4@fQ5qIFJ2->=k8{t0CTe7n-N2L#Pt)Z#A zZGN!7h$_Ltb$L~-{U`D}^f07_>wj_YIKG)W54f4hFVq@lqj}^!`}B3?H($n`iMLcr zojWzLH^%Pzxs%cx;v)@^Xx}*A_HGvN>tT>tIO3GQzJJL$@cUqDN%v$%+UxDYUs8_Y zl8Zm!)YrL=BlQOu{x%jSiUycp=XG3V<1sIf#fpkJ$ z@v!`kk|)#EJZSv$37tO+YvzA|8iM9e@dSSjKo$8|g07=@3fzjT_Mo{*hK+O+BZlO_ zj2OBM=}77>bjal-cSvYx{4l>O&NU>0?M=WP@2m=mXTwJ}i90()MvGL3@xIMQT(cq% z0u<5kyQ1t&xtK==oetRpqxUx_R z#$jh>X6gxy8E_2i_U*`C!houCp^^P>`%FCFxACQjf;)KK1Efbv;agC#X4uR@1V0xe z)zbfr$Bh4)$4OwLXGeNHRBbKSE74mSVO|)^U7AJ!GvxizCSZVGQ z=rhOZb2F=eUv%1oou}r?jt_ob|57{sG5%kc@?Y#FYoizGAc9TzZO&Q#kSc4g05Zq( zc%02uF6N^+dV6MFJn@sEJxR|1qs^<|hlqNZ zF=vQD`O@D4-@3`^>T6*n*huiKdA~{0MhLcQ?|*O$}XeJbKtLEdRkEqGO5aVM;e%%HQ8_EJ8mbohhuV z#n7-QM34jsKi$np_r2&PQ+Qek1izq;u~q3WMKb@KdCgb8w3hZ|1~#zVqf`XxB* zmEhf<|MYNHj3LC&m~n>@7_{lV@I)k}i!~vlp}MjYZD8SP zNDRM~_w7aZjRx=l((p>33pOj$aY-Z?l{lxYr38sl>NjXV!&Mom8c&3?`A=?bFq3fY z!SkEg|8NV8W~u7j1WN3nFk^u`8`itD4`^D=P(nOnF&BX2PicAVPCGre&(QR_8_L51 zd}RFiv(_{pjNz%Hha>HUU#ONA6t*AqePX_|%|}A+(DwbQ*od zOR5yyJ-Se32j9D!i8`C!3q<)Qu_Elb|L?r9(IG4Ga|xqB-yY=sP%32a^9gWfb~w;w z7FdDyXdm94`7A$^oy2L7dK~*$cijDNC|5o)HaKpmycy*9W$ z`Xj||=Y6>vKpS4b-qv-#4PsHOKN|qdmwP-Qr@~DlA^$q>D(hY0>&~Qx_=27G7CYow z2f@|!V22OJmkNM@Y%-jcMJ%wJ=b$2|oZF}@Ex5_3+>;yl>A0F0e9v66P8}5MY;a0j zB>cg*eFFhov44=g{10Jxjish8KeX!B0m0U?^S8*AS2}QjlB(K%-laAW(n!rLW<&%C zT!8W;2R(P?@~Tjyn=7*a!x`4wh|ETW3|+o(SXbP^Lcf6enpD2S$|1;i-A*c~Q{cLP zH+DF6z?8Nr%LrcJ4^d5%zX3BNfGsJ2h(bPX@vsN0#YmPlHB6YaY0g=h!=Cn^`7lOq zKNdn(7Nws3*p6>b&~LL{Zm-i{H;kNE{y;m!SmL(J^tU`e4(C)j`24e|Jw*ngsho@r*WVOavdtI-?1q z;kYacGYw{T)Z5-zYzSXNVU6o!6+;B;?VlBg@e(7MnbK!hi(TJ7Gr~-(1-K-p(r)zp zGf4*8P>c!+5pyfDC132T)kSCQ^)^_k&}MF@Z102RertlowQSy%ihq9ry8NJll+K$_ zOyH%s+GAFwzZ}GB=E$J!CBucqY}e;u|JS!jvT2+Ba#H&y{O4&VQS|44QWUoJTGw2Y zye*=Rkhc%>$*$Rv7OAG!HxW+gc<9LnG=7$rSQ9`Q{g`f%0klgSWRN;>nz&UIyzreW zd_{t0dL*q_zc(zXX{kB0QH0?26F2Q(YQ#jM1P33iUIRd1x1BJ|C7`kUJdqltxH9br z1^sApe6=ZGUkopQE=qoYri76(M9mT7O)|DH6E22kL$JJM@O&^@fxvt*-+uRuO4q z_f6Sj@AvJx0<*#$@ROe59-Xq$Zi|Nl5Myr{8L@`o09Z4j{+mDWHn3ydcLQBaXT7*ILOb$QE-Q&OK{913#ZX zG?*qII$2(%@QKX)?+&ebWjULK_mE@-h!B8#HDpy{5D&ZFITidMPF_^cRJK=BrB5uM zRF}Eo$65hg0!4;;i6x zTWG&vhf#&Kz7@C~17f(vaGR9BgDek<8YU!4HjMlBq_(E5EPM0Je!fBV2AFsE-oO73 zGZ1`c-B<1r0;4i=`r;Gx;vY&e%k@!yRODv0l$%6>^CY>O)7oBK_t&}y(g)2*pKkeX zR*|tWYIm_~e_}Bj?T`ouf765Jw#)jP^1H@HxTFnEm@3F33szc+`vpKbUdv6$@<|9p znTLW6K+jDLtXzMi>tuAv9~jFvyr9iS^blBShe&OP!}Xqt1^ZIp+5+vikpwj@2t_MId{=g+uf;KX3qLBT)lXbK-MGBpLXF=R3k)qv zJpQH^1>pi3om2n9KEi*drO?+&u*iYEx%Hpn=B|F%d0473Xi(yxxSkCF+J%%d{sA@j zx-#ch{JDUaVu>D%peJm(-xjop!^k?C0-4*GC=Bv3e<-a6&bXptL{porJl&WA{6kC4 zh~wd~Oq1dlk``5Y>bQsfP`o{sb;Wu@Ps#lAG*Bkgow>kiOQgow76y;mZC!hwR`F?M z{!d7#VYteEgxtN_*;H6#vJ@;6opkdEXRcYqo_nz5cEfFWO^4N#M~Xm`GI1@>1>4r! zYTe5l!iPey%=XNk2x&L28=~d;g~>2S!}}G3WR~@w*R3$n4x*~Vm)3DT4n^@1rGpA? zAq8zCf%ll{nb+tyR?w}(Ylr6l%u--Jnd;$bSCSCM96t|VWhvnG4b^BZ7YeT?i(yDI z3OPRIql%w!2?H$54z46!Ef~f`l$3)~9FAcTpT=uaS^z@)r;k>5ZR{OuPqIrS2 zfsh(N*9+({XbYNIk1~!AMeiRWLeHr4{@XRcQk`X%m!lb#2qP)VmGYiTOwu;5lq38w zN1SSCJST9&t1j_pdWCr;u>Ti}GoW0An2E~eSZl;${S>uYM=&zC7($Q8iDJfvm66Mt z-1axTq|oBUb8^h5s9)=#yCb8(V1bQpd{&OkFgw_!1=fivyb0`2^XAYeBT=~oy*?5Z z3>XHv=RFu#pHn?>QkWG=e{5L2NBjOdqUEVL>(t_sr+Gc1r4cs&*4n$OoayVj2V2sD zcK;xGv#nF+5+>2k-46e^1#fOX(DFxe(g8gbxQX;8X-nSl18fTc z^TKe~3<#+}9#4x_gC+cSkS`{H02X_1`{jmnv?a0Xsk0Dpfgn1k`*3FN8kQ1a?o2we zU6!wQCTaTbG*u6}zr*kM=Zl3g(_`P0* zJY-UXphtxLnUWieT?qAg$yMq@O~d_rT19^wE%kNJv->>BBQiVfzP{`FSo5*VVSc`O z@=?(r)YY{X$~k6s96TU5F}Cl1WQ8TOS^6h7RzJkri6`W7ma4TzQ&oDxSg73)+4s}; z5rSr4wIC)v3fW6%JK-)2Cj|oDoTc1io#jTd54}NBy@gb~Td0#)!rC5|)xLRV6+oa1 zytllkCgw-bP8blKvI^cFfkx^n;_jd)EU(3$wWof0$((dz`|=~Z{+%d+1=jX&E&XHe zA=_h8l~NM{=+6#Uuan$+r`RCBtBdm|zkgW~^b+)A13<~J>x$^Am!m$$g`xMJEI>8{ zfVNR14aU>S!c|5jZu{GxC6;!xPsp6S-iVtt6UQ+#(|>G8iV+cd&S(kW+U3=x$GTD1 ze6cjRLCNmMsEzgX!$)UPla*!YW_eL4_DK7kO%)nT9i7e=6Lk0bPzG&HJs3YM&Fj83 z0R3V?LAA>!FfB#FC*$xY#_>9SZo{+K)dFsp+vvQV8n`2UhJ}ncE`e`)5IpN{?bxec zgfMrUE}ml{5(E9{9n3KDXqzC|B;0z({yQZ)sr?QwVHbYhNe71vFx*BWDL@JcS^_k| zS?^<@eOiRZzrJ_|N+in>1j1sKGquGsocimOoOW`gMke+PYA@?4CBDw0KDO9Vnc z*wlfEjMWrZfY8E?-30_bD<<@-gQLP99lT@0eiX1|Oy~xxfWTuPy&ZG^ zi1H8LGpBE@PdiR>)N^yP2(qV+iV*P;Bs(}*(~u0Px71%Q$#TY1dx-^j_5II2VCcFXDYigb8m#TI<(FKa^E3HEukYNs~|t#+MI(o7hcN8sydk2xenHj zPEa(3Jj;ZO9|?u(?72#OqOWG{*mnDTqw(Ig%V`z;ks@`t@%e~ee&FlJ0>k?q^A(5y z3+DjnUdZhOERcKF?9VFU357$7gz?xlayW-$4)lIgd$TOb`#O)YRW_{MeX${I%Yk-% zmu;=7%d(1<08p*_WH@_ez1}8`|0p^OpsKbo3WJn%!=F&IwbiDm$V3+|0hRZqo{IS-zLaHpqR!c`pBIc%`dbIruMc=aUVsI5u)ascP zE5D~8R+eV=7P*Ra-W~^<7v7a@5q?Cs0sUlv&DN?p!O-!+h&h5_%802#V+5scJXEWN zQ`{k$N0~(x(gv2;z~S(x{HI!)+rok2d%Zb^dWcIDmswk@dVr8&J;I?SoU0DCq~0A* zNZP6KV3tM9#e9K)rzCka64|?$+)ygvE`5pbL($(E_>r{RIYhHE(Xq+XuyWXs&%1Xx z6e7Guc)FA?e<*w&E&fTpKZOlXPYD|k_%)_%plyN4C}a;faT&uZSDs47bt6MYXwi_) zlXz!=z0w8=AO~=+^be^pZJ|Hx{U5E*FVZ!liViqLsNzPZUkS#%DeEr@1cV{EQBfa_ zw9kKcHd|8Z2%B_2y|J3me~(k-MnT=|%6p>A=PBVo9)aOeh=`u7^Wmf}wQgBfGpTDZ zC$DC~U z2ziKjz*VX=%gW*T>??!fm_$T9VsbPc(a43oqL7xzhfHJ+Es`!_M?~s|*KHyZojkZL zQ$1fSIUYabiE7Z9iGHE>EtMW9#E5o)m+;3dLQf84cl*=Z>N@*+?H>g^QsbDJ?kc=_ z<7Isw+;ig*rW`ZV&P(=BaU7cCMR>FbwHH6Mgol{f8D()LKR_!_?{N=|udtq=|`%+Ku+#FlRyR z#obZIv(m`55ZX2q(y4>1KWTn z2+eeD-oJhl<23Ryi!uLUrkoV|ch@zyk8m$HZ3%vq7}CE`jk#A?P8Ag@)#r~Nv;r^$ zXoyA*4O>&((=_O`Nrpw9NWEVDZd#-k5~T9TQA^J|OYZ39ugb14fpQMyD~RhOmKk;i z5R)eDdHd&XKt*2V{w|R9ke}yHEtSBxJNPkHVvv*C>`rD>MorYnEX8Wy*)d_ zmo4_+e&=*)C!1t#Z?OBD>C|>B+Jz^^Yzhl${XzwcB(QV$_Kfouo9%s@h&JI2%Y^Xy zz6c=v{Tt%;ObjH)9H&}g1Yw~LcjuS4?Y9h2XucsDDhTT`8qNN`%XA*wq#lhL*ki6y z8fVDE!_}+;pdIhBwZF~Hh+CSM9;W}#hXj2f>_2Oyat^=;H3+c%@y;#io!4u6QS2jJ zw|v@OqY52{NZ65H&ttaN-&IaTOVZ1MUy!PcVGtWp`vW4dlm14$sQIXL0&e=yWoH3+ zG1SXv^+%&SiZkCAvxSxo^y>;QvX=#t{G2~_pCqBLy_QGd_dcV9rvLE&Y1h5t_DQG} z+2MjrkrXKlN4#VhCxfCbASpZQ%aVUma+q5iGOHNI=_r2eXYKZHpHsZ{c)hAVh^&fW zZa!{K%<^C58ch$Qa1?#;U-bngBhFJuHZFMIuwIRr6ZYrF>26sFuX(~6@0xKZTVWWu zn|$zAJ2+s3jO^4sr1=#mHS&n3Cc{V<{(p@4jr>|+?Nzvc7pSKe>De}U-6D%1OiQr{%|%hR+G;-B zi}tU9?%}?7CFQ1~)7zbOm;UtIxUQN}y7SZ=Tjzq;E8y8+5aly1pv@mkc{7>`n4jL? zAa5x|SoPnr^i8Hvch(f-(?$=^%1rpkQ|W%8fF3ZX91&uZK?huHaB!`p1TD$Hqp z2SPs2$-f&`#8qSIo9y-ZB{HjB$oXX4qOPF>it+LA zb8xq)d)8C#0IY5OF+HVNy2an@=B@MUyd9~0Ng%(#>hL9+8T(XZHp?OELB%~y&z)&l z^f17^!eG*@Wj{c{&Gunh)TnxU|3;6%uK?gX8g8(jHkb{oMa{V0?5=v+BJLLL#Oa%+ znVSTc6uD+JxW%{L5FbU57YHwpR}_sU&?FjJQb1jFPK0GGJ|V1WKcXRo(YigBQO|>c zLuNU8M|ZJ8@@L7dnfQ+WnDH0U^rP%O$5SF#-nKD{6R&{9cFaN55Sd9Or?PavUpSkS zTr)wzYN}!K@>tiZ>ZOpu?^O9R)%o}oScq~N6qWVwTK&8UY!x+kbt;f%I$PZk?vIDK z1`dVpufp8gV=9b9Tch`5^!hwpkN^$}P!^T1{6tVUUbjDd`L?C6SdQawdE}cxSiep# z5PZ2zQ2UGDp@AHW;3zT-JV|<5?9u#ZW@{_@-j^lgnhY$g)T0H>Slc^A zSij^6?4qx0FftmsJg;!J`o3VmQiKp|HBGbo>(9HK`-hbtI0s9p6%-hl|IW)v@lqJM z^Eg2e!4q$FPSX4P*U&;JJ6+9bVBj=Dia}0(H!JR3AZt@XkDnh2$$~64C!)iyUH+8* zRANLvnGhnh*h&m?IR{f*=5W+hg`rC=l!x!lgFo$4P~tu}KA$GKmFgP%WwxOasUX&c zKAsz1HgS*U5RhjsA)Qd(r4qc$7Q;5u=Ip;h#)@7Cn$Ul@GLZ-~h6VzcXFmUMC&g(L zOD9BGthd|fjoUk-OpbIaWV6L!NtM5rRdG>h(Cg-K{#f>Qh6C`v2SU5>(W*RnpG|k3 zxgIO5`lQSL4?NkyoVjQ_p7}?Lz=&zcc@HbcZwO4qf_)av- zM&8&^e9oRPteH7S?n)<)EYT5U;f8%hF~iP*9a?dNqKOW8G?p0$)k6wAjf+P(9K4^C z?;%zA4{3SY2QF1;QG0CCX9qus=f14+6WiEn| zc5YdIJnqzVyh?edxrN+5P}6!T4|>+oU;?<#K2&lAq$NYi&a?z7PyFrS-6l9|kDdRA z$XEdT=N=B|oB)QkzZMy!e!W9rDN|kz^vcBm(x5<)1ox~C<}p2>*%1}?IToJgy^2(e z%o7=v=C<#+vcUMW>-3o8-TqyH4S;sPxko*-#RO_~U%52Vn3*ePnN6*2edHV3{ZC2Bbp#ig|d%oR`gJt>FKpvHI6F^-!VHYgp=0;LUw0`lI-@U(We*xe=NI1eD^?I z(ElR$FFyM*h(60b;MDKs!TZEY4^Drj*`>CwPDM{|qM_r-#`m^|;^JSW-;-qJQy;r; zR}ZH6C00+E z$u1R4n!UC_(7L>TrQ%C~*2~vHO?fq{mQZ9sAw(ThNHa{65f_w{=v&M$!x2elDHLJcA@yP+| z1o2+t8Jx|a@9B8#YsyyiXc$Iz3n9<*pRNk5YtMzC5nh0L(F^7ZHjaY2Yj64w@4(g; zKx)7=-e9%mmDwKl^2i(~*UZO_5_kK|MgiAl=H1-;kdKQtD&y3Y00K4jYrya92gq~k z*5-}bZ^$k*w!{wXY14-ks4Kzi476zj7=8#a+-IQ9aiBWFKTf-Fs?74#CeV!jz5KYr z0BBDvw%UZC9hm2>ghG@g9ocnc6%?>5!(?aWlDX(r$0uxf|Bmg&aFZuVRh02?#&u&MeP`KnndK3{OKRsjrdW@%OKs+M$o1D?y+cEgaO%b)1H$X3x z-@gI_+S(s@F^ABBmKA3Cx!+t|wNxGr{r1$6i~aec6&^lI!LJ*fG?R_LeEOd!OuWyTfVu<@ zJ?i*M?pWxNFsR1|jG3qp;hTJ&kWkH@In#=amMFgmo=Ba%Imvuw+BaarRr&~vvnlPk zUxRb!vU5|IVI>G!EN2ypXFLB4H zh$gT30itLxnCOn%bHOQSMEBx+F%im-d-p`-H_(ystdN(*g6PwnEuQtn%C+UlfsWcD zE^jM=eL}57bN9*P_omzY%oPUibP*Tigj&CslhTKnUKoP|ukG^TB4Gq`+$XR@=ho=c z6Xz-0oTSei8M*9FVVq7>8EN~g9tQSlb)Aq*H7GT0 z5m$#4+{r{8PlN0f8kSw~j7}uZ&xlYqZC7Hd?7#mOj?O@s!;fiGO%`MMhAu7TSZ|u^ zTpN#@>xbpyWbON>SQ+oflFRuu*}#1__+=lEVfekcfc<}zw;{t*lom#-GekEn#w{0v zRW5Sq?}Fx^_pgtBDTk+eM$&qXI88q<9IZ2MHb0aOE9`LN7Eh8O*W@425qh=U?Y8!1 z>|4{X@_6WLBS^X?6pd83pOGNOd{$hah@mjHb!GG8bRuWhZjmtXrmAst^zgjldp5n6 zzzatjW*Ss@uP>pANZ%qPFt;|cM@=bKXF$NqXz?{k+SHTyS-^sZs4%#@GYr5NOu{Hs zRoFD5G|EP`SaS0AkY}d23Xuz~x&=Oj6T(ngMwBsdet0GCiB#Z`m=ttKAroHElgJgTa7+<{nLHN#ep2yJDU?r#PbtJ@}F8V-L5 zQfJBsRO8`G4oL8dEIq^B_4@)4fjtrts6h%Oc1`=YcYMqjQsZ7_-~k=J#P;k4WRf^~ zxOHloauh#GcsEf?ox_6(*dRFsBuw5RQ+uk7n`P*wSj)>v{630?mHAGI{Jkmle?#f# zH1=zZmS}x|AkmaY?r$ZI49AI$>}ZDr8s#~TZQm-zW5U(GW~T~{S&^)Z+@UPE^NUB`*(}h z^0bIcsPD3e>ZEMIBtL`IhSOYu$Kq6AyLI$(rMMT|Q3R#}^>!v=%cU4bDTmXM;Ps^e|_ye}UO(AxfWLFmO@$2Xl?p9%w#u7}hAczJs+TMH5 zFr9z2(+X7aJ|_~91yZdftodksrxIkV2&n^g)vsy?_&V+1L+%;Fz&6ahicUhg;e%eW zc1)LnwBgVG^P7A{Jwt0jYxjKA+(=T1{hbi78|MS+y0T->xu zDW+2FoENtD&M#Tk{41wbaLf@QnIkItg*>{aut{{4tyXoh$%xmg?jGjSsNP=j`Olt@ z-UMRo>4SpkFKSWdNc%&?t`QM-dEW>yWxgS%y+RTbz4BLqko!lQ1n{#3-59~?4e zrYNBxXDoT|jRCpI_aFxkXfV15l(V3AO3(!P?UN%74l_Rt4!kIrq5712A55a=zqAWY zb|qu9b-EFXjAtCbJYJra+xbL*g6F99YFc60ZOtb?=HbcL(W%fuM@_Bwr~0q?DkG$| z$6bEe?EHkyJ@FU8wTIOk1{Rj>V(}+Nr@e8qr@QNurJ=F09j&$d*?ps}ff%!uW=^Xg zFY$-}YgejllW$WHJq_5dL7c28(}8#YsO9?v?d^JghSapd?s zHX!OmWON7*3f|fR_*CQn@gx*pm$sv6Ojj3%8s@S#wXKSybrC^7eYRONJpp|G7hrR8 zrYL^syuW$^XY0DarrzW%YeYNX+2+w4^Sc_A>xBZU4d7f$&hP-Gs3Dgy9v%!GPG8E$ z?_U4tJay@Q{`yitfb8%;$JpDP6-xHKFfMdIxVy2zUkvMaafQPlm_Ht;Z)Rt1)@{Xu z-0EPRBvMl{$UELd#umVXoeUss`Q3W`69Ig!h(*Y+y)BW;B$|w1Dh4Zfx8HEw9f;~0 zkwO6ylEW}Ar6}?koYg6jnj8Die8R-IpwFNDo2OVW@9YSB#)j}-)`aNo0XISSWB-_h_aFtz35xOiZ2$NPyUr0DWcXF z21u3?64rfnTJzGO|3e_EyrZpQvOG}Rekw|!YYKDZv3=HH+%^Ss6vOdy?6*)?`?udN z7cs6Jg2C#+u;6*5f%D54;oT<_#_^Mz&n(_BbBRuVznr5az4SKj&ctfNaf*tScDZZB zL%ix>UH%o3ZZ%T18a1S5xm^#t)L0N@G(}c9wnw5zQ}2QfRhyk%hJBF0RZarX5hL-# zuox73T=KV#KWr@T?0pqFJrWqvso-lL*-3KKXgVWt&r(`8HVI30eCw*B;8BrfFdr&q8u zJeix1cmDnwHCAF1y%%0pCvSZHP;_keLK{@8-oFE79rIxSg6qfety-qo(eYnRa4B4; zy5GT}FBc-rxL(WYlXu%KeQInYnC@mI)`)1dBckS0^IK}54}xH3d0wRc+sRXyUH6U? zMlbW3UvWHTh{UBMhpH}({lkOPCvPJ7Q31sjD(*Kqc%6k=s@{&9U*;FjnEQ)AYyz*d zIf?CdjOmN0o%RE*@|PFbm0S#v2z3)XXE$OG*K>`IOZe8;-(~qV-MlM<1tE!rlgqG0(cx0(Y*B)jN8EJsOjfES zG9Zq^`x<>+r}4Y4YH(5_ozwKm)N!fYILKe#WuD)8Z(XTWpkKk+S2RSNDDmG-#i`fA%ib=AwLLzy_VuRIy&EvF zQDL-OZj>=&82mG8{lT>k;B>PQn(n*});@T|WU)b6nfEHD&%Jln*`7yg1v3tyz3SmZ z2O2a5#TTEeUF9tH7^xnvcMkqF)|1@{YIUeq&%jl2JCn{ zZi-cM-klFP9|h``-YWEJi^+ZsfRl_HCOFIe9sm|};d+x}LS@C|UC&d$001nP&=}SJ z_1BvfYMAsQgK-^JnLW5R2>)KiG}XPY#Zb){{MP= z1Z2kzDoXmvNU`h9IndhRHj_Q7Fxos@wJZPsLWb;BNJqD3BlaiUs+XNR;Yy-T7VT)K zkF_xm>Eeuvo%DQpv~>C}>n3Fr;%M>)elH)Ie!0x)RA0lXNiw@m!1ON@*V5KZMqEx- zb5Ej?+0g_MN7AACf9tI>#hrir8lWKN!VVpZm}UXe zXm@>lO>felg(~xY@*6s3xO4?a8vuOlLq|goL#&xW@o>`i_19iRo3u2tr8&ISUlF#} zhhm;I9S$CXJGa`pun;=0D_OiG3zM{^uYY|xYI3F@vjLurja4Ua=w|AvYhlB0ng8rf9RnE*^`2*+fL0DDccV|jbGRX zHQQ=oM7fpH#FS3lZC1=zd;lRM1u)|8LwkzgYmKSN)H9a*hs77MrMhK92qP5s(Qi;oHOqg zFyi+#6V%dbSMBBGNvzfpaClHg(9@2zj~Q;ous-hz*`KYv4&FllBp-*|L5d)ffa;pB zFueD8^`a2;hy8)bmtFos(s#1+;QIBSloH$5C-xu7h=<4f1-)U83>LHsk8Mq$U$Wkk zb@*E)Zh390w8mm-rc$^CxXQ+3yv-Iw=H@-=*}Hq`JdA0)UTa&KZmR}6!-*Z&9)xV#>yx>X2?@(Xq-$+n{9XD#)PH@BlD}$yI`JRQktoms9yxg*gXZZ^FIAn=?(}^8jps z_U2?#sL}(Uin?)FT@JQ9>elXnf4Fn&^>@>UxJVisr>%v6qDOr#($Z2^$1Wl2&i?h@ zPC1n@BRjT+zA^=qCF;Y`ya!0E0Z?2PpjPiq-cH&m|5RP_MV>$!TMLaKQL1ip8F{Rv zgw?S!_6-fKzGxLTAd8;LT+YXTmkF{IGa&W9b@+#FxJs{P;`Hwo(D2q`P7cFzdMSTM z2)#(c(0KpAT8msbuQLZ(zTihYexkoZ=LWJ9)bb)6pF6ZNc2TAX7$56b>NYxH2G4#F zT+Ej1j4mop!YdHaZr=R(G8yVDBkUOjeI6959okv1>7}rQCSa1~-A!u37NJQh%7Ars zjg5$i$PVXycG334zF))3OXdrs6oIK|{X4#Kmne{j(6?PA*$5b?-WkqRNU|J+6H@31 z(nWbkj*4OD0EvO;O8V9lg$Yjvh#M9}rCPB=UjF*rx@C8z=>+n%yF16*vSm>|zt5*v ze&;4GV}d*dc2#cccub@+(qvsL32|1`tVEz$D+5SimTc54oR1D;uOidruWF5f?Gf~p zk-%tkQl7 zN%7HQUKb&&BN=MZhZJ!?0@LIE_jtjJPGG4=1-AaJave6T9>S%mP&#FCCulF{5<$F1z={12PMm`q=dYdZGsfPC-n24VQ zzHd;|mWGaAF~#9H4h^PCxqWyKb2IWU4oVcJU!fOtIcp0jxW<=l&PlyhW<~NsU(70R zo%$dFng-FMWEA(Cc;n1KO7)3jj-@k$TN-AR`<3^N^4LaQznN_Ivz^&hL7lGqrh52AYA8vb;~2J>(l}nxmN_ciLxjKz)mz=vr?=s{r35DD0pNY zg|#@WdS~x9_=P>?e+hlQyLo8XzRj-?qx9|B-%JJW2j*IkI7;fh;YUPI_!TJ;6Va^IYEy%`W%gha}CJTIC&yN*+3m8J9+ z{BeH1xCP*Y*74wWTTf~Ou^KaBz4?xKKZ^=UJwB}h(>6}!YI~`#$yGd(64)R06)QSL z9kA7x{N0|@;B&lBX%kG|NsvNGP9 zT0Lq4v+NU&0;wN&rba~O7DF^^VAcr9-%;p=J{+6MiF;YY`TaeU>?d1(Z*nbOb2oTd zlJ)MjEXQ#8WB@hi3ToAyp2X1@u5N5L&aB z@>>TuDJ||ed2vCl!a!V4=D&&JVvz$X?Ru9VGG|na#FPspY#m1VF<5< z;v9snP56rt9Q>szWI)5ku!-Pws8_NqdZ!u~b810sC2ENMx|qQ+9PM!21Mf>pB&prh z>T$f5_3EKwz;$kZ-v9=a+FSC-V>dY;jdx3># zwu8K`?WDb)x3BL@zem z6W9|QhI=QYAN?aT`NQ0MwCEmX|D@Zs53N0)tX&Kz>G`eYEqI#vo;jyhM>(yZ0&br zcGC-jts&>^o<5@~_XsT1!f+28F1=aqDyHv7@G2wHrXYm~`@4K)yqD*8wd-wds*zRM zKBzB-WJR2MpT5}EuCJLVp@04k2|TK>eYdx^{4JH*KhduS-)WkmRY%rgb@iLintVpF zUQF@n-yH9#I&-0M)yjw}KH&TF+wcwTwa;>=tcsnq$!ru~2zt7e>{j%=_)D2i+EI#s zSb@nq1uyuUuWyX7IJ$4i3D0TDS1M znq|k)Ft#<_Jbju;Hm-sHidl&-_?NZNDEjuC2Z)9FK6uv=C=WomaS{po-zUu~9#4}u zkHX}JS#c0-8zCszw?C0G@uNCjd~Gd%2ob5|!kfMCYXmt8uLyR-JwOORhMx!QLl>|6 z>1kJnDmCJtVm8Bay`YAhMw*|a*#S?3LXV3_)l)1(A#sneA1R69mJF>e3;nYg4a`rl zERrhweskgB>GRkUvk}sUn0QCoS`-W9wA|8`Q?p?pk7W2}%7U>3s(a?Md~<_!d!^HuUccF^bk2#l z+kFtn!FyZtk9YO_vJuRieljGTr)7TYxa8nFl03QcCtEwDVRBN&qRN~VFUNR!p~ zrp>Gp;+kO&>lZ?XpBC`hK#)-{>$=QSORS_7WW?;@AX2T1T|s&w$C6vk)9@QC{B^3j z^gC*`JzWy&rZqsDz;)(>RH!%{u@|4n8Q%V$xdr1{^eEXkJ!MH+b%Zg%l}Uq$TIH}O z>U2g`fddWKX9oA$`qOKtKJ5&!_t30)yZbjwED~9L9~`I>H(+!vskCy@8Wb2W9PCjO?+LpxP3fv{4#97N_gTjMA$Fv zrEcGXX<9bkxbV#N1XZmdW&?MteN@%#IjleH7mP7{4Wm4pkxgG zpEWI7*!)B#xQR=wX8MdIeJc5o(@YU-;U;xtQ^Sc>%$5ar&&1!E0ag{f3QbqEB3lr>>m`d@J20v#F-K}^Db!$YeMK-7OocBs1&E<4k2V4GPB9y zz<>N#hLB-vW#DNGE0>hWAtSyp+ns&9)~7e2+j)9Sq#xjGdo1<5HwEV`MCIUF3dPaO zY9pT(St(uo2?(AsXD8kOFSHP_(Li*50Q9}Z3DF5T(K@ctyDuHxIcrcUbf~CpFSG+ z8Rp-nlZ(gHS(1-WtOlh7y4*M}C$Ca;uU}wf;(T`2B3zxS@$Zi0e~gsNKd-0gO%Yf3 zA9`15w^9YMn=^<^;{;EegVG(tYr8>w=ut)ivB<%=n+`YL=KdKs&b5 z)=RX{u4f$6{+HGjxQd!Q=~_Qp3<3dp^aKf4{<6yTc}Y2*o(Qm9@RqAogzzaPkl1x1 zSZADyg*=rCPq{>ufYF#zdB(QF$Aq5t2a1iGdY8+V8tG^f9(+pFfTYbDUW0l)mw9ax zYHDK+zJa`^xxJ+jue;*{j-pT2Bq7068rTZ zuI_|dO9G$f$rvVNi;F`OT&1vQA1!{QhC`3vrJ^L_b*JzUzdU}_dz%=?gO_l~j=mb^ z#33BKyb1Fi*_Sl%XUBSOWUfzN?*PR&`-_i%208Ga2!0eH*eHp`6V5Y8PW>&iXg%cg z{jMbYYvL~75kt_e*I+mRX3k1SD9vY_%$1Scg3HJPrsvP7F8+Ea66bw+U|wcqd{&~D$hwcrbdTz8iqucp;-_k+IW}W-3;tK8mbT0mMV^HX%C!O94A^d1&waB z`MywFP8Z1W@bg~|_&pAcW(dY7B;@Y3&?+RIo!I%MXJwJMKmV&V(jd55c2eFvzrJ?W z^*)z&J%*gU^|_jo_1Fxfzx`7zhTw0J_PCBDzCQ8tII+;`!R>Ve-C=*ZV82W6xFZ2e zJ6QvRjfs<|r;d^sBGrx@6TCg#+e9SJQ|<36s!>mq#OLZ~K5Cj=tBHu5YKltTD;|)C z*nd*=g`%IQFdM95!iV@@#_WV;vSV`bak z3_%rw#+;}xUStnb=$q6((jqxO;duOCC7`ojDC^<)ebZ`vr{*|~)e$Atq}v@M7c3bj z#kR5-#x#x_lc%KRki7_RF1WsHO52%3`FDkRePTYAN{?xHpv_yIVLx^A31*#KB+O-C zI+vwj7GodU2hj_2+YAty8$vbYvt>H=`m)(x2X|A)Dj@EG?sP{ws($$qzYh{Wp#QQ< z&w=9DyL~@Uxk)C@e(w#Ra)FWE#W0Fr1GsSdY6+X|O=S6=G%^Bk+-?5bP1)U}40)GP z9sNy?@GsWo)-;C|`6$)21U?@}B`n=bT@Nwu9VvOCbB&hu8`@gGj6TfuI8H~HQ z0^{Kl3uK+dtbHQWi^6OxJ;pxfna{2LAH+@XRurmqPkDpi))_DUz+IN;6s(?-5yYi* zM~=4mn^<+guskcKWzT%MOf(4Or~gO``nPTwc7^eE`VQeW;0*`&`*_hq$9ulIRd%lU ze)O*ip7{;ci>mV!dmf5tAmTi_9)~yo#m>Lpe#Qo!sWggY>VasmOz0#CU)fcx{y3en zPt1BnL;+R4s{BmDBLO$MJ*fNiz3!!^KXc1KY}(mxxb?U6N^s%M3Vswcj%A7*TYY8T%biAA$=|jQ zuu0lpgpYi)kShYMd=`nBd!)pS@gN=fJ-JBnN}krXYHp-7NphPO|Ge1gCH3GARlv~+ zvmRT~{}ar~6v2l&^4xEK3<%-iC8zu|_MX9S%pjK_8{So8#(o>i#s zGDRCz4%o~68N?|Io^i-p3~G2_kdaxmsXl&oY@i5WyCZcO?ecLFHm7isDC8g~wtZg` zYJ=QDHy$*de1zc6-r^%!;zbSF`Uyf?37Q^CxPYYitpbS37)XWJ-BMEX<=YJ?rHK=H zR{+3*(2;b9EMHu!DhNMFmb-1U$Qu-MHWUZ%02!> z7-YM__ZLjzoNzzs2{qpY!~DgOr#_IeJWvd_8%h zbIY$;#m^GEy+JYt*^)uwe!N$*NO4hki#!Dph;D5N``ay&Eu#6@h$dMueMA8IAm#@V zR&p^WVX~KP>DC!SPNtDbbS3va%PPO8_!L~3jmI;5Sf4yjxv1mg*s}zU_+GeQFEwFO zA@HRsHI}xhiJfx-;=cF^RA&n<4*aKNKTwyFT2Dc|Q&-FK8|!h<1l`NTPR#P=c|A-b zevKbkCldgCyzewyxxA}gs@-Q3it+uXevH9&zOlcJy&mi_Gfmf`_`Wj_%sKaK6X^vK zg}ps2G!2hKVL;i%<_es5W0hoEt@WvmMlyK-$4fHE@-%h^Q7W*P3GF~h2xK+)A!6yW-)aPVIolumTVdtWu zioN|8726xVg_yM2Q0$#TEP-0>)g8@JcveagbCFy%K2pU%in{R@37xMh^L2mW^q-d5 zASUL{2Ym`?yHPg>^bmHYcd-%A@5Lb_d2N7HFSwrNd?j2Evc(h(3-seTIZ&b11BKhU zw9a$;wN=WvLBiE{dKN#7JM7=9L2NQpYUp#r9jo}*`aJdjee?>_k}oXESzC=JJ21HZ z`G)ZT4(JP=gDucclRfSdMj}n%`adRr5d1S*)8x5ov@H(^h>(yKT z7*dTV0tEW4p|0~6)6AWQV4mTC1z?YlL@<#JDINU&g>P|F^} z&jJ{AO@9?#|7qfvGe%Hu(to&68J0M{@7S_O|iQpFc}VOE(_YUc~+{T);Tzy~y*`j52PRR0^*ZL6V7q20_QA za7RxxnXrHxblIlz-@H-G`Iwz=d_27}PMFl~xLf|EyBaj;)Q-I$#x9o#_VXUe^5d6wb4_XPb#KdpBe&Ge4wXW;@^=MuztGV&W@mG|8 z7oKw41)JM&)pdjP+{nPN!Y3c$RDzX>UloR-kRy3aCRhSo3Y;KwNZP(}&d-g1w>kK0 z_A*0%4C7EWLlMmoCG2lgrEXDA8JGr(Eh*KPc|>r`zDC69&kz7{;tKN}-W|6et`y3s zIG2F|({CG1W()#yquyE3S5=CKHJFG$Z*U8UyNAuk=p`a3GOBfUulQo+zafn3uC#eO zr#rCbg2&C6{D-$ACRI0RZ9!(Xx`S?>A5ll#K4xWawF@FD5jPG6)6HO{-@D4v{Cq~^ zsVrhdDzbe0MPcoW44EsDYPGq)DZT~@T2bw`GR|kW<2HNQx4%%0&t>;M4bhb$s7?h! zONZY_xusO*UR3uYbnp-m9gBsA@%f zk$ousmeZVcLu~{ppSV`La;n8wH+EUK8yXm*^1772*Q-=>M^OB*4{~D9xieoC%#fED zAU}A<4z?)qdYirOKDw$orgWM?`v>2XxLUtx4MQ}TbOw8hrGFYTz-q9gyv@;CoceOe z`E!I;ZGB&3*=()f=i27cXph76gOo{uK>_#w;GeVV`zCYHY`a-I< z=x}aVzgg#M$eJGf)Q7||jACqkHKK(iS5O@;!%=9@6mO|CEFAEIxPMTwN8AH@#{&*= zrk$Ov_nIwsF^}fnbIRF64_2%DRb01Y6s*;IOM3sADf!V8TE+yWle(1xIzp~$Ya*Xm zf}gUsISrKvBl6w#-SBW0=P}gT+xFy{EB{8*ueC_U?%;;Q_vo{@#m%Vx&E3Q$i+a>$D50U0?%DYQgq)E8!rY8c>=KnXQ zKp3qXeX}8nsc9)B+}D53`>Hy|B#qh!E38h>%k%yEcbmT~e7&2u2@485(sW~mp)JLK z-2KzBU4!czaU|-}^K2V4)3;Q|ZhyPW#uX?y%BDTsn?WSv1Z{El*gP+)B{x+3FpB-X ze^{{b6#BtGJ*6L1E>cZUnEZws+35>#+3SHE@DrHpHs&dy=(-Sh*Pyw0^1H9$uL8X2 z6hThgv~mu*7|OHTKnT$H9ueZ+o=m)^-k4-GxX@`1=X5QI^umLVoQ^DBtP@9a;^WM$ z&d}%BI6|yGpf9>qiF;x0J_5qoDb3lS=cqdtQm+p>g?1pZO2U~kk0W;<<|NNqOs3?H zi4ow8TFp(>xXVuDc~j`#`4>u?jE*y}|7%tlWn|dow1~{xl4&^N0C|=O2-9aA ziB!B;IlROhBk@IsOo6`zJCChnr1vkirvqR=S*PDa*);QfSjgdRHO@INtm2C{ZpEq$ zVCJ*=W~X@FaAxCDyUjCrk-H7Qb5t4RX&6;U^EGUo2n7tk?@QsA zexzz3>(vxPvKnFmQ1i4H&!VYLtXj7Oh#eLOy<6p@%+68{tIlE4uk4Fu}kwSbTWfJCXEKzN0 zT>J+Oc?jJ5dZpKh9Q5j#O|{|&UnNe`Y_y4<@Z6Rk@Ru9hHlELD)jol{AiTqbLT1d| z+%mDq&@XVv;rtrq*R;69yGI>ROS#M;%!}B+vf9FFZEy=;>7<8t3VSAb&rk}Nxu0tX z0aE*=!Yfj6?ZpEwu}(X^lBif;DP1rlqK|{aJD=o`y`JIlH-w8KbbA_+Bh@Kd)-^4Z z{c#s>3J(ZaeTXw-!v)*rMQVkbRdTUrs~4zV(zretyK5YP8;4+`<A3t z27Os@NW}Vt7=u)FLpx3dhKez^oUc@PhYV+jVVpiA{kAEAm>D1$TzCT#PQa)pk^bu9 zo1xN=Jk$Cs^pc}r3G~&Xq)jW{^$A3Dqr@YSywVoj+7P585=1olOV_58hB~0bM2|LV zRjwpP(TYV|+1uN^gR_+8?J2|~7)-Ztw+o}de3)}{+ykAL-`x}Dy!`HZ5dV1*!WiDp zO8&VD7KJKAyG%PU!OJ?*IT$7QyF1FmR7%-MECc+j{cDUe;Us-y6Rd{~=3C(D(9NkK zIsIqTXlF~oB>2Lvjms5rTik@Hnwb?-iuQBn@@{rHgeY6%%E|BK;=-}sc17OEXzTa7 znjg{kuG6R0({m)hGo-73Lqr?@@3ENm?oec-NjJ_mdPrCO{HeXJtMpezvTj#9mIw^I`FBbm=AjDx zHu+Fxfk*(XwS4w)U|jd=D1&H%;+iR{7K6-|Nr7^Sm1H|NWuUL#YbM5k9AxZbMc~SZJ!FbIW!%e z+Ud>mxU9FDN+yx&SK}t8i@_h-j?u%n^ow?8a^VS|vd}Nun{?YY`Gms1`Qjd7-CeAV zr6I!rF}t6STaC}8Oz%vgZYMq{rAqw86#u6!?o})`K#jlRlkvb_-9ZG4o3DDl@ILp` zKR%S$9`$-$@E)^^y@@1yi(qZQP(Wu;uH%1sMFL#Y2HU3L?^^c^L>mbbv!gf-@R|#C zvTE8;A9Cw9t?bu^mqfx_%aJ(f)Q$WAs1WS!Y`)S|{h4TuB946(MR8%W-!YryT4DvF z?8?v*4D?ykqb_UsIn9(3Fl_z$NDWjOf-|#Ow|EJ9Jlyy}$Z&P(nitwpZrv*^#zc<8 zhNS;EI_sz?{x*t(DBay9-Agx0ceiwkfV4CV5)w&eAnX|hy z^L+39-203rp&cZ>h6O1kW(2sc%L`Y4^p`H9vjQR90<$aBYHr5s;kPA1RO}@CB}$y* zb73_(;3MjB6{8+#qzYy+IaSA}B-&q*pUFy@8^_Z+Q@!Y%dCD-e*X@CiCfayMGHQtl;JNa z*E?~l(EiDgfLeRa?}Z!@K!M~kOYF#&ckO3Ix9u?12J`HMt*@ij1Bs1OMeEshtpPiZ zY$2vNVGUTQh1czkemKUhH+OEaIW8Vg?dt`tMZr1^F9Md|xs2J2m6hjoe}7Sl&j9^S zx~qd!v?MFIoo_Wc^YfxcJkE4VyBrh2^lPt4sr^M=T4Fa_mIJ1x&8Bt(2SIV~eLQuI z@IhHtnLGi<6CuKov8_^LiTS<&;0Lr}Bq!R!_p{O6pK8arjVUaPpvp|_2Ld!$ur1FT zR0zRxc^h?wmHG%m)NM+;$9g_Y+juTcS1fkE=-CH!hUMoj&S4Lv$=sB1e> zJ|n-i@j0EsJEmMzmdKgxQMIJs8JB$lFDTR5(QCwtdM!9{@i>sL3qkpOoL8#MnIcF; z&=dz#`&YHHa`oKQYFzRCymh)ch%n(7ZZ0QD$YlB9UR>${w?gvFTOoC(e@#`m_ zuB%!#o;)?nVC)@C7o5+CXBb9FAkYt*x!)fqN&Yf0<93!4tSPk-Tvu8WJ}x$SN1L&w zQ`yOUy1&^v6A1xTV)NKyKM-GM@@FT-1u>2G`PxSeh60D7W(M3|UvnW=X6slybhY_^ zQoU|NN-A3u=;$;lnO|*96(q>OT;5n1+L50bJr1uvKyNm_Ps4ro10S)FXK|#yx!u6P zkkv2{2nmIHkw=}^)m;*kNNZwqvhM8=)O41_W?OQy(q~oM)HEInYPeh>5z|faf3nPe zFi`uzsP}G(geULviy%i_S`gVB`+k~cWaHcWZ%ZB!UDW+VGTr-1Y`HIOpzOGwrt{PO zbYb|9?6$Jmzn))&bfYT)E2@nvnPWgZR~t99)6!T`xVbPoxkkgCOkWTY;DFuF!aZ>5 zemNO0|E&MkG5BtMG1zUutlVZhROFI+Z|O0`Qvg7#X><+$vk2W;{HsDH{CE%J=q%(gy&QO@D$cRZ~^A1LFqi&CQwuD{i zyi0iy3i^_zHq5gq5nY9yRAX<7yE{ZUJl5T*$u50r>_zx?pm){k z^%&90do>{B?RhGmV4V897bEKa(p_Pu_&jc^wT!BtVoZU`j(K=S@tcr{VD4{n87{{8 zT#>CBGf8YQfyIGvtj|A;T^43A&5gpwQni!MQvMd@b(3=!M#j5tF`5TS@tfiTnziX_ zjV@ustM^iV%&5|!k!l(|lL#K*jVx#kYyk&|SKH_ficWt}4e|XcYc2iDzO|G*aAvl! z+~}yovF)LTJZf}Z??U@Vmi<)s=91Sb7U+wLOvIX`7aW0=el8RR=F6eu>2kejW<;Wo zEks=HaeeN=3(v|4YivqJVIE?Z1Pm-+V&kl0V$G-Lb}sv)KVA-?7P8h1F*h6>-__Vj zIk%Xd{ie(;8X8o?jpnv#;^wfO&2-cC1BY(6l2saCBGNL`jn*=j)PA?NrwtAg@Z18n zfZ9MFU63GIiYNKh+&z*q+${>*2G}k)vj}j6so{4H(jXK(xd=N~%Ak6m1`m(b8p+@E zr-sEP+to>9*hBY#g({+|gHc-kso$gvzxi;@d}~?2U|||uBVQXhI$E}oHBCXcB@m?e zyg!`KQZKKduvlw}0szmZ|4OymZs)%AK-YZlR|j-DpR}NdSCO=n^2kbXHo*;jJv;ANPnkpv`s5ix$J9_LLHzI#03hTTvG1Tj2 zA#$d|i}rxlYj%(w`TFSH+tk`@*wW9u4|qP(w7+O~w@Z|Ov*J)r3njuaFeZ6NBYnbQ zPmB$BzxY$#v9^%ufx*N~b{s{Egg0p=UJgdI4yo0z&S3 z!}rG06=|P6da+;TqXutzQGzodnkSJ8w111&ahM6a40uso3<}zQkhyo0~GGXu+zOd|fE zwQE6uqYT1E-aFoLE(bHV)ZkL0NcS9V3vZ$l%==hE18FTHXiXik5i0CF>bdYC;W7E> z5^zqLW(hBMv zhz~;O07&I;x&RiBcdbVmq@-!=qmm~Slf8ioFDyr>HO%+i6ZU5&nBX`Qk6|FO>FSGo zqxT|s)V{bI~d8}Bel~!y! z5^5}s!>*~b~Xl2s>{amd^Yc1eTU^Ih*{)1=P{&RODB zA9t;TT&}9rx%NQfe_i#LCT2XYIh0u84g(^rps@45(arTf_v?uHpZ9ry_s?m`jfJ08 z7FzBnzJ4QzNx5>St99%@#|mrU%GnZ)bDzznL#p0B69|8u)W75s;k|tf^I*RGZbXXocb&S z&U}qrCQJo|{4o(+7ksjI6(Gw;sCyWZTc^2qC7C0OaO$`h_UPc);#9X3sTqB*Ff8U| z^qbgizE4=##9Wz(89Q`p7kdW=6LpJB7>_SMNg}`F2hNfpjwl7R#$}QK3xjB0A~>)( z?&s#;t-DG|^Zs-`qSYCCa@U+}Sxg7Uw;NiJXNN5j^q=&lM0lMKq-2}ps+N)u1z@0G zmf!{adx<1l&IBdRicb{V`sq#}PFoVQYry~`lupsXGWw5SXb}3+en7(NYF#uly{ur( z(!W$2`*OSK+h{mnP^qlkz*ARToggOm=hr<+(C!>@MC`>oo3W$gL=$yr$Tb|eURQv>2ZyNjN>ta<{4Vf6Km?c~3} z+c2S^4=L$1g)bx43Nx}Fq>-mXzBK}6-46T-@!B67IA%hLCgJV9YOdmYpfaUS!9@yj+z2vQEkrTzd z{^l0Zb?c~N@F_LqMCg|d)HD_Nq5zBeF0f20X<-T|iPY2ma(*h!$8B2m1=m>Oxf*If4=)_eqDqPXT~E_XmN`bMB zjU+-o5}!}Rq4Iwhh%zzAzK_Gm(p8E${m8C%5(~>g*)l=ZFn?NVVlFWMjH#B2t&-(W5zOlvLADfev z`UrNPO%#LHACUma+#gLbF~Z(Cnky9n#aZ73EBm4u1WOy# zc=0GXLynxoeBDJ}?vzKn4c;01;ojfcKe){YH&=hB0<@0d295z8)0aEzi(`jDs&;OQ z#MCI{1;V~Z@zeTX+T4V0htn=!UlPe&;2oxgjxXg&m_u0;SQKKAM-i5z9{*moN#W1H zFvsL-yT`8ylSB-Ob4Z{T@U%5UU47gBJ!Ka6v=9=M+8Wi*v9BU!S-9C=rvUT!5a(iT z-DP>^H%cL`aP1C4p=-W@N*uhypHLzqg(C_O?cNI=3uC(X>36ea-i+%JCMYL{J^@4E5j$E z`_jqeqZ|$b+f7%4?U)x5j{VsU<94=_cJqBuVYH0?Y=PR$?iE%k;e5?}62 z#hUPYxE+_rooeo0F>Zf6HEMP#TLSwq%?No*hCZ~lzm}C7-MFzCc*f5rm;sQCS^{5W zVN(3f-Kxb^lgiZU@*vIk2REYi^jn7Z%(E5li6!u3x%RErl% z%RoD?@!JU`br9`}%!DuHqMszUx0G63RUFLhFCzepXUz|U*9xU3b^4!NoEk2-?NCE~ z*6uxyMjIDge7TZL>q=k9OF8?oE}srU>*L6Vw`Gc;RF`~mR-7%ZB&##Oei*##eBwB} zbm>NZz2hQ`C^R2WXDADm&AOCvL3c6mEAKHT++jA-hI`@1+r6Sz&|LP*z+<01dm!C^Y4-U>JBx z4N}Bc+vA$P7>0l!Q2R%b07@ObS_Ni;yGG1?0wxdi5sy<{t@9~{l+ybdVBe@1Lx(4% zm+_Y?=i{;xMne;B-rJURqT+I0ql7lG@jZDhtT?vbT)o=5*_9V>S=gdf88r{WC7SQF zXE!e{j~q=SX9|J^0}M6u3oj!*N4}mNZ$nE#K9={|g?oFK)?9l|&1Lb4R>*&+t4B#9 ztOirg&Jy8+?2$GI!pwFoO`|Aio%@dYq}K3UfM%-q%iVq^_5R#_o)6ZR89e(+e+hNM zz)!gxA<)Aj>cfA;=YhT{Hbce3oC_|BG(J;=EfsJdd8E+$?K3W=HE=(&BV~{#olAd4 zXA)D`Yv3PQVHkw1pq;|nDm>JC*W`Me{Y4PlP6^NifWx+0WyE(oe1|5#FdLc169M8c z9HqmTQCS1UYy^u@Ntza?wl^I(ac1syc)+8f3JTv;IqJ@*uj;86$Ap?PLqB+2LyA!0m%=J{)4QS@A9X>Deh{DRZ1nUU>H9e zM(UdHZDGL1gS~DW!m_;_p%#lOQ{sa{e$2!q&V(o`eK>(d-X$$tx*0|n_tN-r4kKJjDrSo13<8<+iX+M`dJe=K0Cbrlk8Z{)@dBOSx z7)AXPwTuj0lcG+l-v(tyOMKDo`B3q{qdJ|24?yqDM~x}+>xZn*TS2(00#jzax)D3G zun#f=zRYsU-F_Y!H0JJipESre8L8U75^~?zyU4ZkeVTUxb)(q3PE6L*{aDIg9;S7( zfA4TFw2-yHU{sx48QyjUQ2yXYEXWbofi0h9)f^Zta*SWhJFu%tbadeMx`YCH@vHH* zys7Dd*P-~!v90klvGMcLJWP!-0OV3LDheZV- zq+aaAz)7845S4rDm;sN}j7yKl-@SB7$I6hM>73f?N^)11FI(5J*!^pJP4aT<-d`(7 zE5%^}o6&5&?w$J#zUwLvD!uf{FLpFxV-03`Mos0t7$y0wR|o?+c5r3wjM@|-5Mb)w z7?%Aj2vL+ zAg4RLD#G;pN4j_5Cno*mX@wW5#9mzszW*y4+sTp|*7%zJ;3v{T?mnX(`?0Nt>^O&~ zX`+)^ZOEz4Edj=J$%&(EIK+o8Y+_?e>m@=5Ni)d|GMEUbqC)Ysb2_brIhO){qGm8f zI9dyxoI!D}rZ8m39{GbCJAS)90MQ%;{=#}FoZmiJ2I#rXucX{Q>vva*wz@bpN6Ehwm(hTmTbpuYPOH!edKL06g;O5tfI8os7K!r{l## zsN`qByBCj;bC3(@T``XB6?HiFyQqIS9IO26=U721`;-d|r2)st*<>>4^^c2Y%HTUr zK);0m0jvWdUpc~PLVzpz(~z~#%+)bi)W0glpCIR8jIz(xHVm1TahkD173z)h1^3N{ zW%Y2w{fC^iv{Zp?hm#Q(7->@Jo}>KYQ)b3~5*eFYEOMfgzFA90>MGex2_F&v;K+4F zn*UCk-(*4uC>+?44R9Pbqj?@i32ChK0^W!9ROgm2#ohuQFIi6Qh}VTaAM!+gQlM{A zhz7qddRw^QxJ?4aRuqw^(8q!6i>lS$;qgys=A31DHOmn2FX6RWrYqbT8eAR*6%r{w zXQcl?SSKIYZuIpPDQS+h^-QQ(s$Nq{m;l$s9~t?Lyw}Na_2I|q9kI>$Z9lYNYOa(( z%cVA-OSz<^?kM!9wVj<3FTA1)^wI-a3;tkPLNsUt9AGVUr)aXO>qm~R zS4PC*(%nTC0c%w8?@sF+Xg@9bWzkpF=m}1rpLOfkQIb=~rSr?8u>lmttYfTdFUI3w z`e9Zpb?v53qY2yZ5IvE1?i`3~z^zuCpFJ4=WNhC5Uck{|F}mJ0iQ9=uVXA)q*SL-i zV+wG5OVhu&t_yjXB=TI0;d9NX=Vhbnn@KumHKxhW`J3J=5g04e&I)ZCIOo< zC4B<7K@t*}!;KeBWVKD7`Px*OfApy~*2j0;?EB5_G@xVLHY+&#WZiu7-`df1?lx^n zCw%i>M>jaFt15~0Rf<#`8QK@c!*S%vj4SH?d~g;!0W=3&KhDycN+seAzG$k$peZ5N z_u{1Pj-=JhvG%45qR%%>-bOaHMvKd1&-pU<>5}U8U_+Yh5o*r#Vs!_!7(%aSNfxr& z6{a`8^@ryC;0~Fe4iI&hn)4p$V_}9oOAT9otx$_)m^<>Um621z_oro*g3KZeZ9sAj zh-8vz&pjuF%ii(s)h-?=!#Y6{IKC-<0ODM6`TJhQZHk(T{dG*NpLX-jftTX*)iW@< zArU(7)pGbpXCch=F1JwF_K~*rSgX$ThmmsN#)w!rd%*bfpr(H0dEap-urh+6S{Vo` zHCVXnh<+Vxkz|NO{$+8#`#g<#8X3yyJBo!db?t^NuPS2ZzkBvP9aLj)lX)Bc8a%^M z%Q@*M^vwr-ZL_X8A9Ebw_TJ#6KYyBHLZkwlQze z-rR=pt>Dq7+ty=z?9a+hD(B^?-2*P210(LVH_vG^2`zu35BMSK7Qwg^nTJ%1+CG+6 z*dPk1pE3Jt)Sml34ObP-CtJKQR>8tiVc6UIM8=n#Pjvo2fpBB5?2Zug2x|ystE2=xA zxb$Yfef!wIMFf2P!%c$D@Vj2M11<)Tf;tP|i4k$W1{y-uIl~dhOg~>l!oySkAol`T z+i{D>&oX?#s>!$x?`9)$8fhI92pOZOqY`=FN7f(hSe9!oltR2xjFsFaog33LC30h` zkj!s5%IbFBtn$W<5Py^bQl|dk&^t7~y3Y)9Y64S*uZ07btDvMcoUO?@!m)XTI{}#n zA%m*hlukBT2F4D2$=vSA$X=RkGjTj=WjeoAx0|~_!ss`6m~mPPJjbC2^_W2{0`EU^ z7H^Y#{w`Bp=e(98VSSUnYN;sC=l|{`QX;HTSgldqfc99=G82l^8|;jJC(y}q9}H|c3IiPiNgktB7LpoA#E&2C z5gBgJOHC*@%chKnlk(GpI>p=C+6S`Pe+rcRS7Mt2h<5o8M~}sSaui`d(S(y3UWT4= zuVCDnR_OTymX@F4$9~;Q)&ssN-hQ31QFGOo>c(x3y%(DWfS-82zBdztQr-pHa&W4H z)Z=;?T1ypMN_$`^&zRHt6uvqxYInb=dV>V-eKE}aBHQl6smp(D?Jd9F=kZg#9l4bs z;?PvC06T0v72-lfT^duU#n`V{o|Dgd#K5;d&hzs2Ip%xO(ziFL80Ad9=#E%ptX8Me z^^T2enMQGFhF?vpA&6loj!!|i*QD8*Tv`gWR#29ksG|Jy#8s0a zbbWy(?bA$56xfHwvxr^(DJ^F*nFP=~Ke^wVfHz@Jcu+!p_w{l@0FRC)S;SYI=RDG6 zwVl*_jt112r5mZ1&K{Rusvc4?YXQJ4_oS#MRt0&($nfMU=m7Bn0YvrL9Z>No_vquy z#l%14yvk-W->rA!oo$qI?wMjQ$1mv$_tF>2Mln6hk@&I6Px>v3_GB?h5ceAvXe)r& zKDQB~%9u|(Vfc7Z0Izk-huZ;QANS82T*#603A+e&ho*vcxWjmpd~-;Ha%>Z7CI)Vt zI=}f(m^sfyGr|ZC705SJY<+;QgszB~2^vyQYk((1c-0OWsq;v`FkThcqX0PzLrAD? z)#j;4)b;E!aO$B!4`3YnFbjF6=_C3$$jz-+Xl4hc5#>5OCw!YjlkZ;KS>m-Vd?RjG z@&Ana*Y}dxYU?#P{k$vLt_pt|wrBfAMs-DJl5#C#xv$xRgfgREU=HE+zJ1%$}3r zOJV+*RwBCGv^XrI>4{J>8iu@QCSmChS2PFFh*9@p?x{=}$9W=7xWzV~O&KKB($1wk zR=W}~+`LQZBS@cGY1Yjsn`;i5V~#*+5j>>8M9o)%$xMElPQpgR6Z2WYqU(JJw;PR~ zj#mij(G>A2ft33Ik-Yv(AmYLTMkN5{^8~PqKtT4wXRWQh>zJ3d3WKxHxlLjoL@rk; zy-l-96>-^*b$kFIEz%o=-vu0J)x3nX#DGtkaHfCAws+nVINgLa5S4^^en}(dNmwJkh@n#9n@9+J9chE5*sa?D4_^O40@U zzmWiD(u8`UJ(KZtn8JX1E77w;)^{mCVLYRlpCcdcRV)ilH4`={L?fTOg*;lL%z%D_ zvmfQJ2H+#H3&H2Q2FWgs# zk{qeTd3N8vcTLrdOil73+14*8%0>QfNR`CfmlJeWW0O`B1wOtvGZE<@_Ca7S&Hpj!zk)#!3!VC*p`mR*HM5HWTkv!&ouT4B&~^Q7 znH(lM7xWTXbOG#}+XGt>TZQzqB+N%-TpoJ%e0C35uS8NL)wPaGYO+{yhjTl{?N5o_ z@OT#&#h~obL1Y=+O&x)jE(M?b-A;O7#gyW?2?|!7O5vUml_$e`Isd@q2b6?JRRJmu zzp>!ow;PR12Vylylm-l}rcnb2IHc^$bhxH8Q%f1aa0HMvXTPu`sGIM@J5>_dy?@aiICy(NaV7=EY^D z#B+x5Ol#K6pz`OaIaMNa{`~0gvdjC`l>l(FQCHlV5m0*pxa#8Sgq94hF0CF*!q;?G zV_yMRHVo7v&RfU>BqtU7#9Z}Tw&hH7q^%23T#5@a7I4@B2v|4v^b2e(g+Rg>9XR#+gI|(NX_VZpan&OQAMo zMUiOz^6Cc}6_7;(&5siFoHlWP)=Dy4Z`K@*2G}ZLv5#np@c|%rP9Wa_re3ey7`;b;3m7nh$&5!!WGmQCJYxhEB;gL-SUi4j&V*@dkEOb4!T5m|;aeP$=8A%O4Zlzf+Nhr`(ixV_k=p?GN!ey~=S+&(HjNUaH zuz_(F{}42R#*qxE`PerpK#Rna^R25~$Myw|eoBW}@=BzX)XVFVyw7wKj z?*!T#Zocvs!2-eFNmVKVD-(d6#-qk1@N9_*fZMnn5539o0A$wn zn)mxdI$aIHVftEh*|sn3KtTu4chi?{_z}ME)bL7pGaDws;jAki1Z%GNp`{i#BZ)=M z(N_(YMx4qNISt>+z^Wtv>sl|w)!K>j^f-Kxc}|rT^`9rntrvIJNrVR z2R*qEGh`q;@*c1{qQA%Bb^?KODxa%&z4J<)MJh1WbLeg6)|Tg5F@dQWQD-NAJ8V-Q zMui`l{PVlUG9b-gTOe;At$|XcEwN@-y0tGtm-GVBU)VA=Kzj`XvS4}|tR8ZC#vUU->) zoimad%ZQ7aYX$m&;Iq&&~T=N@4c+tp9UD@iUMuFgd>~ogwLri}DIUZoUmW*%V8;FbCN)FNuR$E zEu>>j*n)lkT$tthAHp;CridWxhcNWI?1M9V!r=-|G_|h0@Sp)VM-W2KDQk3)KVupR3aL`2fuLr z1D7xAToY2y@7|kJB{MU1q@nwL+H1RqBs`-+R3NxEnkTMj8uj_irSUbh{yUbHvOi>i z6=)ILO22fn_3gf95d;%{^o&&cS{iodR-G~9G2wu-KB{8hD`QR*jLn#R=G{trkzba2CueOIhnmd+^{#pKQ_V(}izffpN^pYe6#bDUNPfezq#cF_WAAc*oj&(ytSapye40qr16L?W(;x8;%@&p-hfj@yz9b z)CJ=a8np`DeOCLh$j{y${klPH`n|7RXH;qiL?1<01I4`E~kWlXoE8F zDg;U6gCE8S?fTcIBAf3GjlGkeoP zml9%DzV%rBQ7@AN;O}_oW;^?c$I^_W!_z@(f1bzL%Ad8v^v<_Zff{f0$)`l0H{c&n zDp;HP$#P~R!((T(LBYpshz!BtE#Xp1g6DC|2Y~0-jK*v>G1l}iYBCkwjDfteBJ|Fm zKC`dh3HJA@@lUizb~xf4cO<^MLVG$31O1UZX`L_wAF-uJ=tz}f{|V*+DokuX*V$g= zfkyc`@Q|&xJVDCo-bt~RBWf+lFTn2$_d&tdam6Ti3O)SV8WY{J_VATmU7tId)&&~m z_>}<$Gtvz((+x|9b)3#>Q%c16Q>@2v^j3-eY8F2a2hxMtI}WsKE!GZEXpauI3FZBaYG4vebACq z0M-KoT?cQk<70eqFf1kww=9GDI}J(MzT3m+fr1x~=g)TB!DsY)IhZ8R<9 z-3;X{G1b?QP_IUB+6n;iJO9@%uB=YAF8V}(q^)K7r0eHD?pByPmSaI zRSKzjdCgfLm?xk2J~|+aRUTFYveEbyP5W!G6Fty>za+z_9VOKB&vf6B89o3zTUAuZ zB4X2Mx37DIZ-{@Z{>?7;1h#EqTXjDAG4Pk4yz~rrGC17=6$te{ymS4uO%8U+{y{}+ z|6#4>ngRfA$&ozqcTj%7;ahCa(WAaBunegUopW0C6()9DK5l6%HN}N)8z^FH{`wT- zS|$l7yN18i+*uwc1@I~9c@lq>_1Bg+rH|_-tfz3J4ctHOR!9_3Whg^5Dp+5l4_!Q~ za+2m`gVYX*Bt@bhKlGj0e#>W}O*AGFOTGJwE5?@6;v$K+n1c!S_5gSHeA70f>J)Rs zCy~*-Tq(%$BL)9>pbEGc)ZXjJ?YO<+3jS{|hF_7ymWUCy(=Fwqq7VfT?5Qb8m16=M2*sbA?y-wk{= zE)P_Nv3)g*9dG=T*XniAaF#r~?uhyJ;0csfIbU!mz_{#60mVN-N-HZ-TIw)-%R!4v zt3n$UA>0SR@errs`n9ZjjwMEOaMpr>6_cGy;3damP>($-D?MJ$B< z*1o#&4CLkp^gDHRbwD!H7vD;OxFKMKC&tmBRqXw6RY35g3Fq-dt#J^8n<9)lHUmJ< z9?uzV({)n8U?7PwF4S7h$08nC7WZd}V0|DR98>j0l-cvLy`wYa1X&auspP;p^P<@9!M?A}|lU(FupC*tMJ z^t8EKZY-^}lkUdj1bv>{UqdfVx4->*a=G9;_Lr0LE0b~qKV!e&L4A z!{Q+#n4dkkEQ1Y?F}smW)@KdKw+96XwZfk^r2xqgc5c^%nSkdQ@w75`+c8 z54RFTZ_r2m(KsLA$(Hj>jYL$(#Msqhn+h4(-mgg>4;fZZu-_aY1;#<_q=O1PWMuwy z(th1K7_hpVnZcLqBKdgk@$!h9Cxgx{Y(&PEWnby2Mw_M`r`xuX&>H+HBPH)Tm3*D} zIMIYevk%!`wMx=aW`GTD#fCAxygM_W$5_Vec~6wwW)}F96C{s859TkU6|g@rm-eK( zD?01-w5)rGEG#eq7OW6CTdh%7mOosF-cI z+-IAkKXq%R0|kJUJp3obWqK zug|+Ff!d)f&EWRvvLMl6=vJrMe-vGAGAE!q2NlG`hN~s~x?bJquvYBK6s5|!9pI!j zwKy#2Kb?`XEHY1I9e7M8ph;x?h}Zo&XQJ^(=%LFkqO0+Hhcphcm+gI!wMzH0C!t`A z6EI8y5vCIn-j`ik-#B8 z6*YndQWjGQZFr^mKkSDkBS0swoicqrc4SKj8hWqdmUf=yWAXHbuvEyi$-lzI{~q0GDFBmp5Vb*Wr5)g$9-MJ^-ov)+zP- z@rTA{1rt~&7XO!Vbpb%${>~pb4P>9jQd#y+`ei1gw+rl1e0NayZjks@?7Qm}HT}?` zVJOq99UeS2m|vLpzx-uIh(R6Vtd@5F4FBtSS`pYL@t`1uU8jH9 z`b=l%<8Q)&H*mUpF+@@8aYx~D@!;-+vTs6&zp08JH8YY@DkP`GmfKzz^~lvB?~osy zkS{!~F>-L!%myh}#cz+r7iJGXZ-p@E_12S^8MXMn8H4P**+EV>JvTQzv1vR}S6jj9 z!p|&y!CVJi_TuiWaRSue<0|Y>)}3gC|K8(VKWtpxllD+>VVnCDjBfg>nQD!uGt|zA z3~T^3{WA00Wc&fw?Cgl~^n57CP_5!C@$$!+!G{guGVAp*=6V$jPiS=_q<{s$=Po)i z-lk#(*nXt%2@OEQtHvH$!T;P#OYVuEi5s0OPx%!T_^t@9p}{)r(4eJpl$%8BSbd`) zdE`xWGp2=krGlz}pS;Jkp6_pe9p9{|m4h z02o4-7a$}UYSrh)tm;MO+?t=+*7n+Uj|sN3Izq3b22r*6X{@F<|FfHD|DHm%;4*(@ zM!!MHH7$_us)T9QqcONNI%g@Juk)itQx*#4@3;Q>0AlJWGF(Y zWy#+-`r6Wgbbexa(^nS9`=c3lbvgi)Bi}*)*PlE5%pe3@r$ytQ)vWM4WX%4*P$ye@ z)bkuVFf*HJ1HKga(6kL_-_qCi6lQ%uR^jhFab77dK+^5ZNfZIG0oscL`1CRFU2pF@ z&isOntY(@n4UOX%?+VVDYM_`%$cOk|oQ#PU$z|67qPDB+LccvQFY$JCx{g3f;JZsa zJP)@Ky}#X2tCwH;G5m7;AJAmVmmp`G8iO16+O;}jNq(NZZsgFf8xw>8$Wfn;d)20I zTn%JZ`WQx~WXy|KP!R_rpMVGqnP_B<39&RkgLmqcS-MA{awJQ@4$TWt$*m^j`?DG^ zfqN?4K7Muw6U^f-Y`p9im&DJH2lycFUOcotk5Oyt!<2mrIoVNvMn56he6`y%z5M2B@jsX|giKE#eEio4m46mO@%MNJ!m z7)P$@D*5ZXfuNb0EBQ6$*U#>X+fT#*8v6;0W2cio&5(M)+w-eWN`#WgX!8`e1slPTr$7b1dNbTT;MpAvP=UiENxdg1ZVx~inAo4B zg=nLGqdJ&raX{J)l@z9Bv4ZY@+akdt zuohz`>HXp1&Cn><*N#06fwkO!_lQAg-wkg6JLo%s8MqC?0c`sUnRnfIlP54njPW=Y{(FIt1N_RmL zo%2P|acw=2$5U~O1DIDi3Zn;3Rn{a9W`UsI^w^5q`y&$5#}m^r(?}#O3Y&vM-$?h1 zS^H0zQ4!B8%f;-Xp|Q^1H$|NAk6bV`^jID*pItRjTFP{E`Ds6dMGbdqGw~3ePcj16 z@=LZAJ{f$#?X@cmX=5?Bk<29)`DY)PdZhuE+lDv>qT{6Ag8v{ zKu5!t-BNhH2fUvS#u+mOq7VZk&7myc^2ORplmM8xpDg0-pK_F1LIeTw*0~s4CRydL zqr)CPR8VcF1MS*BfRCFCOTeTg?kOe@a6h2jOrs5!afHwcux?LHH?y33r#twOvibat&~|)m7o9XP$d7lH+kakpFm5* z;aO0i*}@sRs~ylp>6GauQq$$7Lws>Z`tiaxn(oC*v=jnVllT5&2ir*P;lF2Q$5o__Jj4kV3g z52UX-GY-DaShl&9Gy|T0rnozkGw$*Ig?V2q_iLc3 z@w3GU>=HGf7yBFvvIG?3G+=BVTan3ZAq99K$BA{+w zG7Tx>R9`1a1ErWv4?~IgCJ6*v!jDU;8=@xW6)6$OF9U<*kkYI79`e$qgBq<~lcyQo z;@7@^?$q?@)uE$AIK6xr8~~2%YfW#^83yP={{g*kz!Vu+WFeZtgXJ&*DnH!*MJR&7 zrj;UOA^O~?EzL2=9$B_o*4jwtcUOmE{TL}X^Kjhb?b(?Vg}c0mQ8>OQZ;gO=NTfJ1 zHlP_khUNxnwKO7_7T^7_&gbUQpNY@^8Sh@3+dix^);)}-gx$2D9|ll9ZqnGz1btFP zJ#*kz7?k_wOe#67JX!?=WH@D9?@U%ZksaRTfGV)g|8aDV(RKV?6mHzuwr#tyZM$*O z*l3c*w$s?QZKJVmoA3PJwX*K#+_^Jze&?LMpUu-B+wa5{TxCDN7#qkUoeLnCV%?qp z6pTNJ)fPn#0v)%d9omr)9mo0l)fG=TKn$Y68>qJnHQ#^usp>(@g`gVKBj_WAGPdh0 zv6%jX1P7?jMR(T$(1umlHx)p$UJC)hkO2J2GH%Kk&RH8kQ5sK;7G;LH`?ZN~$p2WG zV?>`8rlb|_bqVu%Nos84TPOso`>HkL-{{K>7-C^0K>_2>I$?Kkt1B^GD$N$^7G~)O zytcgsfzlxsK9(A zCuUXvlQ4G2448x_(}SetDDWi_A)gm_N7H9k_14vd`WD{)DE^uKo!O3r>&2@t*16joz@f3{f~0uT|8 zQF%R$BP4`yOMXty;9JG4>mh zQON{^TY4y$tCeOZzYk_r2Lf>>f5Fg~9b4W|m#?z5$y#6L;E=IumNWP!V|_queSjvpO)b&&hZpaEJLdnmO55&vS+tMC15=zPep_>yfeo3 zHr;Bxn~gWrX5Wa1SGCbG**pgLa;GA$$d}=KrGD3l$m@w3R1Ke<3~CGLXxgQn#3ltZ zhw2?JZNCs{Xd_~A$SxDR)Cd<$s8awsB0rlK9_21a)IR0{8LkQphskY!wm)%n&$ zf2QvQwdZZ9(4-5zAzIx5#aD(l#LTJ(mh~c;Gn0QBUf&s%nI~yjKc>Iidu9P{VWIa( z#6UG8o^aZR`_Y*w0!G*mdqQ9)nhIOIt7khfBKse-qM|)z{wfr}P~!t8RTAVD)fj1+ z|57jr)T(IV+FF8aCDVpxrtHsM#{~VEefTsfE*}FOigdyyal&uG2SDDPG)%!9UQs^d z>bJeHOlSexSn|#5*WZRcz|$4;(1R04=IoqLN&*tMfNB0cV?2`s!EHEqtzCdwB2_x3 z3iD+%q*LDj{Az?cu2I)k)XY5eyrC6dIi5-S7Il+hIe8===u~~(@d3?&A%7i$i8uP; zLM=(>`LL!v1R|fp`vze5eVtSo5z5;t7AJ+0y-J>L`@&(=7i(wO*oe|C@rhX27p584 zFv7wBr<)jL6=iu`polC$8l^4zJ9MO&%9+KihI?|{Hukd0xu;OX{p&r)(u!N2DK`2{ z6idg2vk{*6dk71c`>t0conG*fxTFHEkhC&T&?niNvv%H-no~J$?j|Z;&>sokor88x@7;Hv1I#Az- zhs4|kt{o(}3vBi#ET3T*@i!!AJ~9Xt`=zy)3y2XSvxu~MD|UxjzTBO-*gxT&SL?vf z+gJ9>wWIu9*zSH=12Z_d!u*JwFy!DtN|0wZCa{ywL5e|n5*y>it08bA(+9-#yH5|u z&;LRI%e0t5cbJk=0CzKF(i@OM&IaSCNGdbClwNbC8-91b2K_Uk8Q9d;p;>>BtZOvG zy(>|rTBu`rXrYK8_Q`)17c&DEzBV2G(51ycaXC?dZ4tmcgek`VhGnY3kRyyG`6OK2 zKj-sx8 zJKXS;w6IReciVJ}%0Zc$GB`jV#a*S0V=;^MAMrGH=uIu z*JdRI!Z0(h_$iI(3n2h2DeyA{rr;!%> z8>A!vF!bFLZC>Vsev`u{mCM>kTAb4YEL(?V9#{u|o}(t`EZqGN$wCH`dzgMTA^mBV=Dv+D7{l$uw+Xm1 z#}Bs+$|$EpGb_AZ|3Vh zG7ysFG)T!cg|c_oYrpj8*f*xYV-#Awh-PfC8$&QdEDvD61GFCSr_!ZfrWuVYa%J(( zy(1-T%lJ@iCsCoD@Q|!AN!-P)zOmm-zw%$=%bgZ;gR0`yT#T zuh~>aq%=NE9#)#Au*%gjM*anUNbenBSsWlWoq?PJ?saP*)E;1q8rfm(CMl|O1(8E+ zH@l#`rC>4*MFr^;a1D(Z1D@Q)IxUC%IU(3QGvmt4ly5MRza%F#B0gQz#|@pluNK5A z3RxZAuq8osIFdFxfp}!&czig+0&uvNa1RK}B{(%S&Ee$FUx_OCSxIJ4E z?{yrIe*5B^*pNT&A^x2k=)TA|Efjomg=e!0YI#W3i zOyr}!{dKr|))^Oc6Psudgh_Sezb_qcafwQ$-LpxYvRnD(;+z}EaTu=!7@knSVi!!q zwl{&Wi{EO7p((M=XV*w4g_kEXOc+opW75Mlbj}{cui_C*l)x+6$dAjC_WOJ<8xWN= zI*KEr^G5FZX2(*0s9|v~AZPbN(s9)pDrf|58xg+jbeTh4o-;g=KD+`TS4y$pe(km@ z$KP36A#(@i!U^ZnG5qV4Fxpg=H*k;RR`CnWFZLa%WfknL>zl}WMXzHOj{{U%iv;Ej zT>)mn!2qS7R2swK{yss(S3QDb}% zW$TxNK1NQT>asTdHhyD#-u3xe6Z6ov;XJrHqQDTaAN%d&O~G(7CmxVzN}0XIx`??s zkMn6Mf%@wy6K#F{{jk5?nbD5m1~4(u#@Nl29giu}3cbG0_-(Cv1s)EH(&z`db@PS1 zR#;T?SXiri{Bzv4mJ(+=2)sA|F+wc-ybUw};B}KIRm2tc8E<-MdWVMJ)m-XFk9}Qx zeN+R$k{*20veYCE$(XZv8=d=BhA;PXq~cYbXRArLDHloBy)>Dl=WS2^|C~zMi@H}A zJ7>cPw|^WGBvjO~Ln_!aWFp0%{q3kIW%=+c#?3;IfM^Knnfm#(CS9 z!%eV1cpm^$Yk~W|_^#uJ>?n;o`jpn0wvgF5lJX{~qPy#7|A0ze{Qy&-+hoC!37 zfF(wkAkklk4SEV1togcUw) zYu7^7R3I7+(*g?;tA68`_MV<6RfV!4dpn5()9ou>X127}V#KfQ(%*i=Pt_6`ywCZa zV3RY4l97TNe!<0OvVZOl2bg~XJ~q|}PSa?waxWxLvWvg#`t9`p!UVQqh6 z2s?!L(jJj|ySTF0>qVn58A^8zE|w$sIW8V52;L#Btht)#cZHA14r(@jtFJTF4C?|c zFjpHJ(DrKVb>L@JX199OW4ODvkcJEy>}+_#))Nj%&y-V$yaXQ`61B+_1Kl2Px^eE| zI`58PLShG^5de9=a^B27rKowlzb?0=kAii{^s^1AwnQ9z8*!_cWUgFEI+y)^2=zU^ z$|F$~N7Remhd(?}C(pgg&=#QB?*07CVbwM^=RbD@YxZ>)d8pEmWf5#gc&fCG|IR}- zBMl(k*L-BtLr0BTivg3ZHRjmsuX=cs6Io{`-dex+FeYak%Q~&QqP#f)l7_v#*BI(~ zr0E46e{Z5LOnj^w8YCngNF-2EDsa~hhfT~lpR?hfh2e(?WpMyky+XHMyoF@-)&>EP znI$+IL*Yt0Wgy=rY}aT{R&bp3e(bKs3?|11AJbdNM?F~K6fg^F$0^I zsO=_Gw&BPKh)G<>+)QFPsKob*!jo4{fc8Ey3Pb*^k$08Abas`wzdwfI;w1XR6n;BU zZahqUJ`A9bouwz%B5ujDPPd>B;a3)1Tt&!&ncKyG(9feW5p$}beC+mwb9>NTR`tjK zFkcg1vbzdcmu0TYVS)j~+8z872Oe@F@xgN{vswJdG7ryUt%Q>VrxCkXTtPldj&TIo zRy|Hsq-x3xyM}?y0J=Ut4WMeyXy7s*0Z>HV-+uQM&lnZih(%%CCZJ^nKlu0w^f3i3 zQi0&EG>-khrFHYbPCM?#9t&{wFc%qz?yEF6$Y}U&1gsSXb`1%7fOr!Ez#&B5;7=7= zw1EnmL7xk-NF`Dxil`x84-o4^QSSA20)QP}QbH z*@N)XEhmLAo#HtgD>tTcAe|e;^G#Gh-3#7CI0zMu^a1?WCJT{5 z2S>a3JP^^O_^*Skx%sd_>;X5CT!r|7`QAmWALWp-AA}8{I6-BBUz6SyzR*cbp(A7T z0+mqs3W9#{z@q&*&qF<8t=q!)$-FNH-4x9E1fnX6W(R?r> z7mrQ8!(xHZkNnP(ch3^6>pfO;xdD$)e5vEps1f1|M=)`tsu6$wIMx4x^)~8-y_P7;iZr5!Y26UWL}4i zYs&SL2$q5`^PcYs(Grl`uK|1%WL`H2{4jWbWthl&w1xYdmcV`4u(KRy0(PoNDXl|^ zaZjkE%ZTl)w$QgRC>8=#+z)EPHg#-l%V*~QI7vUc8)1Xsz49SU&Lx4BccvhF+`{Pv ze{ic!)5wwBT@#rKFj*JSfPLW(Yn=gdmdeNs4wo`zfx(Mh(U;7;jtDhO!a*ndz4OhW z?bR$n!cydB-w&J9vq26xn1uM&%{37f14e)jhUmv{is(V2YtFAq^4Gc^vDDjGT zG4>|QQ(lJmLVoQ!y|hHyd~#Q#d@XC8O8{|Ats))JP#WT8kvAoQezo$#(wF)Oty&~; zkwZk}Vn3FEdVyy^eFEqah^m^8unvdJsO~WKc7ZifR196KT#yU3B@KIP1 z=G!2zj)6>tG%`0$__2_)^pKbSk^KiwOg|M+RBXqC_Q?RLVxXC{;zXrXPw8mMuV3Fq zHU%9a_58rBFHJ`#(RjwTJ-X|4P?mtSMTWHB%pQ@cOkdXrzu!DAibguR-$TLS8yfb! z->{*VEG$#Rvq>pE^Yb**od{=_j~UIXf^@{WUCs-t`;dSJ~XRZ|C(F(<_* zp!DzB?1I~i=^waHQ(u@#AA!;)lGEPBRV-Fm2sCPGc4}#S&zQ1$xOdSpPB#=F9U1$)SLW9j;&|-C20h0- zr07#t^+2Wq^NYpIXnyzxSZD17W#C$S35G`EiAUE&s*F<67W$AWDx(OqlT-AVYL4mx zX>B3^lL{Sv}3F>`Duo9$#Qf$5JS!=g9ZJ-`OCl^5g6sdb(exnq+5N9j0b)H zKb;%^*9!wE6pO``gc^c1|EDPiX9-Sm7w*L}kCJsiFHZI0|Mo>Pb248;#D*qcVt^0NSTrjAe-SCR+DZV6o>`w`Cj{i4;0z4q&osM|# zl~CK_uvVhAsbx@L$3qyAx5D>>JgR2U;tJI^ctEzF+qJ22{}BjT2=x0{AQl8+-zf|H z%yw2ay2(;%Ab?~pL<8m-VS!qH9y*V?xAhJNn{<25dnj5vUY<9b8}yq*uti4EbiGuJ z;FW{14aEvS3NO2enFna_`n1_Zesuf#1r@CcYUpi!&uR|j3_HT6FuVN{dkBO91PUf6 zHqQDSZ8sE`$sgM-B>a5tFq8zYhLNR6+iwSx&HO2?R+lxngT&S5L!`5a*(ldwqRQs! zfEQ5KyBdgI7E4DB6Jqi=V1+cx;95icF9`zBZwYEdFxz&dmJaRZt7#E0=AG>R10pw4 zXP?54GL}}NxZPkhlO;_69&N0{lhRFSIbFXl3n~kQtb!c%?sX~Qw_gXRP?2StGGe2~ zOcB3i=2m>}W73#U9AIv(xSV#-J>SxyA?hW8OcP!cG*odxf3rVY%wP7uG6^`YKEeLm z^(iO7Qq!kPi0plWQ$fVyO_}r^Lvi^YS`MjhjK;6{^-VUh-rplgIw!HDGM_}C9m*GV zxDy{$cYyRv%t_RCH>*v&;-)iUOb@L2N?wX^k-yz|0D^W-UC}<@NDK~pu#}<+D`7wc$ysZlk$x_^`78lmW+MnK^ zHdiUn=RsS>jcqA=lW$UpKUsO4K>tXQ6LRarnbiQ~s?ACtWS?<6pP#)Xbs}ID0LnU} zXAd#=3=$z0papQ-NaO*=J!uOG-74$I@_}^0hb?;ByXsA(6H&iG&evs(#ds~k&kuFT zWsb$*L11bnGQ`zW8sXj^WB4D)rZwTl4IkNmcY^#}!R8yUf8)=c3zYYXhTokAYZ1kPyS7}`L*VoXzQtp4sk`o8!o26lK$ z#BxLn4{$R9a|;u!h|moppA+;r3v%K*3N?RQ5T}NjDdB)#>ork;qg{aRZK?Rih-X&KMU?E!PY^F4QKYSGf z%{%9hZnR>U8o!D#Pc$>GG6>RAqnOOqlL*F(o?!kW^s>jNT=FpZ>dt}fub=3MSD%=$ z$<_K9jvtax_=qg&X^U#33o;9Q7n3%5pn8*wGTJRExTu$h7!NPv{nj^-*Yhx| z?x1%I^g?N&GHb=HNGx`6hy6t5Li{+W&sX;TTxzL|fi1$*0h zXyU7>FeK?x4VW5pSaGr=>@P2m2-$ok@sDkIQX^>ZcO6V1PTOt5--TR%92o{q_9-(? z<3;}}nmn*K|D)-)x~rHkN6TZ`Dx^F&?W2bl{9B*`@50)RXpKi`>6a^B&+7qdY+OLC zjjMN%Y7U#SM~ODZq1^bdde+33&+;=sP!ffD1AS$XS$t}gqYP?np;0?D9k*8lsA6_8s&{mbR`4 z#C)D1vK*rX(rqNhVcxM|T9rMzs#GdwxwS$8Z>1X=Gw@@Tr@^5g#m7^y*X%bF+`%7n z-tFbTxMdDA5}TB~JV}&wMr580ya;u)Ws9p{AX5^c7zoSa%sY;yFyZda9lJ2R^%8%L-LP8(o5*jzggIMY*+^T;Vi19>=e?FL{Chya}#eoHJn?W!Ww%dYFOm-(fgCK{zC8 zAtY%tqsqVJf*tPx0t(~O!*>V3 zSI6t$@B#-gPXd;z0gM?;li+ze~X^X!a+Ga;)@Y* z|JmFO>#}K5COtGIvc{>&@euJqn#}h9c*hYnsv=?YA=odi9~0$SB!BW$-rZA?knb9s z5z>gu=D^xW5j$EjF)fNA!y4IHSrSm7iX9FmUSjrp-MRrbw5(?9m{PDQyKM+4DJe_d z_)Cr4>Mt1RX5*uiIOFX)Um`x7MocDiOUT0gOrVMAlRH_HTTo>AA)6D|#7jzAl{`Z- zhwr#*=FQ4m-a)wswA?O-dcwcG-zj-Ls|uCN2G7;*kjY-O2)D`e6g`r>@(ejbhX%VSm!`N72R zNBk7|$^%kA&E?|CW9Qa9>oR*JKLlKT^9%I`BePUaIwjML+&u#RN;K1>-!`@quHp-w zjP#K+Y^LTZx2Uq9M-TAFs1g*By-&fC(0SFVl^8I3N}@{H%A}tBBME9; zf4El@$ldA7l~>TSq)d!)H5VEMBht3D3FS>p#*&eYiyr^_+(2-;m2aaVHe(jwR9F+n zAto9#18YWrVQBdnB;_UV(m^dL)SJ&DrcB7LhaWWVpbT4CZt>dbn0 zMVT1dVV(jmSW(zLRxHXurFBp+hS=^iUpSjK3u;`}@AH3b@s02;^tP$Zbd;~HZJxM+@wE72j5QYd)_@UNgf&8_?DPraJx`YLgD_*r10OYhH(BmIgD6q z?ToN*rpiC*!WC;esq9J#TtU1?d^J&xg`tik9`+)qV=~o5s_B_Zui4^gA>Ga&QN(TW z$4>S}zBfOU{#vd8|C!UY%W`#>%>Bs{@(XvWn_g6>XCTS(yZ%54aSN`S@dRFsONGX3 z)wjLiLYkM_Te`do#Sb~cW7c624Gm>-dVk?g{ zUh{hN^X(bl-+am^i*Wr2Pa9!vY&mN#fAdhGeNBZ)ddG<(DHzc1B=DIcD-^!4OK+w5 zCAP@^d(V*nlVzxqRxQAW@n3HH$G6qhGlk%6a97=!d^MaTGLY!%?Z4f)lSi?7l5r87TNz?U$q1!>N!`{|*_ zE2x(qeg&!?L_!a7B3<$JHIwkFJ?|gb^M3!Z%v{&?_NL?KF66PNSFiX&oJO&_FbiD3 zrw&W$?{|ynW8LUXSDgfIYrdIs?LBO>M+!pKR7!FwWZ#P{WVQB*Gk-c*ghZM2N174f zSnKI~mcTB7#2`{kJ}I&d^q{K9{h4RO*f`FwoGq*rLy=$lUJU&%6ty~!(axzkp?g_) zni}X#u7^L`S%BA0xWq)1sg8N(FEiY(1nR{99eDYZX@m~3Js&fFXV8$^>{9=5EP zU2k^2cNtp)Us-W+y@}K+&!11-)62DEsETL*zQcy}!{Ks7cE6l;AEpn=ECfOOUtB-m zP2cVjej%>8UJN+kK_(^ESq&z6zg&8aFu{+=OC0lLWn}^3TzQr_#R@q?YiGP1Y;6CJ zao5oI_yYu$#%EoMbKmkpr!x@YjipMedz$Am@px!5qtcSK~lk=EnF?IZ36xz)hg+QfHn%XntSck zwh(!;Smke$|2=KlyL_TKH;gOjLL7}Gye9f^JBET+MTjWc4%xTA+#lip5ifxc;cL)< z7HCk8cv#Y3_M)cdwDELxlJJYA2@1a8XiEvq5`GA5UZg~q^GJ6t$Za4&aDy>KGgxHQ z&m}H&70OZndnA;54FkR63mhB_`;n%@68G=q@edY8aPhg zM)Q+KnjZHD603|Ru%PhuMyBM~v!IX<{Jw>E!SG}%_(e<+^MO*=2>)TjN?N2l32X10lzX7TVs$Ks$A3d}Vi{;@ z$1fzeVJFKUx`caZ`j5AzYVz-{7#zKUkhK?k`pn2U!SHBVqb~E&+xhC3*J(OJjm@Rs z?nA*Gy3!|^j+!TK^5@a|NkDvS+)x+-#|1`VZ^CZGZjfpp^H<^dD<7;o^#%$dq)^AveH!YOWA?K`Yjdp8MIz#B9znKBkV$ zGhE`v+0hn5?cqeN@PSVsN5R*YBI}3XOZw7EJg35B*Nt*C8D(W!%SLEUKL%U8CIX9= z+xF|!KZiCSoi>9kUS%m+_zwqPm!`O$;_xE~7H=TR<__K295 z)M{sSHjJYH&1Vrji9kITo>}lmbD>7^jd@*M(;8htaV597?T!LP@DHpP76-R4q$eP zY>Rp8(2VH}cX;3{;VbV`^}i%91d?A2m>`(FV_z$gNzTQ@cprFx#>cn27j%g9fr#0TN5I z!!e3s=^HkITM?4*I~}(SuN~CD+aOdl>EGa(N7)K$*wC3(E059zsrBh>xD)#5^5&oG z)Rv8I1to@|_tKG7NK;#|G;Hd1&eEW6t#ZlkVMOPfl^c*x6BAzI7$U}!+9sB<;vw)6 zXo_qd_$-94&eA|m`9~_cab@RKdZ~1czp#S|Qie{AgNK?Nazc_Kp|G6St}&UX8h&kW zF+14;5l6JmrHIG!r_mmJE~u11rNyE>>dhQ&VSfl!{1%r~BCRPvQB;=`WG-9Oq37t@ zwD<`9tVIbrTJjm*@}dEIQabgu{*ULZ2C^*swFbdT$(3YMWN#<_f^TnZkiJ`*!WTIY5Z zdm-&j4h@B2Le!StE)(G5#pcLNj0R;Jb!Oww|Ed$`y4u>(yFb>t55{P#_xDE$)V8aA zA83>5b;M<4V4t@91UWaIQFS=%e@=wPjYKniKDKY|ynQ|7cweyQ04}c^4Yd73hvQ`> z-^UqykL#P^=hM!dD1!(Bzjp`mD4aiu@x|Gm;TiT_+@IWPYHF%#YByJ3pI4E1-0`TC z^4EVDy?>XL(GYl@*N!(KGO!B}7YR_z1o)1O_gz-HE_;D%t%W*_JN~n@vegJP66)4& zX{NfO_R)NS809H6qlT_ltltz~a==Yj^VIdC)V3>%SEppnZcLCd{D=Ewe)UH4dpA_u zimYU5aMjj!c*WrxJ(eP;8@1Y;u0DsSy7ui;>jV-=_iYQdb{P+vehkUf>qr8~{;bN_ zen&>?oJ+&bfqU1l`gl*71C{+t?uzeK87Z_Vju+}Kd$ZuHiL(Gs-k^pt#aUNu7u!>q zQZE&f#dxqS4Gg}!yw^PrLmX|tB!FwX-@`Xb+5zr)f%%X*w^LMpqXW~s#GH^bl0U%?YtrXXsFOQUv`3{RonC~Z z^ymjZlfvwM*XufC{_R|d`3>KiThS-4REi!uw{14c=Nj}i=kGoVQ133!khD%xn;9gU zCX{OTdVdI_XRIw&VPqom#l;HbN8yKiZ0yRgxH>U>uZD73vB?auY5a=-HA@+-DA@aB z)CDTKe@^QvPgTmQNEA&sQmcZ@1tvNd=loC$KqTm^zk@!EuQ4XrKkQX{^t7M%}UvN8-u z%N^e`oSg?EW5iKOw70_MJu=yL0`gOFDw$G4sS_GDwlQTI;QXVKy3Tj+glDxXlCm+H zdQR>B5D`&1b$gUOA4Ag>Rh0W4I0pOc^O?oY+KZ2v4MEOuv*|W7T-l?E;LP0bTr1L5 ztR}}Gu)+5JMFm-8JXUI=M$AY_f6N2I~|mRN>a+|I+zkqHG01!+W`B8<{fVOf3@!rD(a6MnyT2YRy|G~wV; z>ma6Z5t4 zkt5GAMf53NXB;cOd{ljoDxB3~GOK>KCLlwsj6qqfGc}Cn*AV(Z+pgg8<#Z!I$>KkE zaPdBt$40b?pHrF)y`@7+N-FdMLr3HASwMp&f^kd?pJZF`Gy4NnlT6Gd<4uRcvPqt{nrt7`yUnxO93Pd9lzD*jCMUwt zSbCEs5L;Y^On~@WfGqt1Ee*Yb9+m+4I&rhjT`d>G4EgJC5sz${kh&0P4RQ%^Pyy45`vN zdqym!m#>MI2L|v%58OSpBduV!MA5gbJ?&I%l_u^xQItCIh_{WOzKSZB;Z_as>jg3! zfe%H=#KIO+ANb5vk3{J|m8*{zRnd;6m$iKY)^_h*x~E7wa>l>3Nl(SqD)}K7Sr!Lk z4)JUJjwqc>5``!!m_}b$`Ny1$VlpyHo261!%u|a#z#w3lU%7OmpYvQ4j#_Ae&2ScVT(4ZgiAswA~y z^QbwZ#B&I@5Js}6`-|q6>H==a%gDWfX8!0!I8~ztOM~k`yk0$1Rdx>7D_r<;Ca2gx zHMBB(_L%s9`OBBn9nnm}{ zr8qyg0@U>7@qVEss-#1zV0zs^Oc|_kMa4fJd3mV12p!RKWK}N*RdGTy$gzaQ$Axor z=*m^09TDdzD+@m<^8*o`c?vk#oPXWi2>Uwjtk{`nyx??~n5uNpG>QhB^Qi-DntKABE+iRl*b=FL{9ZFi`1a;nc1hYFsskuE;E}S~`89h8sKkjaCpBJ0E1~a*x zN-8VKd3D&+=jP@{#>Yt+8Dp-zk9gm=p#--ln>UTmTO4fGo09xKpZxZ^KlcQmPi@@> zapBAc2X&d<2;?RwYioTP#XYxwL$&Nh^TsOQ_JARhA*tj`#2nrX6UKabU2pe#KecZi zMDt$uG}*%K?Mv)KUy)(m^^)p&zF_>y>Ybe!T(I z$E1*`A1@}*rC_TS&{#4*A5=6f17+g7YpWW>oNhACoBb-Yc0KkE<@Dp<#zSfV{0QsOMm>L6BBlyI#T~3;cy;epcqEg zT&1{)>p9(W@TaHJdSInS1zWZld^UMf92O$+en~By?&(^p0XZ-pgXp#5=4NXN7}2b= zvSW=K`=Yc(J3O(M$$0LeR16!a48FYr=jIR-jqHmj-_s&5f@+d^QD=@^M8cp*@mZR& zUkXc9B4<(Ui8(?~k8*?&9DXp_-R}*zuXEtqMpfEWqV%Doy=G)EmPUmLXGzqT|2qbn=L5EJB_PL#isOh z|F8hH-8Y;NY?pf(VQUoXiTPMA|6tU@*W=NBcuMT}NIi zmNQOdSigYEFZk3K)b`?EK{1>#Do=*%XApoSO5zVOjB zbUpV$QbC+q^o5+io}bl+ZRG}Ue_tFXN>jiw8qnve)kXE#eDFSk}By9{v-kL>#@E7b9y7Ld@6$_8yw3UeCh z(0#J^2~In5Lj_De(eij7pWH=3zW=VZx_QA=q$a+X%CGT#mHav)QOeW{nYr~^@XDhN z;Al|w*tqX9fKBXe)o}3_v%*4d_h|#Hr_&2GTMbpAFcH^pO!nFVPTO4C4*K4?f=C64 z6;*t_epjnFeig)XgUy`X<1s%O_q%`68}_f1`BHlg>v%1gUOfJZu>g@B88ea<$7shn zZR;i>n9rAY(AWjm1nn~P4Z!H25<{B+^{I#X{$$UAz^l;wsUY|lzQ&)j_e0AGYfR(r z`{-LdJVCs>!-Mb+=;s;A7~v+D5~9!meb{|FHAQJjYWKE0Adl+fJcCAwlRgql8AiNN zd2V1LYtpN#f5ipK=N>6@BV=L3O#<_EPD``f14kEkI>jy`=44!ivSy7pk+Gl>uJ>S+ zbtFH@BBE#~yE0JaAB_iXQwth5cDOF$bF4PqLuoy1B@r%EqJsL9d+4wz?Wo4S^wm~N zF7{cjIkTW!g7mhHMK8Zfd3qFxpSO{z;2q>4JFJ63meOd8hn9uPFp;CG5UKH|6_Kh{ z*#*^~>jw=YV`)`-T72#T(T%HD5|lxp;O;06iFp{0IvLmACm83PoTaZ8V-^GNrJB|D1081AQ>(UIwcxr}u_)qt z=(~hR`!i-DBWPG{hLS_A)*Ws%UR82hzENuZ-e@80m-t6V8P(0VmDt1p*XO+aY9+@h zT=p;}dn;XJDByQyRJ-aAaTJUGu~;SCGe1JH{h!9`O(?+nz*GfR+XHzBops^noq$+R zPSAAm-}4oaM5z27#$nbwLu$XCSzbG&91JF& z-v|W4m_5+6eG*6%@iD#LeEAI8Ak5G7*G-C%0fb#W<-oMTH%so85bYWQo*)}VUyIiU zyhvJ^Sr!4Fva%w{Ai~Sl+s;jVzS-K^@;z?{!eO%nO-y_ax7x1pUH5=} zOKppe)aJWyhl2hi?0s@)@I$f?;UcPG0jsyl8jssC$mMMDW&l-zsBpjQ?Q(A*3^g%1 z`SGp7j*XKuAwK>#j<|3en2qlJQT*W%ky#1#Bk>S;r?pr&{f)t0WSl}*B-J`1wp$PW zS&_px=hVlAAe@&M^d@T5c4Z?HjRWfQZZ7(>jAh|M@9+2D4r^okckd=4I~`33K96Lg zBh`nCYe~$FaX7-J1w`-qg|A_nno>OBk9YPv*xHZTA99r`gOh{nrz1njBE?9}kASFN%i$Q7sL=f)2o?ouCCVS1_qI4Gt4aPYChdU#VsAQ5A z9L=XvK4E5kimIFo92^_49Cp>0jO;hcy@yFSh8iP&HD5{K>PLUICF|-CmPw~JwQj!J@We3JES?+h9^S^Te`$%fqbOqZFfm0krW}6u`zV=sGtTx2X zQrg)}E-PYL)V|uSl1^0fC*sJ1`dSV9(64N5F>2s9+DzDrWrG*>v|2BwHc=s`t?CH# zTfa^M&%cH9;}Bf`ydY4f2_8oLh(CFO{q7~McW-Whw8}Fh4U43~_-$PIG{qm&wokGF z2wYxT+*@G#8--OM?pNnoHOyl5^t5*>u1YN_rjL&nmCcW zEu#aPEG9>sC;GP2+HP>g3H)gRdqPcP8(8Ohb-(~Ee-0PuQXSgw87NN&f~viexW-LO zYhFZSx}3l@bTPqcGBYzBTEz3MtoznCH~S-~dJIRk6(p82g}a5D&w}D_ES(?d^Xysp zY~pR#7CbAyg2eUa#F@C?Z#ylWxRw`sbj)eA64N5$>`W>zh=)am5bVqvPoJyXgyU)^ zE58qidDVPtX^cu8|4Dn0abd{+PV%}gWpP(bq!%_at$x~bDOOokx>eN9P0`a~iT#L+ z`_G4rR&E0d9^dUv;QKQW2pswVH22lrpl2t*A#Nk-PK~O6NYARldC0w>s1$kNmBQkz zr^O9@3fT8Q67=4cTK`yzQ)`sID1<(US-c2aMixTbr-`Q#Psf%qr%u@02w^tP_M3{Z z-+P&$$=p-35E=hvjf+&fr(I4pxH3O5MUpg2&om?CA zF<4^q(7Q2YAS?;sYz}s~{DC2~vJ%T+2l4q;OM>E~ADNL-nm%f>>nVG1_popV{lpF& zZu7c5QKmKQ`rVKp;VcCn)_}qzz$?(B(CnfZkFxF7&RcpJ>wPz=eu;N*G_=EmpIpGE zX0Dhne+p4B+Bz&x%Z^`0d~z>m2md@%9HX+|4(^c$voceWUR!wjnhamPS|8PL=UafZl91nS!m z?@cwSVUp0PY;mw6pZ8VYZtkTUR)0yya=P7`59&Z%WI_lEtm-6m(&Gi(3JSv*h7UVr z_q~7xFTVs;!NSwU#l`;7(cQY!bnZi0ihbvU`hBWk;#pf_QnKUTy4c8~D*~awz~4GY zSv{y>v4Ub?Cb7__yJUFia(hrvTyA|nS19xHuiAHT>+55Sa-*pYSb*JS zU0t_M`&`y}KaKy18B%(JW`M)bqJchap8l~QoWrF&`pQe1IzO~aP%fH%636U@skh5_ z*L*8$D~O>19F{dlc&}{KiV`|`aQd!9a@av^2MiB5&9L|#dZkiz(-zk{nFiC(%s!44boE5B^?jl zDJ3c0Dcv9;ARyhH(%t?DUagQ;pUt#=z_8lT9b|O%6y#_Y^S#hNc zNSXxNEH@`*?Nm*+7cpd15?uEt`fQkoX>*z;DPu@>#0)yjEJ#dD(YDsV4BN0F7jzY* zLczl3(d=+z@)B8^1F782FrIf*qcv0DH2ui-Ljvz-a>Dd#Zo426+#BDWCJl8|@e&hC zp~5vM@*XiWO_b5@Ee84;DkJ<6FU5K>DY8NeG9Sa}d-dttO2KkP-NjARgwUO@p8^*mlRQts&J5I{0-jGtaaycLUwE8u6nHw86MrG8sBHCERintG^Z{& z@C#89mK7z_(1y|$Kk%V8#^F3ES{bx5B|~7F ziTTzz)!zP>#nPVdcQS{sY*`Z)yjUzLJUwsr$6 zSd`k6>f=5nc_J^6CqehP%)ln@t^2yA%_vJyHJ~u}%duN4(dB4-6)&;5)4WWI>^IH4 zT}|`m3Sj!KI%; zd2Dd?kVfS@rD@ci2u|u)<(-=N(B~>U(~hh>oI^n!BLTsA+k}k&p{i>)Gm`(mr9CGRA8@F%gmJ$F``X>;xu2r;HrDX4=xEn5*|)7W+I8AO!xnAI)J2Go497fFs>T8tIc zi@O|ZYc3uuYqk5WC@JR~XYrYim9>i*c^Axen2 zKz#LS0SwiZbyN9Zb&x-xd}%I?v2zu2o$ou+s3KMKcZyYYX5ztw+}rLX<2U^9d*(Fx zi2v6$ip)Ac8JBLyby`g>frnWP)WVE58ha`-DHmhutVE_ef}Gjf^joe<#AB3j`7sf& z~hHH%Us*mVhP`1)x=N)XLUq|!mp&*;^6-L6P{TJ0~)kp6S zGSIB(%lg}XzRT28SH22E{guIX(TAUx;cn`?@%f7UxtNU;<;e1)b@V{wx5o!~@-w){ zIkN{Ss>zldbNHt^6#lvSb?7y-x0FV`cFyNxL>_$1`Ksm}Z{$(HNq4$_b5y+cv)M~{ zH1=(o@SFMw%8BCW9XT;%l9w+gHJ`fQ_+DT(kl5JTZofR9T7c)pcDb3Y%Iu-~^??P4 z#c*UIU#8{M#%QbSbxq`J{I{Y}zX;tf>-38QSKY4bn~D$@_%pBC{j~r#NKIE??*Nn{LDG7 zvQZsd{lSMV1w2reA$XWZMS=uG!S%p8p4R+S79UfyFE$iisH%GcyZW9_4ThMNtYMZc zX}%8gES<#4dgz^!__c%b+QgfQn#~S&{lczVu7fP&rd!XVx;Qr(8IG&V)0gubiIRR- zXjxs&gqKJ>#$8X$Cyfv`hZ43SM^`8Zx=Je2%i$&ykw+Yp8`ku>XGS-JxKgLb)-?>i znvm#>7fhj~CyDio!QfE0Z(+ znAj2sy=Tdh+x1PS1MQ#5Ih)Ext#qJgds)cX)h7B;dRJWGcaNEP9UR1vnIuT{qw$1b zZU^P0a9lAZTSMIIa|y4gCG}OmTaC)YEz}kZ#KXOb?`wQ z?XHTGs$s;Xe~@=UW>#A%1bUe(lJSe#ave&zBUJqN^VR;DC*heHW{p+-{z)BhN*THm z_Dz$A_JsNux^Tm%(H^il9OJY$fo!tu3U4zCuFsx^D(22h~9fi|bBcd(5+BcoCl+(`9G`8gsl{N`Ha&h zfKT?U$9S})&SS;BoZZ=_E;N(Dtu56|n|${)l+-xaBg@G6vl&8t!{I;yAvwr@K1EsN z3)hTu+i&|;+k)NH`T-pVK;cZ7L2MAB8^+Tc+HAe08QG!91?z3yxn!1^qLqj&B7dhp zfiP=$xrYe(e{m7xNu;xRq~e)6Hg5A`j^!SbXh%i0u^!Vvd@z$VsCs}>OKGuDFUhf7 zQV5TdjcZI0>7wv%So%gjzi#c-5zKl@*Q#kQ#n*hC~@Oom_ z`qWL+_p@WuC6&Su+xG@cWvc>A6&TN21HN6eZbwZ`c`WHTJf1l8Lu5-I`Eb2sTBZ3i z+)RB>qze-o-j5vOnhITDn8?!qO>xlNdZ>z``y+$3ZSwDdV_-)H0x#fq-dsBKe0m=1 zWkBv}#7sT_tY*e-iD5y$Yt3CwByExE&C->hmiz=o@Os-tKMO`F~yx%C1NoN z?ckztsiH9j`=1J}r^{Qm6ng`y90-sj6*Gw_wR($!yuxBKN>#4hAIdZ26x1bZ`v>Wm zZ>0+QR$5W@rdS<5=1Kn`#@#xAWgx%)Jrf>id*-RR*CSO_j2-IwVs0N^=9c27@ZA}s z*)v)~!9mvNL=6~;@5`-gvh-twA@5CIunKiA z@vKLL-CJz#ME44vELqW+&ifQneus-Bj&5yOC(<%c}ov|o?EZxJf9K}jt-lma? zAy{ldSMUaLF~#ASNB;O4Nj~&|Xl2T%Qd=!|>)OxpPuJ?WVBoquW`}G}7#Dc4>K)?p zEUZ03TP*1*?7dbAdrZrqkmDkpW(2|D(y?xmt;>zJwyematN)E~<{S?db=LQ$rjoVy zj0V(Kvo1H@C^`S75AyX}h?vPj44L zh$7k8w22}~$n)Ot_;L|qQwxctZ{vaG$3``hw9o`;R3`P%0bD56@od?IKXyZw^;IGg zm1CJ_SvdK?Gd9%Di(qDe*;9+w6Gu04yf2yYu0Q!wBdkmy*W{JW1M)VjdbMh^F++Fy zv6Z%x3t9A_pjTyhs%FR2vtOcb0FT*Bc z4ik<9*%rxs!zZmi>0m{%?UP zRqs!~bRc!Qk{w|-0ZZdB{=%k${_+!%-OX;f4}WG)!!w#P=9uKq_Tppnqr=8r4YN%% zE9=UEr`9m`wGEitY`A?>BJxiPD=eYm;)Dir5~Td8gc_nTi&w>`lp0U(vA1Ma{)|4O zUOYTF)VYlM_4yR67STBn2s<#e=;ZT3+%SEO2<{g!f8$gmeADe~tfx_0a{HlSUQ{Bo%#8}BK z`uUnROg6Y10cB>j{hI^I(%mTWE-)#Fpius%sqH`V-4C&GwNaVKf_}bmHyMOZV3=xF zz|hsVxg13>hX>!oIbjhkQBYihRe$pV2$8JcMkEg*-=kpN=vZ=glhe7W!ahy16?e^!kpw0HX+j<%CMMXq8&Eaza|uQ*Q2y2F+7O+Fo;U?`m!6icM~_FwES-4`cpK1BqrkKi9n>VY5PT! ztwQISd((-g>8{Rxc#rKe(<2nCgMJ?JBy9Lszn^QCWFD^F)8eROLLXE@Z`({CL`cYWM^X^*nvB`D4y^#dC#f7cm)mp=s zk-2CH&Pu&wjp?vo4hg*mF;yCoS-Q#(N>z8Yz6`}Oo4Ie*oH}!%435f*m<+MP<`;SL zI=4rS-eeudu|S!A_F^3oL1BZx6k>cpuOxcbmD0BU>uw@=5ekp$1avobYQu` zm29EkG`6weWqHi!5N%$kdDkuKT5W!NH-k^G*sQqxtn_TOJ4JpqLBRoVz4NVwsJo4- zN+K&O6GwRhBVvwt)&0|zsiO{2_<$lS7dINdTZ5F+t$q%tk&m6X`LBPwx-Nz6+xBUE zuS7)tzGN?tX`epS>kiyd6sD(V$SEl8q;&ax)w6Gp@49d6Qt%i)^}TKTCl5K9lob|+ z6e^@_UVC}|O|v+=XMW+oE$*l7n;w9vty0jZ+u?0uQ7uk2E6Va^b?Y~MmY<)0 z3&tnrn$+1L74$XR$0v+7xq?DAC$1Fl%-u%>4VtuH6Uk9Iv)j|z)Q?M9opH34I2_w~ z)b8Y7cmp&i&wAK6>-I}wT1f&wZhKn<$=?Wb9Zb*qnMslgNy6f^!vUYpI9I(`$N|9= z(v5m`eoX04=QV?}y4~Bds)oZ&(5Efb!g-bvKqg$w9kU7KH#wc{)ghDmpomYQi|4oOz=RIOy_9RSo@Qb2$fCj_LE)0S z@blX&_#PQQNpy+skL%nuX$K{_#E#KwB*hH=)}X8ktr~e0;GfytB#Ll>x^PjVpoblw z4Y*#iVC`~I5T`J0(seW&pc+ySb*d<&mAX!&M7@ZSdmZYsd!Zq2Ts&=Mz1wW=B4O~!W1+L* znp&&Y?hBK#N-oR1Z3}bp3DVK;b*zI|og5pF2TlrU8kIFER~KT>OUs>B=f~sT<51s^ z+xZwSrOL`f%SK$U*J1e`l4SAurk*N({}n|W=TugioNKjTK}S!^GHzr{8BE3%QLMr9 zp#i1B@W3U3(Oih-Jt^L;+R_%}(!FKK5TSulRf1 z7)vak-}7{Ru?v>UC`BPbmRq5@s7#uj8Df4uuh#gb9-S^6H|h@SB)o|5^-dCOS|e|( z;dbY(q-;5x@?xq)vw1O&^{s~g*g1)0@dood9^tM@GY%lVZoV(_Xn;ci@M`ulgl5mli+15Bt=F;2JEXum`pcJ#Sg zpa9U#_^YfaU@Iq%v`C!8>pt=(6gU(MeFS6@Wm8*Q-L7kXLTNzQL|3vBs+@i?2_KXZ zS&ucF?O2)N9t2MbTRO){Hmk}#Drl);UNsKnd4yW-?aN6wC?J6(^d!7aR&GICXS^3=Y_fx zMINJ!ho70THsayt{^xE=ZEWPOYCR|mo|7BaGOL{H&0c%d(Sn>9zFb5ZeLk3XdfG91 zf?Wf68ZYDmYt8_Ia^KAw7Du{kf%@`oLA~h9VZ+?{vQ72H73s_1-b6m;>TOlq$!6s@7<@1TgD;khpspp`9J~6kEnvN zyM(vx)%9P&H_tgb6uXP|8s2|tH9U*m5xulHQ$&jxi`>-rh2}`cNNkpCGqdc2qKPxn z(e50;Yv0`33ITo4gh7L6aWQ^^&fY=YF?V&%*SdjS@;j^kiey{VrV13rM3#Llnp|6@ z(;yOMsF^e17)X@&Fn&MK0EQuOcl9uWL~!-gIobxdbeg+YR638>!B&z~M4uYt-<>_F zJ2JNFA(rh|Gd`)F#OG`)wt@>_=)FrCRNmEl-+#_!qv%q77h<~}N8k|679_AxdPV26 zyC{Kviy^7|F{bE=n+-iN32m|2_*BO#&%7u%rs}6qybo#1zY14T{w(Edu}xBn%F%LS zB{2}}j1Al14edUOVyx6&e=uGn*7gu(qCj>44wLZV(6MyWKRG)Qj zs~a4?l>`_{Nhz%`e;a*f;m;VusI_%j8P3@ZnRlZ-Yq=d?9E|y^%zBafVlu z)C}(8?zQNJ*88C8;$|QB_t{Quy)AY~H~Wk8YVWj*hH;DPmmn##$IG)lTrIj;_t{S^ zs!!5iH5@M1XQDGK-wT>DU@eFB1UO+Kz7Wh-*?o8tnmyofNFIHq zA(*u_*q5uCW#y|vu^a_>9N+BUtsn7CpE^K?>uz(_pNFV!-Cw_~z#s>C!b)x52O-PL zQBJv^-(G{2bM0;qW?cgvtsnaN;F&6Ujp$8Lvs7G%$Jr%~nHT4c0sb3gMPX_hb#W%Q zBa)aB0@#0Vuv*-iCnt_LvhLZR9fwqeDE|AZI!Apyd7KtanJ5=Z@Wo0ZZMjpNb}kB2 z3}HfBnDVCZ8O+~f?Xu@Xwk;(-i%Y}$8tgrF=`GMG*O{Y&#^T3^Ea-vmg-%k?a&>#X zFxAHgX(qDhY~@#CE}(Y{ITBqqCO6ZT{V)PPJ4IL^3WF&W9R}HFm8>6Q{Th8St!+U} z!E+h1@~#pL)Gcl#Ci0E-42nDbZDxt{fIu z44_y~6(qRTXt;Qn!HEI70Fh^}OcgYVNVd;PR1ZOGxno3ecpAaN?L>#}V>jL+yVo%c zA?Fk}0qr^cwPGZO`~-!9n#J@9?cWZ5P#L(5cvn}k1tdlK73Z4Im(Nk!5^g>GV$jd+ zlq;R9(h1i}D#seCBo5DX0Y}*X`RY*K7`q{9(Jtq&mbN5%^6njT&uQ;Rc1mHBCBld0 z-waN!P{C82Jyrxelw;@6q^xEseZpB!w~iT9>8649#ECchKjoz@!z5F&>`$k=B4xbgpQ{rKenP?(;lp)c;NDiT43<`#AV zf99dVKQ1K>PEY&ic!K?j;B@yBlEjv1QyE}mC8+k;F)(u_&Z9EANBSj8wXhudyvKO{ z(FF_vhs+usYN%9vrB(`(MCq&Y$|w)BO4PFCPBDSu88X3{*-0#r4F~B7zin5+ZH*<| z?;CvITP2cpmKiUA{QTz6Scq|sc2XW>M=QC?JRLX$BcGzMhiV(44>xdGUk?m3WfHx8 z_-vXeLX%ZFP2RYF@5IqrlKq_D$LB$0=g4;962k!Hjh;h6$<^(X{f(Q;?JIJ+=ysM~ z?HbC$e1d-K@@mA=WL0c-%G_pFh4l7kkcJ(kRT3_^acjc-Jw{!tg#Snt$?k#<*cv)` zP)m_Qs!$a_JwW6rk6G~F>%}bG3j(`y??OA=V~TQFhze;)-rygV-6bf~PvY=k0AWI@ zlJPa>&t5*mI1RF&(N;Ln&^2ri-H@O13{AaiJJjQqJ8p_A)DX!`cZha8F(S&UT)hw} zI6U{nc_=1uXrfy)T0@^*TxOiMw;7`=nga~rd{IU99`S+RAd7&Dab{lQG!S?8SUadl z*wfh2_4#js!`WnpQGS8te<0hTr~K3>Dj~21=6Qj$A&ZLoCB9oRV`$c7zbCTj3!C8wYNpE+T@HI;{1%B%of zB4KT}te|hCGqF50ETp>dWUVsH(Fi0(Gt+|`4K?_kE#RXTB6g+w-UfETL%0rcVfH_9 zi2@jJ+4{!V0Lawr=|3C&zxub{-M@-aJa^7Jii*jT*6GVJiPph%bR+Ho+G;-+(sV=5=`U;RV+61Ly&gW@h~43)vXD?lr&-%> z5L$sBVet5?B5Lr-wsUtRa6s}d)w{G29ivDZPb?sR}Grp zZl#BWU$K5{Brqq^jcmIl+v9%#Asgnn4bynW@@SCRU}rC^>l-44R{U$Fk6k`$I%0h} zN_e?}`f3uErN+^WpFa@`&5Wr}f8-`);tqAs4UhZn>gOxryvb|GlfDF^^TkIp5=yKO z_tX$|l+;Ngtc+^}v*o&Rmw|AX+d_l^7ltXZ$_zaNdhB zrv=%hld^5a0Gi5(Q*ZphV=+emT6L?iVYNQpqz{2nI@%}IQrznQFrAeQg;v+Dz0Hcm z+{ujA{3%7_H-jQK<>^845Cy-Q#NfkcF1d->fXi8$Gmmk^FOCBIZ1%cEu@VOO{I?&F zPEjD6gGdwz4GBH~&Y~CZHd z(-Zh9vUz>c&;!;hAXGg?@)uzqX)y&coX%8{&5&M_=SZVZ z9fApjFO$_aL>+^$4zG@j9Y&^~&2Ho;FQ&Y-V`PzEX1LfHQEKY(AojvN(`Z?7p=E!2 z{f%B9=AItrx`cOa0J6%2-Ny5~2nXIv5PMJEocHfz%3@iGU?;9C1 zd%hK$oE{~Jc8 z3#IhIuNdXXBo+O5N_7d3lQyKsW2V8W2FoDC8FyKPt#8}CoiF*0CmZS>Rb7Ej#8OYE zjWkw<$PowQaP z3fzm7YP|=%khU&)DI?BfA=+XCv?s&*3yS&+@gv;1ekG+!86zzOdqY$g7lxqQOyuMn z*Z%;Xp{ncexg<}`bnAuf`RqHf9QiFp?)3r%{thD+bzvcy^NT)-NX&JH#hLHc36fS$ zgX=W7Qg0_FGzX@gjC$Pi>KnAxbvfgrr@M~?E~upLr|5z5`*1AsY5OZ7$gH!ttjezO z_V_8vLef*Y-7F_mkd<@|mU9`;L#1OG@V$KgN8cvT{<#^Xjr-JmWe zcGSzKle1Ais94aG)(aof5`{f^8I z(L0|{aPQ{$x^gLmRC|~K7v`z{V+=#<4?8u~NT z>6Gh2%n>tG%<&I~Y4Ylh?BDyung`{Peo_>Cne) z$7udq@e(nRQ8BMA(>K_Dj{w!nEBkq3G2m#gZ^aYsvZ$~bE*6NlIkI{nccBi&?h0*0 zpz6(VkB}PyTQi<#S*wf=W3crqFyQPRtKuTkT^rleP~1&iBt6LH#)Vbc+U~cA$mD+_ zfUk}?+EcrBX+?C%%U36+6ceF9qx5=3{byt_g#l(SB-rz1_hN=^eoD)b7I|{Vw1Qz$ ztl+sRha+(y(Nrj14S^OMZ7VEanJ~YfM<2VlbnJUU!N9P^R#uf&XV;xjaPV1A^&5;0l>F}&(aO4w3>9P36wpj8 zjO1n7c>H-}GKGDTOj4_TI4IyTANokfs?E$>?4l34IwrmQsmvgF^w8MOPi69=OW1^! z6P#DD>YGbGEoAK^fB>34N24qRB*i#wY#*?i;x{CxeX;*56@!U5#arEd6VhX6Oa2f= ztAV&Y1kyXIj_J=JB%lk6OWbC+E)7YUn_AQR4{ZZVZEBQ{d7Lojj|{l_WO+4YC8p37 zDMd{$Rd0yAk_f*&XVuq#nYF!R_FUNF)4XP0Qts$=NZ0*w{Gs!8TgbnFaWc4b2Ngbd z%l-*lP2Q)|rN9L`!rV2-iiY^Rt0ll3=)Oj6y}%oAL`dqLlPriUJX*csvM}x)+donx zuK7e3CR+e|dG?O;kN)z zn&&r}|DN7&)U=DDL&cH!_*W}GkO))8|G+K`0h1nDFWF!HNv(3+TSbMD@5ek}Bj=++ zqNU?wDw{11fd+Xhw4WKm(H^ z*|*OHN(3Ro#vWZoq4lQRVxY%Y@041X&bf4tnXfrkIb+Ul%GUv4S3#h=fGRfKe0 zJXk-$Z^4%#%goA0G(*&fX*LipLZsb2NLlP?q!;Hqr8WZgGXdFk88R?l6y3dor9QDw z0H{shUhL*JR8-lc;q*}6T#B*j%`5U)j7ESe=iA`%F#me#MMAihv3vN)E0eF-SYOT> zOXWCgD@G^;17a6YlF);awKe5laMj6?6>ctl$&)8mPN6K+nbNR6?TfcoWQt&@ zWI^8&Y#;#P1GEe!Tmb@}$QBl3>&XP)Ye+KuyqaSE;?-QitDsHZRZG!hg~ADEk2VTC znOMO6BPQ>+$z;-P|KsMx3gM#pn}!w4`R4Qc_x*=rNw_qrNy8;v>v$s2q%LuuMa7%# zjl$>mC50FS0Q|7jNzLy355NM+7lQ3XmF=wL=hr@H>EWJrhM6LV_v0#CwGR_nYo#4h zwKpyBby^U4_1tZ?9@I7c;VwOT%C0p>ZX(@DNR z+V2|WYkjkAl9U}uJdn9^rhu~g> z5oM#PlXAEytlwi|ZII%Cw5ESd)EFdN4e`G&Ww~_&GN$N9lWcn@FdE&eHt{`qSO2q6 zz06WhP-hi2dRlO@`kpp(wr)^XK$nb|i5m3}kw=!UE;lgVBCLGk1U4`Es|jp`?YME* zGg`wdNw;@d)yt7UY191SAp}m3=?GrjndjFDy1aIkKb`Iw>k7%N#W6&APu$!meeHJC zwN>aK+G5PY;ivDp9k!$z@8_!io> zi;AB-i*B3$637MNcwk%r;&j9SK?2?#GX=sbbMhgiiJp|~q`j~rElWG?0t2c@&qG8h zQE)DpqP28OqRj;Ooo0`JF8Cos7Uv5{bRIVGcVh}pViq4d6tmB`3S9oFYWn*shMd{8 zd7hFL+*wA?)J4&c7{uS@(<=$Z{^PP2c_nneA~g@EoD4IwjAP=>hiH6K-Eo(&*xa*L zc;RKv^g4WQiRYEG?P|w?tYVEURrghv$^-`iCuNG1&Q}-pOlDmsDN)5Sqrr+m>P%}* zq~Y2m<9fZy=Wu!^BGLDmp%pd+shQ05%>_&Q+zkLMc8t@exTrPRLVL!&XSd!s5)6Jm zyCmyw{$lw49%X0OZ5>bdb8G7?5pU?=A2ngwT~##rE>zPQ4BJz^AqP46of?lRcFECu z&6b|>{-K6iajw{+a`Af;oQPA{4$Nm}n1AU1otp^;9vS1N~C)+)e!mUQpoq37JB}XHXH- znxj7*fu63_<%QoM^Qy>QKN3iH;Z$&ua*EZa9~(P<1mR`>f|u%vgRM5*+{go=k9dr< z_H|dzJkg=Et-Uf!#M?}yFVJ^YM0NPC0!jX(82C?uain|28E*kwGZ$+Cf47rHp6~3g z>iCNCy#A7I8u-6=-p<V zQU&33oFF~TAYs9lvcqT5)OQacuc*#-KCUy`b7{yo(r5u&)fdunL~{h_4r6f;zxqcu z|6s_RGYsrl<+6KEH{)q$q@9^`Ag!4(tPa<9_jCs(jUkf5ytK2sB;c|CG3mf9)aX%w$IU;uA^|JABmwRm{W*t5*bgLsv;893((Fxo{8jXYqoa`~-{E-5I*`fE?yVr>mye9{|7>Klo%e8}b0E|(8(x+vDpMvHs$!HZQ{9it0MQ!c{7 zY_1QiNm1vDW8=}UcJr2t(?vhzLl5k2bNZ==OvMppgCN_(a96ybQ-uU39})omP7FmQ z1=N}6gX{s}lDka#-~fz}`kLM!*$|F>=TW_k5pv+c<02(*Q1FIH#2rK6 z<|TA1+2I$djU~UN=L7}OT+bE)IokXO+|UzK*$I<3GCaSq6cNQO*<6zXw{-DZwWX}x zF=fU3ur<`mK6u@}qBq1Fz8z4Ns;lyLG=NjGoc{nLx9K74di^eaiQ)Gso^SWsl%2Ka zw%IL(T;Szj8X_h22v>>W={ILW51R(>pQQbfjktr_6GE;ifgZa{ zMoiiGCvDX2hKKu;LQ4F88W3b)m}}UcM8Db*zb$tIl6xv238?o8Xl{_IsY^_cWDI+V z`S7;BnUBwxO&fPi04r_Oz`4&3H>;Al8A-#>aW)6T(C33T1mEz*XeW@vZZs}i4l>*P zDIRI!#Djx|NI8gpLO$c3%y#^Xb+E%^C+b^iCcGU-0G*1OtE>eKKjjdX_l4yTJFa)x z$^WS$#ixaKIud-awMA4hRln8GaCtKDPy!xKT_fcxXVKs{;pEhVz0Wa+*ZZdLv?i#) z(4)uert*a{B{u4MgiyZnge|G8tqjLXz%qodtPxM^U2ACDv%l_-!caiB_3-J02seME zUZQS^8|H8gpAPUVcP@G`pjxg9zknR>i9ZMeV*Zgn+2=izzzN?h%HtoURCoQ-HxjK= zvE_$OT*PA#cc-5h=i|^wmHgsu)cD`c&z?4@-d+A=9H3kl?2*yR>59y&>Wz7nw-d0b zE3S%Z`9<>OErFUmqBwzEV?y z$zko4-cm4j40zAf&Tv(6%nJVZFhLumVNBqv6p42alY&|$2_C>nbxn8)g|;#UPLze! zs##3CKSQ^?>*`9c-`vc2@Q<$PL{?Fu(;mhC^@^B21ps;IB`!?ja{{&nZG(6ppPFiY zP#KDF>w=5_<$GaYWm(Io-rG)J+S+`i$2gYq9-A8&No}f$tpV2>5>Ir<;>UkUmJAF* z0Wc0J&QdT&bOns@7S=V{o^P9K3G9|xxxQ&7R7aDIU4w*u{TCOA=olM*!{*~urNh5D zMkKOMlhFR*F&GwL?dFAGG)Vy!w8Aj%QY)@!V8!_(ezj2th-DW(#RnT-OhI%=^2PM> zxA}Iyr+FmE>fAz&Ff%3CoiUrPb9f2!s+9`t;WQbAes4F zt-Q`|jQI>&#tYwxgwNTjVe341jvc60PE2XFjab>J?cjF*C^f^ynZ8d=FClU<0F~I^ zqX<%Xxy2YoKjwci&=_~sOnxh;_pdAWW6{4e6^)xK)|`86K<-b3mR3nC*j)Z zRCD+$zxhY|R{+@}DuX+lSbo0jY?tR};A-GEBPWeGdf>X3C|!G?vgZ|xg72QtK zJ)>#yyEcU9;iM*B_;O1U(D)&<(mS!Up~69&yNLqP86cZIIv`#+P~K4yeqS^#PC!DQ zjVAN;2_wyFD4&f5)8d%h+)YmxY6Yg{7-TAj56Vi7DgF|25l@qy<1X>O80?;RuOiw@Q9=~qbe zV3lQ$$HyM$0p%@eO2<6J!xZJKuiC<>e>=)S6c?=BkxF#Nw=(Ba4sgp$U-2bQAGVX! zKiMvKQp#5$#bz|~o=VgC(|Nph!`Vx4*eeOuy8{_MfX$m?^rV-K+JsS8s+65=)^$V= zIO5ASv|uIVLH-;V7Aust7D)D~P3dOv-%XIGs;zJAOVsqqlpgKp$@TFI8z2wTOB!4^ zo%;!#=|-0jBvd&MJF?iDI)h3mw4$QFs-k}!2IO);oBN-%oHARgcFV6I#K1hwkMWqi zPhX9boDEB+_YUj)VGBZMC%%oe<~;lG8K(zE>&KLtKI;^!l;xZzSxumQhh#j~sfQxG zj2H6VX5yrLTayky*At2J1sD4DFo+Y3-BtB(MCeB@g-_U5AB1PLq>=LVn)0u z;6#_+E_ux{8yAe2aD6Q5y)^XY4K0Adv6Uq$%jUnlNA?*^5!Os zWa$Sqg$JvmKu9b9=hH=U3@QFmxFW+>^{xNiDOBY7IJG)4k9drKDR7mwUyw@4%@;EZ ze&B+({0L!wfZF82@4Ju;J#UkGj!D+f(X_2f)N7vzEHOjN zrF5ms=hn^jWb@7b=_yDk9q}3i^MX)X3MX24Qx% znT*p$`~RSbSq>V|gmLhapG@63Iqp3$QXT4_g;8U8S;)Bk3ARJL-(r_QdSI*8iw2dX zurDuoqNyR@LCtGfc%L$I_bg5}sivWQudPf&R189=#=l?fwGN*A_X!!8(B#=*Jzh3X zZe5le+;3dg2V$Br$vIaSo*XRGyXz5*3LBm|Lr?NAM)*OhAJ&fYK%+pZ-F%d}dwd38 zf^0oXHLWCMORSbd#svDX@dbB|`I+mxfonl<6t8++NXd+};VfS8XN;@ePf~hTGa2Vf z%!Ms4T+*m*X^Rg+E^b^ZYOGNuGyLmrdTzV0elkFguCs5Gw-i*5a@xYsEScpghbc&Q zex)KlM&PT{(Y|J=Ma4IU57GOfr
    -### Pipeline information +### Vcf_collect
    Output files -- `pipeline_info/` - - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. - - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. - - Parameters used by the pipeline run: `params.json`. +- `vcf` + - `_fusion_data.vcf` - contains the fusions in vcf format with collected statistics. + +Vcf-collect takes as input the results of fusion-report and fusioninspector. That means fusions from all tools are aggregated. Fusioninspector applies a filter so it is possible some fusions detected by a caller are not filtered out by fusioninspector. In those cases, vcf-collect will display the fusions, but a lot of data will be missing as fusioninspector performs the analysis for each fusion.
    -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +[Megafusion](https://github.com/J35P312/MegaFusion) converts RNA fusion files to SV VCF and collects statistics and metrics in a VCF file. From acfb48bd656bc94e605c48f1ea42f56aa104e16a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 11 Aug 2025 11:08:36 +0200 Subject: [PATCH 769/887] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c586d3f46..1a35d7776 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,6 +89,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update logo [#715](https://github.com/nf-core/rnafusion/pull/715) - Replaced local `STARFUSION_BUILD` for module from nf-core [#709](https://github.com/nf-core/rnafusion/pull/709) - Modified `test_build` profile to use a reduced version of Pfam and Dfam files [#733](https://github.com/nf-core/rnafusion/pull/733) +- Updated the documentation to reflect the changes done in the release [#741](https://github.com/nf-core/rnafusion/pull/741) ### Fixed From 332a20c090f18c219e9108974b105d5491ebab42 Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:35:17 -0300 Subject: [PATCH 770/887] Add test for `vcf_collect` module --- modules/local/vcf_collect/tests/main.nf.test | 56 ++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 modules/local/vcf_collect/tests/main.nf.test diff --git a/modules/local/vcf_collect/tests/main.nf.test b/modules/local/vcf_collect/tests/main.nf.test new file mode 100644 index 000000000..559849301 --- /dev/null +++ b/modules/local/vcf_collect/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process VCF_COLLECT" + script "../main.nf" + process "VCF_COLLECT" + + test("VCF_COLLECT - human - fusionreport - fusioninspector") { + + when { + process { + """ + input[0] = Channel.of([ id:'test_sample' ]) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/test.FusionInspector.fusions.abridged.tsv", checkIfExists: true))) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/test.tsv", checkIfExists: true))) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/fusionreport/test_sample_fusionreport_index.html", checkIfExists: true))) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/test.fusions.csv", checkIfExists: true))) + input[1] = [[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] + input[2] = [[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("VCF_COLLECT - human - fusionreport - fusioninspector - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ id:'test_sample' ]) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/test.FusionInspector.fusions.abridged.tsv", checkIfExists: true))) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/test.tsv", checkIfExists: true))) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/fusionreport/test_sample_fusionreport_index.html", checkIfExists: true))) + .combine(Channel.of(file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/test.fusions.csv", checkIfExists: true))) + input[1] = [[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] + input[2] = [[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} From 86cb5c5729bf8cbbc6ef91470d8db02d606d5ae2 Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:36:13 -0300 Subject: [PATCH 771/887] Add snapshot --- .../local/vcf_collect/tests/main.nf.test.snap | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 modules/local/vcf_collect/tests/main.nf.test.snap diff --git a/modules/local/vcf_collect/tests/main.nf.test.snap b/modules/local/vcf_collect/tests/main.nf.test.snap new file mode 100644 index 000000000..1e203d0c1 --- /dev/null +++ b/modules/local/vcf_collect/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "VCF_COLLECT - human - fusionreport - fusioninspector - stub": { + "content": [ + { + "0": [ + "versions.yml:md5,0e9daf1986d2c5f0ce94eb1ca2cb4fed" + ], + "1": [ + [ + { + "id": "test_sample" + }, + "test_sample_fusion_data.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test_sample" + }, + "test_sample_fusion_data.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,0e9daf1986d2c5f0ce94eb1ca2cb4fed" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-12T20:45:40.474082615" + }, + "VCF_COLLECT - human - fusionreport - fusioninspector": { + "content": [ + { + "0": [ + "versions.yml:md5,646edd06d506d0b35d32ee663bafb804" + ], + "1": [ + [ + { + "id": "test_sample" + }, + "test_sample_fusion_data.vcf:md5,0ae5bd8c5b24ffbec7ae617feec91583" + ] + ], + "vcf": [ + [ + { + "id": "test_sample" + }, + "test_sample_fusion_data.vcf:md5,0ae5bd8c5b24ffbec7ae617feec91583" + ] + ], + "versions": [ + "versions.yml:md5,646edd06d506d0b35d32ee663bafb804" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-12T20:45:25.283350308" + } +} From 074ea3f986a7bcd931349ef4c2bf2c033b0d926a Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:44:32 -0300 Subject: [PATCH 772/887] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c586d3f46..429e40475 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a extra trimming step for fusioncatcher in case a different read-length is wished for this tool only [#674](https://github.com/nf-core/rnafusion/pull/674) - Added support for references hosted on the nf-core AWS S3 bucket. [#717](https://github.com/nf-core/rnafusion/pull/717) - Added `--dfam_hmm`, `--dfam_h3f`, `--dfam_h3i`, `--dfam_h3m`, `--dfam_h3p`, `--pfam_file` and `--annot_filter_url` parameters to allow use of custom files in `STARFUSION_BUILD` module [#709](https://github.com/nf-core/rnafusion/pull/709) +- Add nf-test to local module: `VCF_COLLECT`. [#745](https://github.com/nf-core/rnafusion/pull/745) ### Changed From c3d7044ba75d17378f3dd40590f48f66ba8ac847 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 18 Aug 2025 17:06:39 +0000 Subject: [PATCH 773/887] test: update snapshot --- tests/test_build.nf.test.snap | 4 +- tests/test_stub.nf.test.snap | 256 +++---------------------------- tests/test_stub_bam.nf.test.snap | 256 +++---------------------------- 3 files changed, 38 insertions(+), 478 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index ee462d5d6..74ceef667 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -10,7 +10,7 @@ "bioawk": 1.0 }, "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" + "ctatsplicing": "0.0.2" }, "FUSIONREPORT_DOWNLOAD": { "fusion_report": "4.0.1" @@ -285,6 +285,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:11:40.714960564" + "timestamp": "2025-08-18T13:58:42.038319834" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index a8212ba9d..759d060d9 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -40,14 +40,14 @@ "SAMTOOLS_INDEX": { "samtools": 1.21 }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, "STAR-Fusion": "1.15.1" }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, @@ -218,7 +218,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:20:09.057111889" + "timestamp": "2025-08-18T16:11:25.285702343" }, "stub test stringtie": { "content": [ @@ -528,7 +528,7 @@ "fastqc": "0.12.1" }, "FUSIONINSPECTOR": { - "STAR-Fusion": null + "FusionInspector": "2.10.0" }, "FUSIONREPORT_DETECT": { "fusion_report": "4.0.1" @@ -608,119 +608,9 @@ "fusioninspector/test", "fusioninspector/test/FusionInspector.log", "fusioninspector/test/IGV_inputs", - "fusioninspector/test/IGV_inputs/TrinityFusion.bed", - "fusioninspector/test/IGV_inputs/cytoBand.txt", - "fusioninspector/test/IGV_inputs/test.ROI.bed", - "fusioninspector/test/IGV_inputs/test.bed", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/test/IGV_inputs/test.consolidated.bam", - "fusioninspector/test/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/test/IGV_inputs/test.fa", - "fusioninspector/test/IGV_inputs/test.fa.fai", - "fusioninspector/test/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/test/IGV_inputs/test.gtf", - "fusioninspector/test/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/test/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/test/IGV_inputs/tracks.json", "fusioninspector/test/chckpts_dir", - "fusioninspector/test/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/add_FFPM.ok", - "fusioninspector/test/chckpts_dir/add_splice_info.ok", - "fusioninspector/test/chckpts_dir/append_microH_info.ok", - "fusioninspector/test/chckpts_dir/blast_filter.ok", - "fusioninspector/test/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/test/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/test/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/test/chckpts_dir/cp_final.ok", - "fusioninspector/test/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/test/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/test/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/test/chckpts_dir/cytoband.ok", - "fusioninspector/test/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/test/chckpts_dir/final.abridged.ok", - "fusioninspector/test/chckpts_dir/fusion_annotator.ok", - "fusioninspector/test/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/test/chckpts_dir/fusion_contigs.ok", - "fusioninspector/test/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/test/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/index_consol_bam.ok", - "fusioninspector/test/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/test/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/test/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/test/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/test/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/test/chckpts_dir/microH.dat.ok", - "fusioninspector/test/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/test/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/test/chckpts_dir/run_STAR.ok", - "fusioninspector/test/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/test/chckpts_dir/span_reads_acc.ok", - "fusioninspector/test/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/test/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/test/chckpts_dir/test.bed.tabix.ok", "fusioninspector/test/fi_workdir", - "fusioninspector/test/fi_workdir/Log.final.out", - "fusioninspector/test/fi_workdir/Log.out", - "fusioninspector/test/fi_workdir/Log.progress.out", - "fusioninspector/test/fi_workdir/SJ.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome", - "fusioninspector/test/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/test/fi_workdir/microH.dat", - "fusioninspector/test/fi_workdir/pipeliner.456.cmds", - "fusioninspector/test/fi_workdir/star_align.ok", - "fusioninspector/test/fi_workdir/test.fa", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", "fusioninspector/test/fi_workdir/test.gtf", - "fusioninspector/test/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/test/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.ok", "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test/test.FusionInspector.fusions.tsv", "fusioninspector/test/test.fusion_inspector_web.html", @@ -887,7 +777,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:23:44.5776928" + "timestamp": "2025-08-18T16:16:11.496999226" }, "stub test salmon": { "content": [ @@ -995,7 +885,7 @@ "bioawk": 1.0 }, "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" + "ctatsplicing": "0.0.2" }, "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" @@ -1219,7 +1109,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:17:54.284398814" + "timestamp": "2025-08-18T16:08:54.904059765" }, "stub test fusionreport": { "content": [ @@ -1274,14 +1164,14 @@ "SAMTOOLS_INDEX": { "samtools": 1.21 }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, "STAR-Fusion": "1.15.1" }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, @@ -1473,7 +1363,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:27:41.801614257" + "timestamp": "2025-08-18T16:13:31.815555556" }, "stub test fastp": { "content": [ @@ -1728,7 +1618,7 @@ "bioawk": 1.0 }, "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" + "ctatsplicing": "0.0.2" }, "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" @@ -1746,7 +1636,7 @@ "fusioncatcher": "1.33" }, "FUSIONINSPECTOR": { - "STAR-Fusion": null + "FusionInspector": "2.10.0" }, "FUSIONREPORT_DETECT": { "fusion_report": "4.0.1" @@ -1794,14 +1684,14 @@ "SAMTOOLS_INDEX": { "samtools": 1.21 }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, "STAR-Fusion": "1.15.1" }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, @@ -1869,119 +1759,9 @@ "fusioninspector/test", "fusioninspector/test/FusionInspector.log", "fusioninspector/test/IGV_inputs", - "fusioninspector/test/IGV_inputs/TrinityFusion.bed", - "fusioninspector/test/IGV_inputs/cytoBand.txt", - "fusioninspector/test/IGV_inputs/test.ROI.bed", - "fusioninspector/test/IGV_inputs/test.bed", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/test/IGV_inputs/test.consolidated.bam", - "fusioninspector/test/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/test/IGV_inputs/test.fa", - "fusioninspector/test/IGV_inputs/test.fa.fai", - "fusioninspector/test/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/test/IGV_inputs/test.gtf", - "fusioninspector/test/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/test/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/test/IGV_inputs/tracks.json", "fusioninspector/test/chckpts_dir", - "fusioninspector/test/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/add_FFPM.ok", - "fusioninspector/test/chckpts_dir/add_splice_info.ok", - "fusioninspector/test/chckpts_dir/append_microH_info.ok", - "fusioninspector/test/chckpts_dir/blast_filter.ok", - "fusioninspector/test/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/test/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/test/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/test/chckpts_dir/cp_final.ok", - "fusioninspector/test/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/test/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/test/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/test/chckpts_dir/cytoband.ok", - "fusioninspector/test/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/test/chckpts_dir/final.abridged.ok", - "fusioninspector/test/chckpts_dir/fusion_annotator.ok", - "fusioninspector/test/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/test/chckpts_dir/fusion_contigs.ok", - "fusioninspector/test/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/test/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/index_consol_bam.ok", - "fusioninspector/test/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/test/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/test/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/test/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/test/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/test/chckpts_dir/microH.dat.ok", - "fusioninspector/test/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/test/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/test/chckpts_dir/run_STAR.ok", - "fusioninspector/test/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/test/chckpts_dir/span_reads_acc.ok", - "fusioninspector/test/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/test/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/test/chckpts_dir/test.bed.tabix.ok", "fusioninspector/test/fi_workdir", - "fusioninspector/test/fi_workdir/Log.final.out", - "fusioninspector/test/fi_workdir/Log.out", - "fusioninspector/test/fi_workdir/Log.progress.out", - "fusioninspector/test/fi_workdir/SJ.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome", - "fusioninspector/test/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/test/fi_workdir/microH.dat", - "fusioninspector/test/fi_workdir/pipeliner.456.cmds", - "fusioninspector/test/fi_workdir/star_align.ok", - "fusioninspector/test/fi_workdir/test.fa", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", "fusioninspector/test/fi_workdir/test.gtf", - "fusioninspector/test/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/test/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.ok", "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test/test.FusionInspector.fusions.tsv", "fusioninspector/test/test.fusion_inspector_web.html", @@ -2185,6 +1965,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:15:49.690844884" + "timestamp": "2025-08-18T16:02:59.744224309" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 439a583a4..762751f28 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -37,14 +37,14 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, "STAR-Fusion": "1.15.1" }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", "samtools": 1.21, @@ -191,7 +191,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:34:21.840598583" + "timestamp": "2025-08-18T15:54:01.219397324" }, "stub test stringtie": { "content": [ @@ -450,7 +450,7 @@ "fastqc": "0.12.1" }, "FUSIONINSPECTOR": { - "STAR-Fusion": null + "FusionInspector": "2.10.0" }, "FUSIONREPORT_DETECT": { "fusion_report": "4.0.1" @@ -522,119 +522,9 @@ "fusioninspector/test", "fusioninspector/test/FusionInspector.log", "fusioninspector/test/IGV_inputs", - "fusioninspector/test/IGV_inputs/TrinityFusion.bed", - "fusioninspector/test/IGV_inputs/cytoBand.txt", - "fusioninspector/test/IGV_inputs/test.ROI.bed", - "fusioninspector/test/IGV_inputs/test.bed", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/test/IGV_inputs/test.consolidated.bam", - "fusioninspector/test/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/test/IGV_inputs/test.fa", - "fusioninspector/test/IGV_inputs/test.fa.fai", - "fusioninspector/test/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/test/IGV_inputs/test.gtf", - "fusioninspector/test/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/test/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/test/IGV_inputs/tracks.json", "fusioninspector/test/chckpts_dir", - "fusioninspector/test/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/add_FFPM.ok", - "fusioninspector/test/chckpts_dir/add_splice_info.ok", - "fusioninspector/test/chckpts_dir/append_microH_info.ok", - "fusioninspector/test/chckpts_dir/blast_filter.ok", - "fusioninspector/test/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/test/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/test/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/test/chckpts_dir/cp_final.ok", - "fusioninspector/test/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/test/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/test/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/test/chckpts_dir/cytoband.ok", - "fusioninspector/test/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/test/chckpts_dir/final.abridged.ok", - "fusioninspector/test/chckpts_dir/fusion_annotator.ok", - "fusioninspector/test/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/test/chckpts_dir/fusion_contigs.ok", - "fusioninspector/test/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/test/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/index_consol_bam.ok", - "fusioninspector/test/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/test/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/test/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/test/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/test/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/test/chckpts_dir/microH.dat.ok", - "fusioninspector/test/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/test/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/test/chckpts_dir/run_STAR.ok", - "fusioninspector/test/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/test/chckpts_dir/span_reads_acc.ok", - "fusioninspector/test/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/test/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/test/chckpts_dir/test.bed.tabix.ok", "fusioninspector/test/fi_workdir", - "fusioninspector/test/fi_workdir/Log.final.out", - "fusioninspector/test/fi_workdir/Log.out", - "fusioninspector/test/fi_workdir/Log.progress.out", - "fusioninspector/test/fi_workdir/SJ.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome", - "fusioninspector/test/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/test/fi_workdir/microH.dat", - "fusioninspector/test/fi_workdir/pipeliner.456.cmds", - "fusioninspector/test/fi_workdir/star_align.ok", - "fusioninspector/test/fi_workdir/test.fa", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", "fusioninspector/test/fi_workdir/test.gtf", - "fusioninspector/test/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/test/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.ok", "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test/test.FusionInspector.fusions.tsv", "fusioninspector/test/test.fusion_inspector_web.html", @@ -785,7 +675,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:38:28.107838971" + "timestamp": "2025-08-18T16:00:15.182860428" }, "stub test salmon": { "content": [ @@ -912,7 +802,7 @@ "bioawk": 1.0 }, "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" + "ctatsplicing": "0.0.2" }, "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" @@ -1112,7 +1002,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:32:37.072437849" + "timestamp": "2025-08-18T15:47:14.034109802" }, "stub test fusionreport": { "content": [ @@ -1164,14 +1054,14 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, "STAR-Fusion": "1.15.1" }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", "samtools": 1.21, @@ -1339,7 +1229,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:36:12.01932932" + "timestamp": "2025-08-18T15:56:39.559031879" }, "stub test fastp": { "content": [ @@ -1551,7 +1441,7 @@ "bioawk": 1.0 }, "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" + "ctatsplicing": "0.0.2" }, "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" @@ -1569,7 +1459,7 @@ "fusioncatcher": "1.33" }, "FUSIONINSPECTOR": { - "STAR-Fusion": null + "FusionInspector": "2.10.0" }, "FUSIONREPORT_DETECT": { "fusion_report": "4.0.1" @@ -1614,14 +1504,14 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, - "STARFUSION": { - "STAR-Fusion": "1.15.0" - }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, "STAR-Fusion": "1.15.1" }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, "STAR_GENOMEGENERATE": { "star": "2.7.11b", "samtools": 1.21, @@ -1684,119 +1574,9 @@ "fusioninspector/test", "fusioninspector/test/FusionInspector.log", "fusioninspector/test/IGV_inputs", - "fusioninspector/test/IGV_inputs/TrinityFusion.bed", - "fusioninspector/test/IGV_inputs/cytoBand.txt", - "fusioninspector/test/IGV_inputs/test.ROI.bed", - "fusioninspector/test/IGV_inputs/test.bed", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz", - "fusioninspector/test/IGV_inputs/test.bed.sorted.bed.gz.tbi", - "fusioninspector/test/IGV_inputs/test.consolidated.bam", - "fusioninspector/test/IGV_inputs/test.consolidated.bam.bai", - "fusioninspector/test/IGV_inputs/test.fa", - "fusioninspector/test/IGV_inputs/test.fa.fai", - "fusioninspector/test/IGV_inputs/test.fusion_inspector_web.json", - "fusioninspector/test/IGV_inputs/test.gtf", - "fusioninspector/test/IGV_inputs/test.igv.Pfam.bed", - "fusioninspector/test/IGV_inputs/test.igv.seqsimilar.bed", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam", - "fusioninspector/test/IGV_inputs/test.junction_reads.bam.bai", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam", - "fusioninspector/test/IGV_inputs/test.spanning_reads.bam.bai", - "fusioninspector/test/IGV_inputs/tracks.json", "fusioninspector/test/chckpts_dir", - "fusioninspector/test/chckpts_dir/EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/add_FFPM.ok", - "fusioninspector/test/chckpts_dir/add_splice_info.ok", - "fusioninspector/test/chckpts_dir/append_microH_info.ok", - "fusioninspector/test/chckpts_dir/blast_filter.ok", - "fusioninspector/test/chckpts_dir/coalesce_junc_n_span.ok", - "fusioninspector/test/chckpts_dir/cp_consol_bam.ok", - "fusioninspector/test/chckpts_dir/cp_contigs_file_workdir", - "fusioninspector/test/chckpts_dir/cp_final.ok", - "fusioninspector/test/chckpts_dir/cp_gtf_file_workdir.ok", - "fusioninspector/test/chckpts_dir/cp_tracks_json.ok", - "fusioninspector/test/chckpts_dir/create_fi_igvjs.ok", - "fusioninspector/test/chckpts_dir/cytoband.ok", - "fusioninspector/test/chckpts_dir/filter_by_frag_threshs.ok", - "fusioninspector/test/chckpts_dir/final.abridged.ok", - "fusioninspector/test/chckpts_dir/fusion_annotator.ok", - "fusioninspector/test/chckpts_dir/fusion_coding_region_effect.ok", - "fusioninspector/test/chckpts_dir/fusion_contigs.ok", - "fusioninspector/test/chckpts_dir/fusion_reports_html.ok", - "fusioninspector/test/chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok", - "fusioninspector/test/chckpts_dir/index_consol_bam.ok", - "fusioninspector/test/chckpts_dir/init_EM_adj_counts.ok", - "fusioninspector/test/chckpts_dir/init_spanning_reads_bam.ok", - "fusioninspector/test/chckpts_dir/mark_dup_reads.ok", - "fusioninspector/test/chckpts_dir/mark_dups_reads.index.ok", - "fusioninspector/test/chckpts_dir/merged_contig_fai.ok", - "fusioninspector/test/chckpts_dir/merged_contig_gtf_to_bed.ok", - "fusioninspector/test/chckpts_dir/microH.dat.ok", - "fusioninspector/test/chckpts_dir/prep_igv_extract_junc_reads.ok", - "fusioninspector/test/chckpts_dir/prep_igv_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_pfam_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_bed.ok", - "fusioninspector/test/chckpts_dir/prep_igv_seqsim_gff3.ok", - "fusioninspector/test/chckpts_dir/prep_spanning_reads.ok", - "fusioninspector/test/chckpts_dir/run_STAR.ok", - "fusioninspector/test/chckpts_dir/samtools_idx_junc_reads_bam.ok", - "fusioninspector/test/chckpts_dir/samtools_index_span_reads_bam.ok", - "fusioninspector/test/chckpts_dir/span_reads_acc.ok", - "fusioninspector/test/chckpts_dir/test.bed.bedsort.ok", - "fusioninspector/test/chckpts_dir/test.bed.bgzip.ok", - "fusioninspector/test/chckpts_dir/test.bed.tabix.ok", "fusioninspector/test/fi_workdir", - "fusioninspector/test/fi_workdir/Log.final.out", - "fusioninspector/test/fi_workdir/Log.out", - "fusioninspector/test/fi_workdir/Log.progress.out", - "fusioninspector/test/fi_workdir/SJ.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome", - "fusioninspector/test/fi_workdir/_STARgenome/exonGeTrInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/exonInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/geneInfo.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbInfo.txt", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/sjdbList.out.tab", - "fusioninspector/test/fi_workdir/_STARgenome/transcriptInfo.tab", - "fusioninspector/test/fi_workdir/microH.dat", - "fusioninspector/test/fi_workdir/pipeliner.456.cmds", - "fusioninspector/test/fi_workdir/star_align.ok", - "fusioninspector/test/fi_workdir/test.fa", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_junction_read_accs", - "fusioninspector/test/fi_workdir/test.fusion_preds.coalesced.summary.fusion_spanning_read_accs", "fusioninspector/test/fi_workdir/test.gtf", - "fusioninspector/test/fi_workdir/test.igv.Pfam.gff3", - "fusioninspector/test/fi_workdir/test.igv.seqsimilar.gff3", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated", - "fusioninspector/test/fi_workdir/test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.bai", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_junction_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_span_reads.sam", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.fusion_spanning_info", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok", - "fusioninspector/test/fi_workdir/test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.bai.ok", - "fusioninspector/test/fi_workdir/test.star.sortedByCoord.out.bam.ok", "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", "fusioninspector/test/test.FusionInspector.fusions.tsv", "fusioninspector/test/test.fusion_inspector_web.html", @@ -1984,6 +1764,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:30:49.983961991" + "timestamp": "2025-08-18T15:39:59.605183405" } } \ No newline at end of file From 75a2cdd3874cddc987b71eeda4d1813c160c1be9 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 18 Aug 2025 17:07:15 +0000 Subject: [PATCH 774/887] fix: make changes to avoid module failure --- .../ctatsplicing/prepgenomelib/main.nf | 82 +------------------ 1 file changed, 3 insertions(+), 79 deletions(-) diff --git a/modules/nf-core/ctatsplicing/prepgenomelib/main.nf b/modules/nf-core/ctatsplicing/prepgenomelib/main.nf index 3a3539822..c87dc8907 100644 --- a/modules/nf-core/ctatsplicing/prepgenomelib/main.nf +++ b/modules/nf-core/ctatsplicing/prepgenomelib/main.nf @@ -1,7 +1,6 @@ process CTATSPLICING_PREPGENOMELIB { tag "$meta.id" label 'process_single' - stageInMode 'copy' container "nf-core/ctatsplicing:0.0.3" @@ -10,7 +9,7 @@ process CTATSPLICING_PREPGENOMELIB { path(cancer_intron_tsv) output: - tuple val(meta), path(genome_lib), emit: reference + tuple val(meta), path(genome_lib, includeInputs:true), emit: reference path "versions.yml" , emit: versions when: @@ -40,85 +39,10 @@ process CTATSPLICING_PREPGENOMELIB { def prefix = task.ext.prefix ?: "${meta.id}" def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ - mkdir -p $genome_lib/ - mkdir -p $genome_lib/ref_genome.fa.star.idx - mkdir -p $genome_lib/__chkpts - mkdir -p $genome_lib/cancer_splicing_lib - touch $genome_lib/ref_genome.fa.star.idx/chrName.txt - touch $genome_lib/ref_genome.fa.star.idx/exonInfo.tab - touch $genome_lib/ref_genome.fa.star.idx/SAindex - touch $genome_lib/ref_genome.fa.star.idx/Genome - touch $genome_lib/ref_genome.fa.star.idx/geneInfo.tab - touch $genome_lib/ref_genome.fa.star.idx/sjdbList.out.tab - touch $genome_lib/ref_genome.fa.star.idx/sjdbInfo.txt - touch $genome_lib/ref_genome.fa.star.idx/transcriptInfo.tab - touch $genome_lib/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab - touch $genome_lib/ref_genome.fa.star.idx/build.ok - touch $genome_lib/ref_genome.fa.star.idx/chrLength.txt - touch $genome_lib/ref_genome.fa.star.idx/Log.out - touch $genome_lib/ref_genome.fa.star.idx/genomeParameters.txt - touch $genome_lib/ref_genome.fa.star.idx/chrStart.txt - touch $genome_lib/ref_genome.fa.star.idx/SA - touch $genome_lib/ref_genome.fa.star.idx/chrNameLength.txt - touch $genome_lib/ref_genome.fa.star.idx/exonGeTrInfo.tab - touch $genome_lib/ref_annot.cds - touch $genome_lib/ref_annot.gtf.gene_spans - touch $genome_lib/pfam_domains.dbm - touch $genome_lib/ref_annot.cdsplus.fa.idx - touch $genome_lib/ref_genome.fa.ndb - touch $genome_lib/ref_genome.fa.nin - touch $genome_lib/ref_genome.fa - touch $genome_lib/ref_annot.prot_info.dbm - echo | gzip > $genome_lib/PFAM.domtblout.dat.gz - touch $genome_lib/trans.blast.align_coords.align_coords.dat - touch $genome_lib/fusion_annot_lib.idx - touch $genome_lib/ref_annot.pep - touch $genome_lib/__chkpts/trans.blast.dat.cp.ok - touch $genome_lib/__chkpts/cp_ref_annot_cdna.ok - touch $genome_lib/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok - touch $genome_lib/__chkpts/annotfiltrule_cp.ok - touch $genome_lib/__chkpts/validate_ctat_genome_lib.ok - touch $genome_lib/__chkpts/cp_pfam_dat.ok - touch $genome_lib/__chkpts/fusion_annot_lib.cp.ok - touch $genome_lib/__chkpts/ref_genome.fa.ok - touch $genome_lib/__chkpts/cp_gene_blast_pairs.ok - touch $genome_lib/__chkpts/mm2_genome_idx.ok - touch $genome_lib/__chkpts/trans.blast.dat.index.ok - touch $genome_lib/__chkpts/ref_genome_fai.ok - touch $genome_lib/__chkpts/index_ref_annot_cdna.ok - touch $genome_lib/__chkpts/ref_annot.gtf.ok - touch $genome_lib/__chkpts/blast_pairs.idx.ok - touch $genome_lib/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok - touch $genome_lib/__chkpts/_prot_info_db.ok - touch $genome_lib/__chkpts/_fusion_annot_lib.idx.ok - touch $genome_lib/__chkpts/index_pfam_hits.ok - touch $genome_lib/__chkpts/makeblastdb.ok - touch $genome_lib/__chkpts/ref_annot.gtf.gene_spans.ok - touch $genome_lib/__chkpts/mm2.splice_bed.ok - touch $genome_lib/__chkpts/ref_annot.gtf.mini.sortu.ok - touch $genome_lib/ref_genome.fa.ntf - touch $genome_lib/ref_genome.fa.nto - touch $genome_lib/ref_annot.gtf - touch $genome_lib/ref_annot.gtf.mm2.splice.bed - touch $genome_lib/ref_genome.fa.mm2 - echo | gzip > $genome_lib/fusion_annot_lib.gz - touch $genome_lib/ref_annot.cdsplus.fa - touch $genome_lib/AnnotFilterRule.pm - echo | gzip > $genome_lib/trans.blast.dat.gz - touch $genome_lib/ref_genome.fa.nhr - touch $genome_lib/blast_pairs.idx - touch $genome_lib/ref_genome.fa.nsq - echo | gzip > $genome_lib/blast_pairs.dat.gz - touch $genome_lib/ref_annot.cdna.fa.idx - touch $genome_lib/ref_genome.fa.not - touch $genome_lib/ref_annot.cdna.fa - touch $genome_lib/ref_annot.gtf.mini.sortu - touch $genome_lib/trans.blast.align_coords.align_coords.dbm - touch $genome_lib/ref_genome.fa.njs - touch $genome_lib/ref_genome.fa.fai touch $genome_lib/refGene.bed echo | gzip > $genome_lib/refGene.sort.bed.gz - echo | gzip > $genome_lib/refGene.sort.bed.gz.tbi + touch $genome_lib/refGene.sort.bed.gz.tbi + mkdir $genome_lib/cancer_splicing_lib touch $genome_lib/cancer_splicing_lib/cancer_splicing.idx cat <<-END_VERSIONS > versions.yml From f7be12e5db2934b89b180bb9e68ce41d504cf497 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Mon, 18 Aug 2025 17:26:06 +0000 Subject: [PATCH 775/887] fix: patch module temporarily until changes are made in nf-core --- modules.json | 6 +- .../ctatsplicing-prepgenomelib.diff | 114 +++++++++++++++++ .../ctatsplicing-startocancerintrons.diff | 120 ++++++++++++++++++ 3 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 modules/nf-core/ctatsplicing/prepgenomelib/ctatsplicing-prepgenomelib.diff create mode 100644 modules/nf-core/ctatsplicing/startocancerintrons/ctatsplicing-startocancerintrons.diff diff --git a/modules.json b/modules.json index a4cd21862..31bc8b665 100644 --- a/modules.json +++ b/modules.json @@ -43,12 +43,14 @@ "ctatsplicing/prepgenomelib": { "branch": "master", "git_sha": "8476d6a2adf7fb2e2f23229344aeabcd94a14b0b", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/ctatsplicing/prepgenomelib/ctatsplicing-prepgenomelib.diff" }, "ctatsplicing/startocancerintrons": { "branch": "master", "git_sha": "8476d6a2adf7fb2e2f23229344aeabcd94a14b0b", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/ctatsplicing/startocancerintrons/ctatsplicing-startocancerintrons.diff" }, "fastp": { "branch": "master", diff --git a/modules/nf-core/ctatsplicing/prepgenomelib/ctatsplicing-prepgenomelib.diff b/modules/nf-core/ctatsplicing/prepgenomelib/ctatsplicing-prepgenomelib.diff new file mode 100644 index 000000000..cfb1ff5f4 --- /dev/null +++ b/modules/nf-core/ctatsplicing/prepgenomelib/ctatsplicing-prepgenomelib.diff @@ -0,0 +1,114 @@ +Changes in component 'nf-core/ctatsplicing/prepgenomelib' +'modules/nf-core/ctatsplicing/prepgenomelib/meta.yml' is unchanged +Changes in 'ctatsplicing/prepgenomelib/main.nf': +--- modules/nf-core/ctatsplicing/prepgenomelib/main.nf ++++ modules/nf-core/ctatsplicing/prepgenomelib/main.nf +@@ -1,7 +1,6 @@ + process CTATSPLICING_PREPGENOMELIB { + tag "$meta.id" + label 'process_single' +- stageInMode 'copy' + + container "nf-core/ctatsplicing:0.0.3" + +@@ -10,7 +9,7 @@ + path(cancer_intron_tsv) + + output: +- tuple val(meta), path(genome_lib), emit: reference ++ tuple val(meta), path(genome_lib, includeInputs:true), emit: reference + path "versions.yml" , emit: versions + + when: +@@ -40,85 +39,10 @@ + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = '0.0.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ +- mkdir -p $genome_lib/ +- mkdir -p $genome_lib/ref_genome.fa.star.idx +- mkdir -p $genome_lib/__chkpts +- mkdir -p $genome_lib/cancer_splicing_lib +- touch $genome_lib/ref_genome.fa.star.idx/chrName.txt +- touch $genome_lib/ref_genome.fa.star.idx/exonInfo.tab +- touch $genome_lib/ref_genome.fa.star.idx/SAindex +- touch $genome_lib/ref_genome.fa.star.idx/Genome +- touch $genome_lib/ref_genome.fa.star.idx/geneInfo.tab +- touch $genome_lib/ref_genome.fa.star.idx/sjdbList.out.tab +- touch $genome_lib/ref_genome.fa.star.idx/sjdbInfo.txt +- touch $genome_lib/ref_genome.fa.star.idx/transcriptInfo.tab +- touch $genome_lib/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab +- touch $genome_lib/ref_genome.fa.star.idx/build.ok +- touch $genome_lib/ref_genome.fa.star.idx/chrLength.txt +- touch $genome_lib/ref_genome.fa.star.idx/Log.out +- touch $genome_lib/ref_genome.fa.star.idx/genomeParameters.txt +- touch $genome_lib/ref_genome.fa.star.idx/chrStart.txt +- touch $genome_lib/ref_genome.fa.star.idx/SA +- touch $genome_lib/ref_genome.fa.star.idx/chrNameLength.txt +- touch $genome_lib/ref_genome.fa.star.idx/exonGeTrInfo.tab +- touch $genome_lib/ref_annot.cds +- touch $genome_lib/ref_annot.gtf.gene_spans +- touch $genome_lib/pfam_domains.dbm +- touch $genome_lib/ref_annot.cdsplus.fa.idx +- touch $genome_lib/ref_genome.fa.ndb +- touch $genome_lib/ref_genome.fa.nin +- touch $genome_lib/ref_genome.fa +- touch $genome_lib/ref_annot.prot_info.dbm +- echo | gzip > $genome_lib/PFAM.domtblout.dat.gz +- touch $genome_lib/trans.blast.align_coords.align_coords.dat +- touch $genome_lib/fusion_annot_lib.idx +- touch $genome_lib/ref_annot.pep +- touch $genome_lib/__chkpts/trans.blast.dat.cp.ok +- touch $genome_lib/__chkpts/cp_ref_annot_cdna.ok +- touch $genome_lib/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok +- touch $genome_lib/__chkpts/annotfiltrule_cp.ok +- touch $genome_lib/__chkpts/validate_ctat_genome_lib.ok +- touch $genome_lib/__chkpts/cp_pfam_dat.ok +- touch $genome_lib/__chkpts/fusion_annot_lib.cp.ok +- touch $genome_lib/__chkpts/ref_genome.fa.ok +- touch $genome_lib/__chkpts/cp_gene_blast_pairs.ok +- touch $genome_lib/__chkpts/mm2_genome_idx.ok +- touch $genome_lib/__chkpts/trans.blast.dat.index.ok +- touch $genome_lib/__chkpts/ref_genome_fai.ok +- touch $genome_lib/__chkpts/index_ref_annot_cdna.ok +- touch $genome_lib/__chkpts/ref_annot.gtf.ok +- touch $genome_lib/__chkpts/blast_pairs.idx.ok +- touch $genome_lib/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok +- touch $genome_lib/__chkpts/_prot_info_db.ok +- touch $genome_lib/__chkpts/_fusion_annot_lib.idx.ok +- touch $genome_lib/__chkpts/index_pfam_hits.ok +- touch $genome_lib/__chkpts/makeblastdb.ok +- touch $genome_lib/__chkpts/ref_annot.gtf.gene_spans.ok +- touch $genome_lib/__chkpts/mm2.splice_bed.ok +- touch $genome_lib/__chkpts/ref_annot.gtf.mini.sortu.ok +- touch $genome_lib/ref_genome.fa.ntf +- touch $genome_lib/ref_genome.fa.nto +- touch $genome_lib/ref_annot.gtf +- touch $genome_lib/ref_annot.gtf.mm2.splice.bed +- touch $genome_lib/ref_genome.fa.mm2 +- echo | gzip > $genome_lib/fusion_annot_lib.gz +- touch $genome_lib/ref_annot.cdsplus.fa +- touch $genome_lib/AnnotFilterRule.pm +- echo | gzip > $genome_lib/trans.blast.dat.gz +- touch $genome_lib/ref_genome.fa.nhr +- touch $genome_lib/blast_pairs.idx +- touch $genome_lib/ref_genome.fa.nsq +- echo | gzip > $genome_lib/blast_pairs.dat.gz +- touch $genome_lib/ref_annot.cdna.fa.idx +- touch $genome_lib/ref_genome.fa.not +- touch $genome_lib/ref_annot.cdna.fa +- touch $genome_lib/ref_annot.gtf.mini.sortu +- touch $genome_lib/trans.blast.align_coords.align_coords.dbm +- touch $genome_lib/ref_genome.fa.njs +- touch $genome_lib/ref_genome.fa.fai + touch $genome_lib/refGene.bed + echo | gzip > $genome_lib/refGene.sort.bed.gz +- echo | gzip > $genome_lib/refGene.sort.bed.gz.tbi ++ touch $genome_lib/refGene.sort.bed.gz.tbi ++ mkdir $genome_lib/cancer_splicing_lib + touch $genome_lib/cancer_splicing_lib/cancer_splicing.idx + + cat <<-END_VERSIONS > versions.yml + +'modules/nf-core/ctatsplicing/prepgenomelib/tests/main.nf.test' is unchanged +'modules/nf-core/ctatsplicing/prepgenomelib/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/ctatsplicing/startocancerintrons/ctatsplicing-startocancerintrons.diff b/modules/nf-core/ctatsplicing/startocancerintrons/ctatsplicing-startocancerintrons.diff new file mode 100644 index 000000000..7ec847711 --- /dev/null +++ b/modules/nf-core/ctatsplicing/startocancerintrons/ctatsplicing-startocancerintrons.diff @@ -0,0 +1,120 @@ +Changes in component 'nf-core/ctatsplicing/startocancerintrons' +'modules/nf-core/ctatsplicing/startocancerintrons/main.nf' is unchanged +Changes in 'ctatsplicing/startocancerintrons/meta.yml': +--- modules/nf-core/ctatsplicing/startocancerintrons/meta.yml ++++ modules/nf-core/ctatsplicing/startocancerintrons/meta.yml +@@ -63,7 +63,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.cancer_intron_reads.sorted.bam': ++ - "*.cancer_intron_reads.sorted.bam": + type: file + description: "Sorted BAM file containing reads mapped to cancer introns" + pattern: "*.cancer_intron_reads.sorted.bam" +@@ -75,7 +75,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.cancer_intron_reads.sorted.bam.bai': ++ - "*.cancer_intron_reads.sorted.bam.bai": + type: file + description: "Index file for the sorted BAM of cancer introns" + pattern: "*.cancer_intron_reads.sorted.bam.bai" +@@ -87,7 +87,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.gene_reads.sorted.sifted.bam': ++ - "*.gene_reads.sorted.sifted.bam": + type: file + description: "Sorted BAM file containing reads mapped to gene regions after downsampling coverage" + pattern: "*.gene_reads.sorted.sifted.bam" +@@ -99,7 +99,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.gene_reads.sorted.sifted.bam.bai': ++ - "*.gene_reads.sorted.sifted.bam.bai": + type: file + description: "Index file for the sorted BAM of gene reads after filtering" + pattern: "*.gene_reads.sorted.sifted.bam.bai" +@@ -111,7 +111,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.cancer.introns': ++ - "*.cancer.introns": + type: file + description: "File containing detected and filtered introns that are found to be enriched in cancer transcriptomes" + pattern: "*.cancer.introns" +@@ -121,7 +121,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.cancer.introns.prelim': ++ - "*.cancer.introns.prelim": + type: file + description: "File containing detected introns that have at least one supporting read and are found to be enriched in cancer transcriptomes" + pattern: "*.cancer.introns.prelim" +@@ -131,7 +131,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*${prefix}.introns': ++ - "*${prefix}.introns": + type: file + description: "File containing all detected introns" + pattern: "*${prefix}.introns" +@@ -141,7 +141,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.introns.for_IGV.bed': ++ - "*.introns.for_IGV.bed": + type: file + description: "Bed file used as input for IGV-report visualization, containing cancer introns" + pattern: "*.introns.for_IGV.bed" +@@ -153,7 +153,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.ctat-splicing.igv.html': ++ - "*.ctat-splicing.igv.html": + type: file + description: "Self-contained IGV-report in HTML format for visualization of cancer introns" + pattern: "*.ctat-splicing.igv.html" +@@ -163,7 +163,7 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.igv.tracks': ++ - "*.igv.tracks": + type: file + description: "IGV tracks file for visualizing cancer introns in IGV" + pattern: "*.igv.tracks" +@@ -173,15 +173,15 @@ + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] +- - '*.chckpts': ++ - "*.chckpts": + type: file + description: "Checkpoint files for CTAT-SPLICING, useful for debugging or resuming interrupted runs" + pattern: "*.chckpts" + versions: + - versions.yml: +- type: file +- description: File containing software versions +- pattern: "versions.yml" ++ type: file ++ description: File containing software versions ++ pattern: "versions.yml" + authors: + - "@anoronh4" + - "@nvnieuwk" + +'modules/nf-core/ctatsplicing/startocancerintrons/tests/main.nf.test' is unchanged +'modules/nf-core/ctatsplicing/startocancerintrons/tests/main.nf.test.snap' is unchanged +'modules/nf-core/ctatsplicing/startocancerintrons/tests/nextflow.config' is unchanged +************************************************************ From ade0511f7fe43375e8738d6c06d5d217e2394439 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 20 Aug 2025 17:08:39 +0200 Subject: [PATCH 776/887] update starfusion detect --- CHANGELOG.md | 2 +- modules.json | 2 +- modules/nf-core/starfusion/detect/main.nf | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 266fe7ceb..12ffb5127 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,7 +90,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update logo [#715](https://github.com/nf-core/rnafusion/pull/715) - Replaced local `STARFUSION_BUILD` for module from nf-core [#709](https://github.com/nf-core/rnafusion/pull/709) - Modified `test_build` profile to use a reduced version of Pfam and Dfam files [#733](https://github.com/nf-core/rnafusion/pull/733) -- Changed local `ARRIBA_VISUALIZATION`, `CTATSPLICING_STARTOCANCERINTRONS`, `CTATSPLICING_PREPGENOMELIB`, `FUSIONINSPECTOR`, `STARFUSION_DETECT` for its nf-core module versions [#XXX](https://github.com/nf-core/rnafusion/pull/XXX) +- Changed local `ARRIBA_VISUALIZATION`, `CTATSPLICING_STARTOCANCERINTRONS`, `CTATSPLICING_PREPGENOMELIB`, `FUSIONINSPECTOR`, `STARFUSION_DETECT` for its nf-core module versions [#740](https://github.com/nf-core/rnafusion/pull/740) ### Fixed diff --git a/modules.json b/modules.json index 31bc8b665..61e76f0a3 100644 --- a/modules.json +++ b/modules.json @@ -169,7 +169,7 @@ }, "starfusion/detect": { "branch": "master", - "git_sha": "310a7a59c7f2362d25070e5928f3139f92377eaf", + "git_sha": "b0f38d0ea7515484442edc96046858924fc477dc", "installed_by": ["modules"] }, "stringtie/merge": { diff --git a/modules/nf-core/starfusion/detect/main.nf b/modules/nf-core/starfusion/detect/main.nf index 5211a3100..acec416a4 100644 --- a/modules/nf-core/starfusion/detect/main.nf +++ b/modules/nf-core/starfusion/detect/main.nf @@ -37,7 +37,9 @@ process STARFUSION_DETECT { mv star-fusion.fusion_predictions.tsv ${prefix}.fusion_predictions.tsv mv star-fusion.fusion_predictions.abridged.tsv ${prefix}.abridged.tsv - mv star-fusion.fusion_predictions.abridged.coding_effect.tsv ${prefix}.abridged.coding_effect.tsv + if [ -f star-fusion.fusion_predictions.abridged.coding_effect.tsv ]; then + mv star-fusion.fusion_predictions.abridged.coding_effect.tsv ${prefix}.abridged.coding_effect.tsv + fi cat <<-END_VERSIONS > versions.yml "${task.process}": From 5747e6e50f165043aaac76249bfa495f5876df95 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 20 Aug 2025 19:10:15 +0000 Subject: [PATCH 777/887] fix: detect `transcript_type` in gtf --- conf/modules.config | 3 +-- conf/test_build.config | 3 ++- tests/test_build.nf.test.snap | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ef6741548..8e0ba6060 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -43,8 +43,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.prefix = { "${meta.id}_rrna.gtf" } - // Should we also have \$9 ~ /transcript_type "rRNA"/ as part of the filtering? See 's3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46.gtf' structure. - ext.args = """-c gff '\$9 ~ /transcript_biotype "rRNA"/ || \$9 ~ /transcript_biotype "Mt_rRNA"/ || \$9 ~ /transcript_biotype "rRNA_pseudogene"/'""" + ext.args = """-c gff '\$9 ~ /transcript_biotype "rRNA"/ || \$9 ~ /transcript_type "rRNA"/ || \$9 ~ /transcript_type "Mt_rRNA"/ || \$9 ~ /transcript_type "rRNA_pseudogene"/ || \$9 ~ /transcript_biotype "Mt_rRNA"/ || \$9 ~ /transcript_biotype "rRNA_pseudogene"/'""" } withName: 'CTATSPLICING_STARTOCANCERINTRONS' { diff --git a/conf/test_build.config b/conf/test_build.config index 8fbb75ba5..c1a7a9251 100644 --- a/conf/test_build.config +++ b/conf/test_build.config @@ -13,7 +13,8 @@ This test is designed to test the `build_references` subworkflow with the follow - SAMTOOLS_FAIDX - HGNC_DOWNLOAD - GATK4_CREATESEQUENCEDICTIONARY -- GET_RRNA_TRANSCRIPTS +- BIOAWK +- AGAT_CONVERTGFF2BED - GATK4_BEDTOINTERVALLIST - GTF_TO_REFFLAT - GFFREAD diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 74ceef667..689fb5f67 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -191,13 +191,13 @@ "references/GRCh38/hgnc/hgnc_complete_set.txt" ], [ - "minigenome.gtf.bed:md5,d41d8cd98f00b204e9800998ecf8427e", - "minigenome.gtf_rrna.gtf.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "minigenome.gtf.bed:md5,4c881266e0a1b1a41815d05a8055aa40", + "minigenome.gtf_rrna.gtf.gz:md5,fb03ec66f68bc4becc71c299ed38b62d", "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", - "minigenome.gtf.interval_list:md5,9111fe876b17e5c18314206e9f985b8c", + "minigenome.gtf.interval_list:md5,6496748a0994cb8a9764761ae74f8004", "minigenome.gtf.refflat:md5,ed76bc063c98087f1100a928923758c7", "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", "ctg_offsets.bin:md5,174ead59c00c5264300d3ff1de673074", @@ -285,6 +285,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T13:58:42.038319834" + "timestamp": "2025-08-20T19:03:37.62529837" } } \ No newline at end of file From b3cd9a9b63ccd4859fc5f65313e9327b1aba0fce Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Wed, 20 Aug 2025 19:12:20 +0000 Subject: [PATCH 778/887] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 266fe7ceb..ff8b2e3ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -114,6 +114,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix CTAT-SPLICING output when no cancer introns were found [#722](https://github.com/nf-core/rnafusion/pull/722) - Update VCF_COLLECT script to adapt to transcript_version not being an entry in fusioninspector gtf anymore [#726](https://github.com/nf-core/rnafusion/pull/726) - Fix rRNA detection and make it more customizable with nf-core modules [#736](https://github.com/nf-core/rnafusion/pull/736) +- Fix rRNA detection in GTF using `transcript_type` [#749](https://github.com/nf-core/rnafusion/pull/749) ### Removed From 342d4fa64c94e912032acd93d5dedd43f1b82031 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 21 Aug 2025 11:27:43 +0200 Subject: [PATCH 779/887] add arriba fusion back to fusioninspector input --- workflows/rnafusion.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index beccf1c93..06a5dd26c 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -240,7 +240,7 @@ workflow RNAFUSION { BUILD_REFERENCES.out.arriba_ref_cytobands, BUILD_REFERENCES.out.arriba_ref_protein_domains ) - + ch_arriba_fusions = ARRIBA_ARRIBA.out.fusions ch_versions = ch_versions.mix(ARRIBA_ARRIBA.out.versions) } } From 006b5cd844e1de1b99368b1176c9468952eda108 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 21 Aug 2025 12:50:05 +0200 Subject: [PATCH 780/887] fix null params issues --- subworkflows/local/build_references/main.nf | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index d71369070..a7e9e859a 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -234,7 +234,17 @@ workflow BUILD_REFERENCES { ======================================================================================== */ +// +// A function to test if a file exists and is not empty. +// Input: A string that represents a file path +// Output: A boolean +// def exists_not_empty(path) { + // Return false for invalid values + if(!path) { + return false + } + def path_to_check = file(path as String) // Return false if the path does not exist if(!path_to_check.exists()) { From 19887f6b87d492d5e08be46bd833d0d7d468ce1f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:02:57 +0200 Subject: [PATCH 781/887] Update docs/usage.md Co-authored-by: Anabella Trigila <18577080+atrigila@users.noreply.github.com> --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 8d3ca0d3f..d05e4f6f9 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -145,7 +145,7 @@ TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,forward | `sample` | Custom sample name. This value needs to be unique across all entries in the samplesheet and cannot contain spaces | ✅ | | `strandedness` | Strandedness: forward or reverse. | ✅ | | `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | ❓ | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq. It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`.gz". | ❓ | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`". | ❓ | | `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | ❓ | | `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | ❌ | | `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | ❓ | From 5a38668aff4440ea787f92f7d2632f23f9e0c832 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:26:01 +0000 Subject: [PATCH 782/887] refact: replace local `trim_workflow` for nf-core subworkflow with same functionality --- .vscode/settings.json | 3 +- modules.json | 14 +- .../nf-core/umitools/extract/environment.yml | 7 + modules/nf-core/umitools/extract/main.nf | 74 + modules/nf-core/umitools/extract/meta.yml | 64 + .../umitools/extract/tests/main.nf.test | 106 + .../umitools/extract/tests/main.nf.test.snap | 167 ++ .../umitools/extract/tests/nextflow.config | 9 + subworkflows/local/trim_workflow/main.nf | 40 - .../local/trim_workflow/tests/main.nf.test | 110 - .../trim_workflow/tests/main.nf.test.snap | 138 - .../fastq_fastqc_umitools_fastp/main.nf | 153 ++ .../fastq_fastqc_umitools_fastp/meta.yml | 129 + .../tests/main.nf.test | 996 +++++++ .../tests/main.nf.test.snap | 2407 +++++++++++++++++ .../tests/nextflow.config | 16 + tests/test_build.nf.test.snap | 2 +- tests/test_stub.nf.test.snap | 54 +- tests/test_stub_bam.nf.test | 1 - tests/test_stub_bam.nf.test.snap | 50 +- workflows/rnafusion.nf | 68 +- 21 files changed, 4229 insertions(+), 379 deletions(-) create mode 100644 modules/nf-core/umitools/extract/environment.yml create mode 100644 modules/nf-core/umitools/extract/main.nf create mode 100644 modules/nf-core/umitools/extract/meta.yml create mode 100644 modules/nf-core/umitools/extract/tests/main.nf.test create mode 100644 modules/nf-core/umitools/extract/tests/main.nf.test.snap create mode 100644 modules/nf-core/umitools/extract/tests/nextflow.config delete mode 100644 subworkflows/local/trim_workflow/main.nf delete mode 100644 subworkflows/local/trim_workflow/tests/main.nf.test delete mode 100644 subworkflows/local/trim_workflow/tests/main.nf.test.snap create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config diff --git a/.vscode/settings.json b/.vscode/settings.json index a33b527cc..af2d783fa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "markdown.styles": ["public/vscode_markdown.css"] + "markdown.styles": ["public/vscode_markdown.css"], + "nextflow.telemetry.enabled": false } diff --git a/modules.json b/modules.json index 61e76f0a3..c7c9e6d86 100644 --- a/modules.json +++ b/modules.json @@ -55,12 +55,12 @@ "fastp": { "branch": "master", "git_sha": "d082103d7976a2804f21225446cc110cbd822f4c", - "installed_by": ["modules"] + "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "fastqc": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "fusioncatcher/fusioncatcher": { "branch": "master", @@ -186,11 +186,21 @@ "branch": "master", "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] + }, + "umitools/extract": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["fastq_fastqc_umitools_fastp"] } } }, "subworkflows": { "nf-core": { + "fastq_fastqc_umitools_fastp": { + "branch": "master", + "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", + "installed_by": ["subworkflows"] + }, "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", diff --git a/modules/nf-core/umitools/extract/environment.yml b/modules/nf-core/umitools/extract/environment.yml new file mode 100644 index 000000000..e5721f1e7 --- /dev/null +++ b/modules/nf-core/umitools/extract/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::umi_tools=1.1.5 diff --git a/modules/nf-core/umitools/extract/main.nf b/modules/nf-core/umitools/extract/main.nf new file mode 100644 index 000000000..b97900e09 --- /dev/null +++ b/modules/nf-core/umitools/extract/main.nf @@ -0,0 +1,74 @@ +process UMITOOLS_EXTRACT { + tag "$meta.id" + label "process_single" + label "process_long" + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/umi_tools:1.1.5--py39hf95cd2a_0' : + 'biocontainers/umi_tools:1.1.5--py39hf95cd2a_0' }" + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.fastq.gz"), emit: reads + tuple val(meta), path("*.log") , emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + if (meta.single_end) { + """ + umi_tools \\ + extract \\ + -I $reads \\ + -S ${prefix}.umi_extract.fastq.gz \\ + $args \\ + > ${prefix}.umi_extract.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) + END_VERSIONS + """ + } else { + """ + umi_tools \\ + extract \\ + -I ${reads[0]} \\ + --read2-in=${reads[1]} \\ + -S ${prefix}.umi_extract_1.fastq.gz \\ + --read2-out=${prefix}.umi_extract_2.fastq.gz \\ + $args \\ + > ${prefix}.umi_extract.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) + END_VERSIONS + """ + } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if (meta.single_end) { + output_command = "echo '' | gzip > ${prefix}.umi_extract.fastq.gz" + } else { + output_command = "echo '' | gzip > ${prefix}.umi_extract_1.fastq.gz ;" + output_command += "echo '' | gzip > ${prefix}.umi_extract_2.fastq.gz" + } + """ + touch ${prefix}.umi_extract.log + ${output_command} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/umitools/extract/meta.yml b/modules/nf-core/umitools/extract/meta.yml new file mode 100644 index 000000000..19a7fa644 --- /dev/null +++ b/modules/nf-core/umitools/extract/meta.yml @@ -0,0 +1,64 @@ +name: umitools_extract +description: Extracts UMI barcode from a read and add it to the read name, leaving + any sample barcode in place +keywords: + - UMI + - barcode + - extract + - umitools +tools: + - umi_tools: + description: > + UMI-tools contains tools for dealing with Unique Molecular Identifiers (UMIs)/Random + Molecular Tags (RMTs) and single cell RNA-Seq cell barcodes + documentation: https://umi-tools.readthedocs.io/en/latest/ + license: "MIT" + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: list + description: | + List of input FASTQ files whose UMIs will be extracted. +output: + reads: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fastq.gz": + type: file + description: > + Extracted FASTQ files. | For single-end reads, pattern is \${prefix}.umi_extract.fastq.gz. + | For paired-end reads, pattern is \${prefix}.umi_extract_{1,2}.fastq.gz. + pattern: "*.{fastq.gz}" + ontologies: [] + log: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: Logfile for umi_tools + pattern: "*.{log}" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML +authors: + - "@drpatelh" + - "@grst" +maintainers: + - "@drpatelh" + - "@grst" diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test b/modules/nf-core/umitools/extract/tests/main.nf.test new file mode 100644 index 000000000..bb8a06582 --- /dev/null +++ b/modules/nf-core/umitools/extract/tests/main.nf.test @@ -0,0 +1,106 @@ +nextflow_process { + + name "Test Process UMITOOLS_EXTRACT" + script "../main.nf" + process "UMITOOLS_EXTRACT" + config "./nextflow.config" + tag "modules_nfcore" + tag "modules" + tag "umitools" + tag "umitools/extract" + + test("single end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.reads.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + } + + test("single end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("pair end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.reads[0][1][0]).name, + file(process.out.reads[0][1][1]).name, + process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + } + + test("pair end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test.snap b/modules/nf-core/umitools/extract/tests/main.nf.test.snap new file mode 100644 index 000000000..b1159054b --- /dev/null +++ b/modules/nf-core/umitools/extract/tests/main.nf.test.snap @@ -0,0 +1,167 @@ +{ + "pair end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:05:20.008312" + }, + "single end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:04:12.145999" + }, + "pair end": { + "content": [ + "test.umi_extract_1.fastq.gz", + "test.umi_extract_2.fastq.gz", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log" + ] + ], + [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:21:09.578031" + }, + "single end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log" + ] + ], + [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:03:52.464606" + } +} \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/tests/nextflow.config b/modules/nf-core/umitools/extract/tests/nextflow.config new file mode 100644 index 000000000..c866f5a00 --- /dev/null +++ b/modules/nf-core/umitools/extract/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: UMITOOLS_EXTRACT { + ext.args = '--bc-pattern="NNNN"' + } + +} diff --git a/subworkflows/local/trim_workflow/main.nf b/subworkflows/local/trim_workflow/main.nf deleted file mode 100644 index ec7b6199e..000000000 --- a/subworkflows/local/trim_workflow/main.nf +++ /dev/null @@ -1,40 +0,0 @@ - - -include { FASTP } from '../../../modules/nf-core/fastp/main' -include { FASTQC as FASTQC_FOR_FASTP } from '../../../modules/nf-core/fastqc/main' - -workflow TRIM_WORKFLOW { - - take: - reads // channel [ meta, [ fastq files ] ] - adapter_fasta // channel [ path ] - skip_qc // boolean - - main: - ch_versions = Channel.empty() - ch_fastp_html = Channel.empty() - ch_fastp_json = Channel.empty() - ch_fastqc_trimmed = Channel.empty() - - FASTP(reads, adapter_fasta, false, false, false) - ch_versions = ch_versions.mix(FASTP.out.versions) - - if(!skip_qc) { - FASTQC_FOR_FASTP(FASTP.out.reads) - ch_versions = ch_versions.mix(FASTQC_FOR_FASTP.out.versions) - ch_fastqc_trimmed = FASTQC_FOR_FASTP.out.zip - } - - ch_reads_all = FASTP.out.reads - ch_reads_fusioncatcher = ch_reads_all - ch_fastp_html = FASTP.out.html - ch_fastp_json = FASTP.out.json - - emit: - ch_reads_all // Channel [ meta, [reads] ] - ch_reads_fusioncatcher // Channel [ meta, [reads] ] - ch_fastp_html // Channel [ meta, path_html ] - ch_fastp_json // Channel [ meta, path_json ] - ch_fastqc_trimmed // Channel [ meta, path_zip ] - versions = ch_versions // Channel [ versions ] - } diff --git a/subworkflows/local/trim_workflow/tests/main.nf.test b/subworkflows/local/trim_workflow/tests/main.nf.test deleted file mode 100644 index 3151ebb2b..000000000 --- a/subworkflows/local/trim_workflow/tests/main.nf.test +++ /dev/null @@ -1,110 +0,0 @@ -nextflow_workflow { - - name "Test Subworkflow QC_WORKFLOW" - script "../main.nf" - workflow "TRIM_WORKFLOW" - tag "qc" - tag "subworkflow" - tag "fastqc" - tag "fastp" - - test("TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp - skip_qc == true") { - - when { - - workflow { - """ - // ch_reads - input[0] = Channel.of( - [ - [id: "test_fastq"], - [ - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz", checkIfExists: true) - ] - ]) - input[1] = Channel.empty() - input[2] = true - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot( - workflow.out.ch_reads_all, - workflow.out.ch_fastp_json, - workflow.out.versions - ).match() }, - ) - } - } - - test("TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp - skip_qc == true + fastp_adaptors") { - - when { - - workflow { - """ - // ch_reads - input[0] = Channel.of( - [ - [id: "test_fastq"], - [ - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz", checkIfExists: true) - ] - ]) - input[1] = Channel.fromPath('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/delete_me/fastp/adapters.fasta', checkIfExists: true) - input[2] = true - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot( - workflow.out.ch_reads_all, - workflow.out.ch_fastp_json, - workflow.out.versions - ).match() } - ) - } - } - - test("TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp skip_qc== false") { - - when { - - workflow { - """ - // ch_reads - input[0] = Channel.of( - [ - [id: "test_fastq"], - [ - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz", checkIfExists: true) - ] - ]) - input[1] = Channel.empty() - input[2] = false - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot( - workflow.out.ch_reads_all, - workflow.out.ch_fastp_json, - workflow.out.versions - ).match() } - ) - } - } - -} diff --git a/subworkflows/local/trim_workflow/tests/main.nf.test.snap b/subworkflows/local/trim_workflow/tests/main.nf.test.snap deleted file mode 100644 index 829c57265..000000000 --- a/subworkflows/local/trim_workflow/tests/main.nf.test.snap +++ /dev/null @@ -1,138 +0,0 @@ -{ - "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp - skip_qc == true + fastp_adaptors": { - "content": [ - [ - [ - { - "id": "test_fastq" - }, - [ - "test_fastq_1.fastp.fastq.gz:md5,adc67a7b4d0bf3520866d7599a4ba814", - "test_fastq_2.fastp.fastq.gz:md5,9ee7d6c5230442970997477464255e67" - ] - ] - ], - [ - [ - { - "id": "test_fastq" - }, - "test_fastq.fastp.json:md5,38711d953a615ef8d88edceaa518d2ac" - ] - ], - [ - "versions.yml:md5,bc4adfa947f4bf5a3558bcf09213841c" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-14T17:07:52.648611" - }, - "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == true": { - "content": [ - [ - "versions.yml:md5,16187796d989b6260f572247e7dc0fc6", - "versions.yml:md5,ea42abe9875f41f8362a55ee7533f102" - ], - [ - "test_fastq_1.fastp.fastq.gz:md5,0c436583301dea48755a5252a2675b64", - "test_fastq_2.fastp.fastq.gz:md5,f7f38138255e63b33286b819b6177612" - ], - [ - "test_fastq_1.fastp.fastq.gz:md5,0c436583301dea48755a5252a2675b64", - "test_fastq_2.fastp.fastq.gz:md5,f7f38138255e63b33286b819b6177612" - ], - "test_fastq.fastp.html", - "test_fastq.fastp.json:md5,62066ad48c3d5981045cdd43e354cb2b", - [ - "test_fastq_trimmed_1_fastqc.zip", - "test_fastq_trimmed_2_fastqc.zip" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-05T16:21:52.926289296" - }, - "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp skip_qc== false": { - "content": [ - [ - - ], - [ - - ], - [ - - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-14T16:43:42.01598" - }, - "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp - skip_qc == true": { - "content": [ - [ - - ], - [ - - ], - [ - - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-14T17:02:48.598962" - }, - "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == false": { - "content": [ - [ - - ], - [ - - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-14T16:22:58.668715" - }, - "TRIM_WORKFLOW - Homo sapiens - FASTQs - fastp == true + fasp_adaptors": { - "content": [ - [ - "versions.yml:md5,16187796d989b6260f572247e7dc0fc6", - "versions.yml:md5,ea42abe9875f41f8362a55ee7533f102" - ], - [ - "test_fastq_1.fastp.fastq.gz:md5,adc67a7b4d0bf3520866d7599a4ba814", - "test_fastq_2.fastp.fastq.gz:md5,9ee7d6c5230442970997477464255e67" - ], - [ - "test_fastq_1.fastp.fastq.gz:md5,adc67a7b4d0bf3520866d7599a4ba814", - "test_fastq_2.fastp.fastq.gz:md5,9ee7d6c5230442970997477464255e67" - ], - "test_fastq.fastp.html", - "test_fastq.fastp.json:md5,feb3483311bfa4ded60146f1cbc13fd5", - [ - "test_fastq_trimmed_1_fastqc.zip", - "test_fastq_trimmed_2_fastqc.zip" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-05T16:22:26.29488483" - } -} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf new file mode 100644 index 000000000..170ce78c3 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf @@ -0,0 +1,153 @@ +// +// Read QC, UMI extraction and trimming +// +include { FASTQC as FASTQC_RAW } from '../../../modules/nf-core/fastqc/main' +include { FASTQC as FASTQC_TRIM } from '../../../modules/nf-core/fastqc/main' +include { UMITOOLS_EXTRACT } from '../../../modules/nf-core/umitools/extract/main' +include { FASTP } from '../../../modules/nf-core/fastp/main' + +// +// Function that parses fastp json output file to get total number of reads after trimming +// + +def getFastpReadsAfterFiltering(json_file, min_num_reads) { + + if (workflow.stubRun) { + return min_num_reads + } + + def json = new groovy.json.JsonSlurper().parseText(json_file.text).get('summary') as Map + return json['after_filtering']['total_reads'].toLong() +} + +def getFastpAdapterSequence(json_file) { + // Handle stub runs + if (workflow.stubRun) { + return "" + } + + def json = new groovy.json.JsonSlurper().parseText(json_file.text) as Map + try { + return json['adapter_cutting']['read1_adapter_sequence'] + } + catch (Exception ex) { + return "" + } +} + +workflow FASTQ_FASTQC_UMITOOLS_FASTP { + take: + reads // channel: [ val(meta), [ reads ] ] + skip_fastqc // boolean: true/false + with_umi // boolean: true/false + skip_umi_extract // boolean: true/false + umi_discard_read // integer: 0, 1 or 2 + skip_trimming // boolean: true/false + adapter_fasta // file: adapter.fasta + save_trimmed_fail // boolean: true/false + save_merged // boolean: true/false + min_trimmed_reads // integer: > 0 + + main: + ch_versions = Channel.empty() + fastqc_raw_html = Channel.empty() + fastqc_raw_zip = Channel.empty() + umi_log = Channel.empty() + trim_json = Channel.empty() + trim_html = Channel.empty() + trim_log = Channel.empty() + trim_reads_fail = Channel.empty() + trim_reads_merged = Channel.empty() + fastqc_trim_html = Channel.empty() + fastqc_trim_zip = Channel.empty() + trim_read_count = Channel.empty() + adapter_seq = Channel.empty() + + if (!skip_fastqc) { + FASTQC_RAW( + reads + ) + fastqc_raw_html = FASTQC_RAW.out.html + fastqc_raw_zip = FASTQC_RAW.out.zip + ch_versions = ch_versions.mix(FASTQC_RAW.out.versions.first()) + } + + umi_reads = reads + if (with_umi && !skip_umi_extract) { + UMITOOLS_EXTRACT( + reads + ) + umi_reads = UMITOOLS_EXTRACT.out.reads + umi_log = UMITOOLS_EXTRACT.out.log + ch_versions = ch_versions.mix(UMITOOLS_EXTRACT.out.versions.first()) + + // Discard R1 / R2 if required + if (umi_discard_read in [1, 2]) { + UMITOOLS_EXTRACT.out.reads + .map { meta, _reads -> + meta.single_end ? [meta, _reads] : [meta + [single_end: true], _reads[umi_discard_read % 2]] + } + .set { umi_reads } + } + } + + trim_reads = umi_reads + if (!skip_trimming) { + FASTP( + umi_reads, + adapter_fasta, + false, + save_trimmed_fail, + save_merged, + ) + trim_json = FASTP.out.json + trim_html = FASTP.out.html + trim_log = FASTP.out.log + trim_reads_fail = FASTP.out.reads_fail + trim_reads_merged = FASTP.out.reads_merged + ch_versions = ch_versions.mix(FASTP.out.versions.first()) + + // + // Filter FastQ files based on minimum trimmed read count after adapter trimming + // + FASTP.out.reads.join(trim_json).map { meta, _reads, json -> [meta, _reads, getFastpReadsAfterFiltering(json, min_trimmed_reads.toLong())] }.set { ch_num_trimmed_reads } + + ch_num_trimmed_reads + .filter { _meta, _reads, num_reads -> num_reads >= min_trimmed_reads.toLong() } + .map { meta, _reads, _num_reads -> [meta, _reads] } + .set { trim_reads } + + ch_num_trimmed_reads + .map { meta, _reads, num_reads -> [meta, num_reads] } + .set { trim_read_count } + + trim_json + .map { meta, json -> [meta, getFastpAdapterSequence(json)] } + .set { adapter_seq } + + if (!skip_fastqc) { + FASTQC_TRIM( + trim_reads + ) + fastqc_trim_html = FASTQC_TRIM.out.html + fastqc_trim_zip = FASTQC_TRIM.out.zip + ch_versions = ch_versions.mix(FASTQC_TRIM.out.versions.first()) + } + } + + emit: + reads = trim_reads // channel: [ val(meta), [ reads ] ] + fastqc_raw_html // channel: [ val(meta), [ html ] ] + fastqc_raw_zip // channel: [ val(meta), [ zip ] ] + umi_log // channel: [ val(meta), [ log ] ] + adapter_seq // channel: [ val(meta), [ adapter_seq] ] + trim_json // channel: [ val(meta), [ json ] ] + trim_html // channel: [ val(meta), [ html ] ] + trim_log // channel: [ val(meta), [ log ] ] + trim_reads_fail // channel: [ val(meta), [ fastq.gz ] ] + trim_reads_merged // channel: [ val(meta), [ fastq.gz ] ] + trim_read_count // channel: [ val(meta), val(count) ] + fastqc_trim_html // channel: [ val(meta), [ html ] ] + fastqc_trim_zip // channel: [ val(meta), [ zip ] ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml new file mode 100644 index 000000000..9308fe9ba --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml @@ -0,0 +1,129 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +# yaml-language-server: $schema=yaml-schema.json +name: "fastq_fastqc_umitools_fastp" +description: Read QC, UMI extraction and trimming +keywords: + - fastq + - fastqc + - qc + - UMI + - trimming + - fastp +components: + - fastqc + - umitools/extract + - fastp +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - skip_fastqc: + type: boolean + description: | + Skip fastqc process + - with_umi: + type: boolean + description: | + With or without umi detection + - skip_umi_extract: + type: boolean + description: | + With or without umi extrection + - umi_discard_read: + type: integer + description: | + Discard R1 / R2 if required + - skip_trimming: + type: boolean + description: | + Allows to skip FastP execution + - adapter_fasta: + type: file + description: | + Fasta file of adapter sequences + - save_trimmed_fail: + type: boolean + description: | + Save trimmed fastqs of failed samples + - save_merged: + type: boolean + description: | + Save merged fastqs + - min_trimmed_reads: + type: integer + description: | + Inputs with fewer than this reads will be filtered out of the "reads" output channel +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - reads: + type: file + description: > + Extracted FASTQ files. | For single-end reads, pattern is \${prefix}.umi_extract.fastq.gz. | + For paired-end reads, pattern is \${prefix}.umi_extract_{1,2}.fastq.gz. + pattern: "*.{fastq.gz}" + - fastqc_html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - fastqc_zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - log: + type: file + description: Logfile for umi_tools + pattern: "*.{log}" + - trim_json: + type: file + description: FastP Trimming report + pattern: "*.{fastp.json}" + - trim_html: + type: file + description: FastP Trimming report + pattern: "*.{fastp.html}" + - log: + type: file + description: Logfile FastP + pattern: "*.{fastp.log}" + - trim_reads_fail: + type: file + description: Trimmed fastq files failing QC + pattern: "*.{fastq.gz}" + - trim_reads_merged: + type: file + description: Trimmed and merged fastq files + pattern: "*.{fastq.gz}" + - trim_read_count: + type: integer + description: Number of reads after trimming + - fastqc_trim_html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - fastqc_trim_zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - adapter_seq: + type: string + description: | + Adapter Sequence found in read1 + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@robsyme" +maintainers: + - "@robsyme" diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test new file mode 100644 index 000000000..edf325e6e --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test @@ -0,0 +1,996 @@ +nextflow_workflow { + + name "Test Workflow FASTQ_FASTQC_UMITOOLS_FASTP" + script "../main.nf" + workflow "FASTQ_FASTQC_UMITOOLS_FASTP" + config './nextflow.config' + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_fastqc_umitools_fastp" + tag "fastq_fastqc_umitools_fastp" + tag "fastqc" + tag "umitools/extract" + tag "fastp" + + + test("sarscov2 paired-end [fastq]") { + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] | skip_fastqc") { + + when { + params { + skip_fastqc = true + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert !workflow.out.fastqc_raw_html }, + { assert !workflow.out.fastqc_raw_zip }, + { assert !workflow.out.fastqc_trim_html }, + { assert !workflow.out.fastqc_trim_zip }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] | with_umi") { + + when { + params { + skip_fastqc = false + with_umi = true + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.versions + ).match() + } + ) + } + } + + + test("sarscov2 paired-end [fastq] | skip_umi_extract") { + + when { + params { + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] | umi_discard_read = 2") { + + when { + params { + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 2 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] | skip_trimming") { + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = true + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert !workflow.out.fastqc_trim_html }, + { assert !workflow.out.fastqc_trim_zip }, + { assert !workflow.out.trim_html }, + { assert !workflow.out.trim_log }, + { assert snapshot( + // If we skip trimming then input is output, so not snapshotting + workflow.out.adapter_seq, + workflow.out.reads.get(0).get(0), // Reads meta map + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] | save_trimmed_fail") { + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = true + save_merged = false + min_trimmed_reads = 1 + fastp_args = "-e 30" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] | save_merged") { + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] | min_trimmed_reads = 26") { + // Subworkflow should stop after FASTP which trims down to 25 reads + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 26 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] - stub") { + options '-stub-run' + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] | skip_fastqc - stub") { + options "-stub-run" + + when { + params { + skip_fastqc = true + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] | with_umi - stub") { + options "-stub-run" + + when { + params { + skip_fastqc = false + with_umi = true + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + + test("sarscov2 paired-end [fastq] | skip_umi_extract - stub") { + options "-stub-run" + + when { + params { + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] | umi_discard_read = 2 - stub") { + options "-stub-run" + + when { + params { + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 2 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] | skip_trimming - stub") { + options "-stub-run" + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = true + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.fastqc_raw_html, + workflow.out.fastqc_raw_zip, + workflow.out.fastqc_trim_html, + workflow.out.fastqc_trim_zip, + workflow.out.trim_html, + workflow.out.trim_json, + workflow.out.trim_log, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] | save_trimmed_fail - stub") { + options "-stub-run" + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = true + save_merged = false + min_trimmed_reads = 1 + fastp_args = "-e 30" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] | save_merged - stub") { + options "-stub-run" + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 1 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] | min_trimmed_reads = 26 - stub") { + // Subworkflow should stop after FASTP which trims down to 25 reads + options "-stub-run" + + when { + params { + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 26 + fastp_args = "" + } + workflow { + """ + 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] = params.skip_fastqc + input[2] = params.with_umi + input[3] = params.skip_umi_extract + input[4] = params.umi_discard_read + input[5] = params.skip_trimming + input[6] = params.adapter_fasta + input[7] = params.save_trimmed_fail + input[8] = params.save_merged + input[9] = params.min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap new file mode 100644 index 000000000..47c8b1d55 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap @@ -0,0 +1,2407 @@ +{ + "sarscov2 paired-end [fastq] | skip_umi_extract": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:42:42.262180451" + }, + "sarscov2 paired-end [fastq] | with_umi": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,ba8c6c3a7ce718d9a2c5857e2edf53bc" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,da0403af3eb7d950f209a1e758de2db0" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + 99 + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:42:31.905020586" + }, + "sarscov2 paired-end [fastq] | umi_discard_read = 2 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T14:19:10.965815964" + }, + "sarscov2 paired-end [fastq] | skip_trimming - stub": { + "content": [ + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-12T14:32:15.355312216" + }, + "sarscov2 paired-end [fastq] | skip_trimming": { + "content": [ + [ + + ], + { + "id": "test", + "single_end": false + }, + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-12T14:24:19.774510678" + }, + "sarscov2 paired-end [fastq] | umi_discard_read = 2": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:42:49.469455815" + }, + "sarscov2 paired-end [fastq] | min_trimmed_reads = 26 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 26 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 26 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T14:19:34.087570563" + }, + "sarscov2 paired-end [fastq] | save_trimmed_fail": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,5009a892192f2084c2af69c153d88d6c" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 162 + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:43:06.081852222" + }, + "sarscov2 paired-end [fastq] | skip_fastqc": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:41:40.619624901" + }, + "sarscov2 paired-end [fastq] | save_trimmed_fail - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T14:19:23.614397633" + }, + "sarscov2 paired-end [fastq] | skip_fastqc - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce" + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + + ], + "fastqc_raw_zip": [ + + ], + "fastqc_trim_html": [ + + ], + "fastqc_trim_zip": [ + + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T14:18:50.988594099" + }, + "sarscov2 paired-end [fastq] | save_merged - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T14:19:28.872773752" + }, + "sarscov2 paired-end [fastq] | min_trimmed_reads = 26": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,8f99097bfa04b629891105b8af9c429f" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 75 + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + + ], + [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:43:23.073649509" + }, + "sarscov2 paired-end [fastq]": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:41:35.19441141" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:43:31.664576438" + }, + "sarscov2 paired-end [fastq] | save_merged": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,8f99097bfa04b629891105b8af9c429f" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 75 + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + + ], + [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T13:43:16.218890529" + }, + "sarscov2 paired-end [fastq] | with_umi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": true + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T14:19:00.760820449" + }, + "sarscov2 paired-end [fastq] | skip_umi_extract - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-31T14:19:05.849804123" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config new file mode 100644 index 000000000..428b0d37c --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config @@ -0,0 +1,16 @@ +process { + + withName: UMITOOLS_EXTRACT { + ext.args = '--bc-pattern="NNNN" --bc-pattern2="NNNN"' + } + + withName: UMICOLLAPSE { + ext.prefix = { "${meta.id}.dedup" } + } + + // Make filtering more aggressive to make more reads fail + withName: FASTP { + ext.args = params.fastp_args + } + +} diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 689fb5f67..4bdf1c518 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -285,6 +285,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-20T19:03:37.62529837" + "timestamp": "2025-08-21T16:53:43.678975494" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 759d060d9..8a06326d3 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -9,7 +9,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -218,7 +218,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:11:25.285702343" + "timestamp": "2025-08-21T18:20:40.211602465" }, "stub test stringtie": { "content": [ @@ -230,7 +230,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -364,7 +364,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:20:46.857913005" + "timestamp": "2025-08-21T18:21:21.812203485" }, "stub test arriba": { "content": [ @@ -379,7 +379,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -503,7 +503,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:16:32.896368369" + "timestamp": "2025-08-21T18:15:00.863385937" }, "stub test fusioninspector": { "content": [ @@ -524,7 +524,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "FUSIONINSPECTOR": { @@ -777,7 +777,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:16:11.496999226" + "timestamp": "2025-08-21T18:31:32.043336569" }, "stub test salmon": { "content": [ @@ -789,7 +789,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -872,7 +872,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:22:26.942424142" + "timestamp": "2025-08-21T18:27:42.592742898" }, "stub test ctatsplicing": { "content": [ @@ -890,7 +890,7 @@ "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -1109,7 +1109,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:08:54.904059765" + "timestamp": "2025-08-21T19:00:06.777067929" }, "stub test fusionreport": { "content": [ @@ -1124,7 +1124,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1363,7 +1363,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:13:31.815555556" + "timestamp": "2025-08-21T18:26:22.470758896" }, "stub test fastp": { "content": [ @@ -1378,10 +1378,10 @@ "FASTP": { "fastp": "0.24.0" }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, - "FASTQC_FOR_FASTP": { + "FASTQC_TRIM": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -1417,9 +1417,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", @@ -1443,7 +1440,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:21:51.143010384" + "timestamp": "2025-08-21T18:27:03.13267105" }, "stub test fusioncatcher": { "content": [ @@ -1455,7 +1452,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1515,7 +1512,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:18:29.46107784" + "timestamp": "2025-08-21T18:16:52.604596162" }, "stub test fusioncatcher trim": { "content": [ @@ -1530,7 +1527,7 @@ "FASTP_FOR_FUSIONCATCHER": { "fastp": "0.24.0" }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1596,7 +1593,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:19:01.10521868" + "timestamp": "2025-08-21T18:17:29.899160389" }, "stub test all": { "content": [ @@ -1626,10 +1623,10 @@ "FASTP": { "fastp": "0.24.0" }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, - "FASTQC_FOR_FASTP": { + "FASTQC_TRIM": { "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1748,9 +1745,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", @@ -1965,6 +1959,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:02:59.744224309" + "timestamp": "2025-08-21T17:56:08.906503771" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test b/tests/test_stub_bam.nf.test index 46c06d9df..036540242 100644 --- a/tests/test_stub_bam.nf.test +++ b/tests/test_stub_bam.nf.test @@ -258,7 +258,6 @@ nextflow_pipeline { input = "${projectDir}/tests/yml/bam.yml" no_cosmic = true genomes_base = "${outputDir}/references" - pfam_file = "http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam37.4/Pfam-A.hmm.gz" arriba_ref_protein_domains = "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3" arriba_ref_known_fusions = "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/known_fusions_hg38_GRCh38_v2.5.0.tsv.gz" arriba_ref_blacklist = "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/blacklist_hg38_GRCh38_v2.5.0.tsv.gz" diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 762751f28..944981d1c 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -9,7 +9,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -191,7 +191,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T15:54:01.219397324" + "timestamp": "2025-08-21T18:43:00.825098336" }, "stub test stringtie": { "content": [ @@ -203,7 +203,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -313,7 +313,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:34:57.146117646" + "timestamp": "2025-08-21T18:43:40.299953119" }, "stub test arriba": { "content": [ @@ -328,7 +328,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -425,7 +425,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:31:27.759259528" + "timestamp": "2025-08-21T18:34:38.598054226" }, "stub test fusioninspector": { "content": [ @@ -446,7 +446,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "FUSIONINSPECTOR": { @@ -675,7 +675,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:00:15.182860428" + "timestamp": "2025-08-21T19:08:28.888308012" }, "stub test salmon": { "content": [ @@ -687,7 +687,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -789,7 +789,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:37:16.616916274" + "timestamp": "2025-08-21T18:45:12.252856442" }, "stub test ctatsplicing": { "content": [ @@ -807,7 +807,7 @@ "CTATSPLICING_STARTOCANCERINTRONS": { "ctat-splicing": "0.0.2" }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -1002,7 +1002,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T15:47:14.034109802" + "timestamp": "2025-08-21T18:37:51.326973268" }, "stub test fusionreport": { "content": [ @@ -1017,7 +1017,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1229,7 +1229,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T15:56:39.559031879" + "timestamp": "2025-08-21T19:14:34.336489702" }, "stub test fastp": { "content": [ @@ -1244,10 +1244,10 @@ "FASTP": { "fastp": "0.24.0" }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, - "FASTQC_FOR_FASTP": { + "FASTQC_TRIM": { "fastqc": "0.12.1" }, "GATK4_BEDTOINTERVALLIST": { @@ -1293,9 +1293,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", @@ -1328,7 +1325,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:36:44.624772922" + "timestamp": "2025-08-21T18:44:39.897883035" }, "stub test fusioncatcher": { "content": [ @@ -1340,7 +1337,7 @@ "BIOAWK": { "bioawk": 1.0 }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1419,7 +1416,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:33:11.268038905" + "timestamp": "2025-08-21T18:38:43.272605368" }, "stub test all": { "content": [ @@ -1449,10 +1446,10 @@ "FASTP": { "fastp": "0.24.0" }, - "FASTQC": { + "FASTQC_RAW": { "fastqc": "0.12.1" }, - "FASTQC_FOR_FASTP": { + "FASTQC_TRIM": { "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { @@ -1563,9 +1560,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "fastqc_for_fastp", - "fastqc_for_fastp/test_trimmed.html", - "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", @@ -1764,6 +1758,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T15:39:59.605183405" + "timestamp": "2025-08-21T18:33:36.953695887" } } \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 06a5dd26c..e5d642121 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -6,7 +6,7 @@ include { BUILD_REFERENCES } from '../subworkflows/local/build_references' include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/main' -include { TRIM_WORKFLOW } from '../subworkflows/local/trim_workflow/main' +include { FASTQ_FASTQC_UMITOOLS_FASTP } from '../subworkflows/nf-core/fastq_fastqc_umitools_fastp/main' include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' include { STARFUSION_DETECT } from '../modules/nf-core/starfusion/detect/main' include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow/main' @@ -115,37 +115,49 @@ workflow RNAFUSION { } // - // QC from FASTQ files + // SUBWORKFLOW: Read QC, optional UMI extraction, and trimming (nf-core) // - if(!params.skip_qc) { - FASTQC ( - ch_fastqs_to_process.found, - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions) - } + def ch_reads = Channel.empty() - // - // SUBWORKFLOW: Trimming - // + // adapter_fasta as a channel (or empty if not provided) + def ch_adapter_fasta = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta).collect() : [] + + // control flags mapped to the nf-core subworkflow: disable umi usage in this pipeline + def with_umi = false + def skip_umi_extract = false + def umi_discard_read = 0 + + // if 'fastp' isn't selected, we still run the subworkflow but skip trimming; + def skip_trimming = (!tools.contains("fastp")) + + // optional fastp output controls + minimum reads after trimming + def save_trimmed_fail = params.save_trimmed_fail ?: false + def save_merged = params.save_merged ?: false + def min_trimmed_reads = (params.min_trimmed_reads ?: 1) as Integer + + FASTQ_FASTQC_UMITOOLS_FASTP( + ch_fastqs_to_process.found, // reads: [ val(meta), [fastqs] ] + params.skip_qc, // skip_fastqc + with_umi, // with_umi + skip_umi_extract, // skip_umi_extract + umi_discard_read, // umi_discard_read (0,1,2) + skip_trimming, // skip_trimming + ch_adapter_fasta, // adapter_fasta + save_trimmed_fail, // save_trimmed_fail + save_merged, // save_merged + min_trimmed_reads // min_trimmed_reads + ) - def ch_reads = Channel.empty() - if(tools.contains("fastp")) { - def ch_adapter_fasta = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta).collect() : [] - TRIM_WORKFLOW ( - ch_fastqs_to_process.found, - ch_adapter_fasta, - params.skip_qc - ) - ch_reads = TRIM_WORKFLOW.out.ch_reads_all - ch_versions = ch_versions.mix(TRIM_WORKFLOW.out.versions) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_html.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastp_json.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_fastqc_trimmed.collect{it[1]}) - } else { - ch_reads = ch_fastqs_to_process.found - } + // primary reads for downstream tools + ch_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.reads + ch_versions = ch_versions.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.versions) + + // feed MultiQC with outputs (if not skipped) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip.collect{ it[1] }.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip.collect{ it[1] }.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_html.collect{ it[1] }.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json.collect{ it[1] }.ifEmpty([])) // // MODULE: SALMON_QUANT From 0d0c739bae96ceb265d60882779b672c9af4cc4d Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:41:37 +0000 Subject: [PATCH 783/887] fix: replace for new module names in config --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 8e0ba6060..a55f8d418 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -85,7 +85,7 @@ process { ] } - withName: 'FASTQC' { + withName: 'FASTQC_RAW' { ext.args = '--quiet' publishDir = [ path: { "${params.outdir}/fastqc" }, @@ -94,7 +94,7 @@ process { ] } - withName: 'FASTQC_FOR_FASTP' { + withName: 'FASTQC_TRIM' { ext.args = '--quiet' ext.prefix = { "${meta.id}_trimmed" } publishDir = [ From fcbf9dbb0fd2da0a580e43389e6ac9a3b44594c3 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 21 Aug 2025 22:52:29 +0000 Subject: [PATCH 784/887] test: update snapshot --- tests/test_stub.nf.test.snap | 10 ++++++++-- tests/test_stub_bam.nf.test.snap | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 8a06326d3..dba1ba99c 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1417,6 +1417,9 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", @@ -1440,7 +1443,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:27:03.13267105" + "timestamp": "2025-08-21T22:48:35.622133369" }, "stub test fusioncatcher": { "content": [ @@ -1745,6 +1748,9 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", @@ -1959,6 +1965,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T17:56:08.906503771" + "timestamp": "2025-08-21T22:48:04.457572169" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 944981d1c..6bf0d5266 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -1293,6 +1293,9 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", "gatk4", "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", @@ -1325,7 +1328,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:44:39.897883035" + "timestamp": "2025-08-21T22:51:21.946095021" }, "stub test fusioncatcher": { "content": [ @@ -1560,6 +1563,9 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", "fusioncatcher", "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", @@ -1758,6 +1764,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:33:36.953695887" + "timestamp": "2025-08-21T22:50:42.87458983" } } \ No newline at end of file From 556028273fbec0afbdb79a0aac6f25a15d8e14c7 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:14:35 +0000 Subject: [PATCH 785/887] style: improve ifempty usage --- workflows/rnafusion.nf | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index e5d642121..ac68230e5 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -115,7 +115,7 @@ workflow RNAFUSION { } // - // SUBWORKFLOW: Read QC, optional UMI extraction, and trimming (nf-core) + // SUBWORKFLOW: Read QC and trimming (nf-core) // def ch_reads = Channel.empty() @@ -123,12 +123,12 @@ workflow RNAFUSION { // adapter_fasta as a channel (or empty if not provided) def ch_adapter_fasta = params.adapter_fasta ? Channel.fromPath(params.adapter_fasta).collect() : [] - // control flags mapped to the nf-core subworkflow: disable umi usage in this pipeline + // disable umi usage in this subworkflow for this pipeline def with_umi = false def skip_umi_extract = false def umi_discard_read = 0 - // if 'fastp' isn't selected, we still run the subworkflow but skip trimming; + // if 'fastp' isn't selected, we still run the subworkflow but skip trimming def skip_trimming = (!tools.contains("fastp")) // optional fastp output controls + minimum reads after trimming @@ -149,15 +149,17 @@ workflow RNAFUSION { min_trimmed_reads // min_trimmed_reads ) - // primary reads for downstream tools ch_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.reads ch_versions = ch_versions.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.versions) - // feed MultiQC with outputs (if not skipped) - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip.collect{ it[1] }.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip.collect{ it[1] }.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_html.collect{ it[1] }.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json.collect{ it[1] }.ifEmpty([])) + ch_sbwf_fastp_mqc = Channel.empty() + .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip.map { it[1] }) + .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip.map { it[1] }) + .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_html.map { it[1] }) + .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json.map { it[1] }) + .ifEmpty([]) + + ch_multiqc_files = ch_multiqc_files.mix(ch_sbwf_fastp_mqc) // // MODULE: SALMON_QUANT From 82dbc7cc9cb90fd424119ebb5d81c3e8a2f36d0f Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:15:03 +0000 Subject: [PATCH 786/887] chore: remove unused parameters, add new trim params --- nextflow.config | 7 +++---- nextflow_schema.json | 38 +++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/nextflow.config b/nextflow.config index 48a8badd1..3bea66b33 100644 --- a/nextflow.config +++ b/nextflow.config @@ -40,6 +40,9 @@ params { trim_tail = 0 trim_tail_fusioncatcher = 0 adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 // Compression cram = false @@ -60,10 +63,6 @@ params { skip_vis = false skip_vcf = false - // Download references option - download_refs = false - fusioncatcher_download_link = "1UKFlyqMPVF7HBqfrgS6yoxgHoqfA-wbo" - // Reference options no_cosmic = false ctatsplicing_cancer_introns = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/CANCER_SPLICING_LIB_SUPPLEMENT/cancer_introns.GRCh38.Jun232020.tsv.gz" diff --git a/nextflow_schema.json b/nextflow_schema.json index 3c5cf1498..5b15693b1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -13,15 +13,18 @@ "properties": { "skip_qc": { "type": "boolean", - "description": "Skip QC steps" + "description": "Skip QC steps", + "fa_icon": "fas fa-forward" }, "skip_vcf": { "type": "boolean", - "description": "Skip vcf creation step" + "description": "Skip vcf creation step", + "fa_icon": "fas fa-forward" }, "skip_vis": { "type": "boolean", - "description": "Skip visualisation steps" + "description": "Skip visualisation steps", + "fa_icon": "fas fa-forward" } }, "fa_icon": "fas fa-fast-forward" @@ -135,11 +138,6 @@ "fa_icon": "far fa-file-code", "description": "Path to arriba output" }, - "download_refs": { - "type": "boolean", - "fa_icon": "far fa-file-code", - "description": "Download references instead of building them (for fusioncatcher and starfusion)" - }, "fusioncatcher_fusions": { "type": "string", "format": "file-path", @@ -161,11 +159,6 @@ "fa_icon": "far fa-file-code", "description": "Path to fusioncatcher references" }, - "fusioncatcher_download_link": { - "type": "string", - "description": "Fusioncatcher download link", - "fa_icon": "far fa-file-code" - }, "fusioninspector_limitSjdbInsertNsj": { "type": "integer", "fa_icon": "far fa-file-code", @@ -339,6 +332,19 @@ "pattern": "\\S+\\.f(n|ast)?a$", "description": "Path to adapter fasta file: default: []", "fa_icon": "fas fa-cut" + }, + "save_trimmed_fail": { + "type": "boolean", + "fa_icon": "far fa-times-circle" + }, + "min_trimmed_reads": { + "type": "integer", + "default": 1, + "fa_icon": "fas fa-search-minus" + }, + "save_merged": { + "type": "boolean", + "fa_icon": "fas fa-download" } } }, @@ -429,11 +435,13 @@ }, "dfam_version": { "type": ["number", "null"], - "description": "Version of dfam to use" + "description": "Version of dfam to use", + "fa_icon": "fas fa-code-branch" }, "pfam_version": { "type": ["number", "null"], - "description": "Version of pfam to use" + "description": "Version of pfam to use", + "fa_icon": "fas fa-code-branch" } } }, From cc302d69afcdcce5d09fd38061672d4dce1fc8b2 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:18:41 +0000 Subject: [PATCH 787/887] chore: remove unused file --- adapter_fasta_test | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 adapter_fasta_test diff --git a/adapter_fasta_test b/adapter_fasta_test deleted file mode 100644 index e69de29bb..000000000 From 889c219a96676a57bca5b08074052d4b6abc0307 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:18:49 +0000 Subject: [PATCH 788/887] docs: update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1837f0ef4..c6aac2f82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -91,6 +91,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replaced local `STARFUSION_BUILD` for module from nf-core [#709](https://github.com/nf-core/rnafusion/pull/709) - Modified `test_build` profile to use a reduced version of Pfam and Dfam files [#733](https://github.com/nf-core/rnafusion/pull/733) - Changed local `ARRIBA_VISUALIZATION`, `CTATSPLICING_STARTOCANCERINTRONS`, `CTATSPLICING_PREPGENOMELIB`, `FUSIONINSPECTOR`, `STARFUSION_DETECT` for its nf-core module versions [#740](https://github.com/nf-core/rnafusion/pull/740) +- Replaced local subworkflow `TRIM_WORKFLOW` for its nf-core subworkflow equivalent `FASTQ_FASTQC_UMITOOLS_FASTP` [#752](https://github.com/nf-core/rnafusion/pull/752) ### Fixed @@ -127,6 +128,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed subworkflow with less than two modules: `CTATSPLICING_WORKFLOW` [#704](https://github.com/nf-core/rnafusion/pull/704) - Removed subworkflow with less than two modules: `FUSIONREPORT_WORKFLOW` [#721](https://github.com/nf-core/rnafusion/pull/721) - Removed local module `GET_RRNA_TRANSCRIPTS` [#736](https://github.com/nf-core/rnafusion/pull/736) +- Removed old unused parameters `params.download_refs` and `params.fusioncatcher_download_link` [#752](https://github.com/nf-core/rnafusion/pull/752) ### Parameters @@ -142,6 +144,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | `--all` | `--tools all` | | | `--fusioncatcher_download_link` | | | `--trim_tail_fusioncatcher` | +| | `--save_trimmed_fail` | +| | `--save_merged` | +| | `--min_trimmed_reads` | +| | `--trim_tail_fusioncatcher` | ## v3.0.2 - [2024-04-10] From 6057891f77508e09e01e0b26cf1edebe2aa232ee Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:32:03 +0000 Subject: [PATCH 789/887] chore: remove non-existent test --- nextflow.config | 3 --- 1 file changed, 3 deletions(-) diff --git a/nextflow.config b/nextflow.config index 3bea66b33..ef54ad4e6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -212,9 +212,6 @@ profiles { test_build { includeConfig 'conf/test_build.config' } - test_cosmic { - includeConfig 'conf/test_cosmic.config' - } test_full { includeConfig 'conf/test_full.config' } From 8205a982d82f72a54751dcd9bff538176d9a8887 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 25 Aug 2025 13:34:17 +0200 Subject: [PATCH 790/887] intermetiate snap update --- tests/test_stub_bam.nf.test.snap | 218 +------------------------------ 1 file changed, 6 insertions(+), 212 deletions(-) diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 041d94837..aa50a39e4 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -884,212 +884,22 @@ }, "stub test ctatsplicing": { "content": [ - 16, + 0, { - "CTATSPLICING_PREPGENOMELIB": { - "ctat-splicing": "0.0.2" - }, - "CTATSPLICING_STARTOCANCERINTRONS": { - "ctat-splicing": "0.0.2" - }, - "FASTQC": { - "fastqc": "0.12.1" - }, - "GATK4_BEDTOINTERVALLIST": { - "gatk4": "4.6.1.0" - }, - "GATK4_CREATESEQUENCEDICTIONARY": { - "gatk4": "4.6.1.0" - }, - "GATK4_MARKDUPLICATES": { - "gatk4": "4.6.1.0", - "samtools": 1.21 - }, - "GENCODE_DOWNLOAD": { - "wget": "1.21.4" - }, - "GET_RRNA_TRANSCRIPTS": { - "get_rrna_transcripts": "v1.0" - }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, - "PICARD_COLLECTINSERTSIZEMETRICS": { - "picard": "3.3.0" - }, - "PICARD_COLLECTRNASEQMETRICS": { - "picard": "3.3.0" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "STARFUSION_BUILD": { - "gunzip": 1.12, - "hmmer": 3.4, - "STAR-Fusion": "1.15.1" - }, - "STAR_GENOMEGENERATE": { - "star": "2.7.11b", - "samtools": 1.21, - "gawk": "5.1.0" - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "ctatsplicing", - "ctatsplicing/test.cancer.introns", - "ctatsplicing/test.cancer.introns.prelim", - "ctatsplicing/test.cancer_intron_reads.sorted.bam", - "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", - "ctatsplicing/test.chckpts", - "ctatsplicing/test.ctat-splicing.igv.html", - "ctatsplicing/test.gene_reads.sorted.sifted.bam", - "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", - "ctatsplicing/test.igv.tracks", - "ctatsplicing/test.introns", - "ctatsplicing/test.introns.for_IGV.bed", - "fastqc", - "fastqc/test.html", - "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", - "get", - "get/rrna.bed", - "get/rrna.gtf", - "multiqc", - "multiqc/multiqc_data", - "multiqc/multiqc_plots", - "multiqc/multiqc_report.html", - "picard", - "picard/test.bai", - "picard/test.bam", - "picard/test.bam.metrics", - "picard/test.cram", - "picard/test.cram.crai", - "picard/test.rna_metrics", - "picard/test_collectinsertsize.pdf", - "picard/test_collectinsertsize.txt", "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", - "references", - "references/GRCh38", - "references/GRCh38/gencode_v46", - "references/GRCh38/gencode_v46/gencode", - "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", - "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", - "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", - "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", - "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", - "references/GRCh38/gencode_v46/star", - "references/GRCh38/gencode_v46/star/Genome", - "references/GRCh38/gencode_v46/star/Log.out", - "references/GRCh38/gencode_v46/star/SA", - "references/GRCh38/gencode_v46/star/SAindex", - "references/GRCh38/gencode_v46/star/chrLength.txt", - "references/GRCh38/gencode_v46/star/chrName.txt", - "references/GRCh38/gencode_v46/star/chrNameLength.txt", - "references/GRCh38/gencode_v46/star/chrStart.txt", - "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", - "references/GRCh38/gencode_v46/star/exonInfo.tab", - "references/GRCh38/gencode_v46/star/geneInfo.tab", - "references/GRCh38/gencode_v46/star/genomeParameters.txt", - "references/GRCh38/gencode_v46/star/sjdbInfo.txt", - "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", - "references/GRCh38/gencode_v46/star/sjdbList.out.tab", - "references/GRCh38/gencode_v46/star/transcriptInfo.tab", - "references/GRCh38/gencode_v46/starfusion", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.bed", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", - "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", - "star", - "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai" + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-22T15:07:27.162452256" + "timestamp": "2025-08-08T21:23:14.68337" }, "stub test fusionreport": { "content": [ @@ -1498,17 +1308,11 @@ }, "stub test all": { "content": [ - 33, + 30, { - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.1" - }, "ARRIBA_ARRIBA": { "arriba": "2.5.0" }, - "ARRIBA_VISUALISATION": { - "arriba": "2.5.0" - }, "CTATSPLICING_PREPGENOMELIB": { "ctat-splicing": "0.0.2" }, @@ -1595,22 +1399,14 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, - "VCF_COLLECT": { - "python": "3.11.0", - "vcf_collect": 0.1 - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ - "agat", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "ctatsplicing", "ctatsplicing/test.cancer.introns", "ctatsplicing/test.cancer.introns.prelim", @@ -1937,15 +1733,13 @@ "stringtie/test.ballgown", "stringtie/test.coverage.gtf", "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf", - "vcf", - "vcf/test_fusion_data.vcf" + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-07T13:56:14.46501" + "timestamp": "2025-08-08T14:46:39.887774" } } \ No newline at end of file From 766b0f8819fd5bf300daa6f81a6573d83b7b4dd8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 25 Aug 2025 16:27:16 +0200 Subject: [PATCH 791/887] update snap --- tests/test_stub_bam.nf.test.snap | 192 ++++++++++++++++++++----------- 1 file changed, 124 insertions(+), 68 deletions(-) diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index bebbd6aed..71462b2f1 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -191,7 +191,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T15:54:01.219397324" + "timestamp": "2025-08-25T15:52:40.204999" }, "stub test stringtie": { "content": [ @@ -313,7 +313,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:34:57.146117646" + "timestamp": "2025-08-25T15:54:38.734653" }, "stub test arriba": { "content": [ @@ -425,24 +425,18 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:31:27.759259528" + "timestamp": "2025-08-25T15:31:45.044653" }, "stub test fusioninspector": { "content": [ - 23, + 20, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" }, - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.1" - }, "ARRIBA_ARRIBA": { "arriba": "2.5.0" }, - "ARRIBA_VISUALISATION": { - "arriba": "2.5.0" - }, "BIOAWK": { "bioawk": 1.0 }, @@ -496,10 +490,6 @@ "samtools": 1.21, "gawk": "5.1.0" }, - "VCF_COLLECT": { - "python": "3.11.0", - "vcf_collect": 0.1 - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -507,12 +497,9 @@ [ "agat", "agat/Homo_sapiens.GRCh38.46.gtf.bed", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "bioawk", "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", "fastqc", @@ -666,16 +653,14 @@ "references/GRCh38/hgnc/hgnc_complete_set.txt", "star", "star/test.Aligned.sortedByCoord.out.bam", - "star/test.Aligned.sortedByCoord.out.bam.bai", - "vcf", - "vcf/test_fusion_data.vcf" + "star/test.Aligned.sortedByCoord.out.bam.bai" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:00:15.182860428" + "timestamp": "2025-08-25T16:24:25.434722" }, "stub test salmon": { "content": [ @@ -789,14 +774,10 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:37:16.616916274" + "timestamp": "2025-08-25T16:11:36.786416" }, "stub test ctatsplicing": { "content": [ -<<<<<<< HEAD - 0, - { -======= 17, { "AGAT_CONVERTGFF2BED": { @@ -849,14 +830,11 @@ "samtools": 1.21, "gawk": "5.1.0" }, ->>>>>>> dev "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } }, [ -<<<<<<< HEAD -======= "agat", "agat/Homo_sapiens.GRCh38.46.gtf.bed", "bioawk", @@ -891,20 +869,125 @@ "picard/test.rna_metrics", "picard/test_collectinsertsize.pdf", "picard/test_collectinsertsize.txt", ->>>>>>> dev "pipeline_info", - "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml" + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, -<<<<<<< HEAD - "timestamp": "2025-08-08T21:23:14.68337" -======= - "timestamp": "2025-08-18T15:47:14.034109802" ->>>>>>> dev + "timestamp": "2025-08-25T15:38:56.983178" }, "stub test fusionreport": { "content": [ @@ -1131,7 +1214,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T15:56:39.559031879" + "timestamp": "2025-08-25T16:07:55.701763" }, "stub test fastp": { "content": [ @@ -1230,7 +1313,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:36:44.624772922" + "timestamp": "2025-08-25T16:09:49.404204" }, "stub test fusioncatcher": { "content": [ @@ -1321,35 +1404,21 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-08T11:33:11.268038905" + "timestamp": "2025-08-25T15:40:46.18532" }, "stub test all": { "content": [ -<<<<<<< HEAD - 30, - { - "ARRIBA_ARRIBA": { - "arriba": "2.5.0" - }, -======= - 34, + 31, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" }, - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.1" - }, "ARRIBA_ARRIBA": { "arriba": "2.5.0" }, - "ARRIBA_VISUALISATION": { - "arriba": "2.5.0" - }, "BIOAWK": { "bioawk": 1.0 }, ->>>>>>> dev "CTATSPLICING_PREPGENOMELIB": { "ctatsplicing": "0.0.2" }, @@ -1438,22 +1507,13 @@ } }, [ -<<<<<<< HEAD - "arriba", - "arriba/test.arriba.fusions.discarded.tsv", - "arriba/test.arriba.fusions.tsv", -======= "agat", "agat/Homo_sapiens.GRCh38.46.gtf.bed", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "bioawk", "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", ->>>>>>> dev "ctatsplicing", "ctatsplicing/test.cancer.introns", "ctatsplicing/test.cancer.introns.prelim", @@ -1674,10 +1734,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, -<<<<<<< HEAD - "timestamp": "2025-08-08T14:46:39.887774" -======= - "timestamp": "2025-08-18T15:39:59.605183405" ->>>>>>> dev + "timestamp": "2025-08-25T15:29:52.456432" } } \ No newline at end of file From a2335c2f9179dc67e98d94cbb0014e82f60ce6fe Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Mon, 25 Aug 2025 18:38:33 +0200 Subject: [PATCH 792/887] Add test for fusioninspector subworkflow --- .../main.nf} | 10 +- .../tests/main.nf.test | 192 ++++++++++++++++++ .../tests/nextflow.config | 34 ++++ 3 files changed, 231 insertions(+), 5 deletions(-) rename subworkflows/local/{fusioninspector_workflow.nf => fusioninspector_workflow/main.nf} (91%) create mode 100644 subworkflows/local/fusioninspector_workflow/tests/main.nf.test create mode 100644 subworkflows/local/fusioninspector_workflow/tests/nextflow.config diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow/main.nf similarity index 91% rename from subworkflows/local/fusioninspector_workflow.nf rename to subworkflows/local/fusioninspector_workflow/main.nf index 39ac4144a..ec6e4fafd 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -1,8 +1,8 @@ -include { AGAT_CONVERTSPGFF2TSV } from '../../modules/nf-core/agat/convertspgff2tsv/main' -include { ARRIBA_VISUALISATION } from '../../modules/nf-core/arriba/visualisation/main' -include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' -include { VCF_COLLECT } from '../../modules/local/vcf_collect/main' -include { FUSIONINSPECTOR } from '../../modules/nf-core/fusioninspector/main' +include { AGAT_CONVERTSPGFF2TSV } from '../../../modules/nf-core/agat/convertspgff2tsv/main' +include { ARRIBA_VISUALISATION } from '../../../modules/nf-core/arriba/visualisation/main' +include { CAT_CAT } from '../../../modules/nf-core/cat/cat/main' +include { VCF_COLLECT } from '../../../modules/local/vcf_collect/main' +include { FUSIONINSPECTOR } from '../../../modules/nf-core/fusioninspector/main' workflow FUSIONINSPECTOR_WORKFLOW { take: diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test new file mode 100644 index 000000000..0e3930b83 --- /dev/null +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test @@ -0,0 +1,192 @@ +nextflow_workflow { + + name "Test Workflow FUSIONINSPECTOR_WORKFLOW" + script "../main.nf" + workflow "FUSIONINSPECTOR_WORKFLOW" + config './nextflow.config' + + test("FUSIONINSPECTOR_WORKFLOW - human") { + setup { + run("STARFUSION_BUILD") { + script "../../../../modules/nf-core/starfusion/build/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome_fasta' ], + file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa") + ] + input[1] = [ + [ id:'minigenome_gtf' ], + file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46.gtf") + ] + input[2] = file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/CTAT_HumanFusionLib.mini.dat.gz') + input[3] = "homo_sapiens" + input[3] = "homo_sapiens" + input[4] = "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/Pfam-A.hmm.gz" + input[5] = [ + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3f", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3i", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3m", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3p" + ] + input[6] = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm" + """ + } + } + + run("FUSIONREPORT_DOWNLOAD") { + script "../../../../modules/nf-core/fusionreport/download/main.nf" + process { + """ + """ + } + } + + run("FUSIONREPORT_DETECT") { + script "../../../../modules/nf-core/fusionreport/detect/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_sample' ], // meta map + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/arriba.tsv', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/starfusion.tsv', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/fusioncatcher.txt', checkIfExists: true) + ]) + input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref + input[2] = 1 + """ + } + } + } + + when { + workflow { + """ + input[0] = Channel.of( + [ [ id:'test_sample' ], + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") + ] + ]) + input[1] = FUSIONREPORT_DETECT.out.fusion_list + input[2] = FUSIONREPORT_DETECT.out.fusion_list_filtered + input[3] = FUSIONREPORT_DETECT.out.report + input[4] = FUSIONREPORT_DETECT.out.csv + input[5] = [ [], [], [] ] + input[6] = Channel.of( + [ [ id:'test_gtf' ], + file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46.gtf")]) + input[7] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3")) + input[8] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv")) + input[9] = Channel.of([[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] ) + input[10] = Channel.of([[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] ) + input[11] = STARFUSION_BUILD.out.reference + input[12] = true + input[13] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("FUSIONINSPECTOR_WORKFLOW - human - stub") { + options "-stub" + setup { + run("STARFUSION_BUILD") { + script "../../../../modules/nf-core/starfusion/build/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome_fasta' ], + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.fa') + ] + input[1] = [ + [ id:'minigenome_gtf' ], + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.gtf') + ] + input[2] = file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/CTAT_HumanFusionLib.mini.dat.gz') + input[3] = "homo_sapiens" + input[3] = "homo_sapiens" + input[4] = "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/Pfam-A.hmm.gz" + input[5] = [ + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3f", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3i", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3m", + "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm.h3p" + ] + input[6] = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm" + """ + } + } + + run("FUSIONREPORT_DOWNLOAD") { + script "../../../../modules/nf-core/fusionreport/download/main.nf" + process { + """ + """ + } + } + + run("FUSIONREPORT_DETECT") { + script "../../../../modules/nf-core/fusionreport/detect/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_sample' ], // meta map + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/arriba.tsv', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/starfusion.tsv', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/fusioncatcher.txt', checkIfExists: true) + ]) + input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref + input[2] = 1 + """ + } + } + } + + when { + workflow { + """ + input[0] = Channel.of( + [ [ id:'test_sample' ], + [ + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"), + file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") + ] + ]) + input[1] = FUSIONREPORT_DETECT.out.fusion_list + input[2] = FUSIONREPORT_DETECT.out.fusion_list_filtered + input[3] = FUSIONREPORT_DETECT.out.report + input[4] = FUSIONREPORT_DETECT.out.csv + input[5] = [ [], [], [] ] + input[6] = Channel.of( + [ [ id:'test_gtf' ], + file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46.gtf")]) + input[7] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3")) + input[8] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv")) + input[9] = Channel.of([[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] ) + input[10] = Channel.of([[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] ) + input[11] = STARFUSION_BUILD.out.reference + input[12] = true + input[13] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config new file mode 100644 index 000000000..25a00a186 --- /dev/null +++ b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config @@ -0,0 +1,34 @@ +params { + arriba = true + starfusion = true + fusioncatcher = true + no_cosmic = true + tools_cutoff = 1 + whitelist = null + outdir = "test" + genomes_base = "test" + fusionreport_download_args = '--no-cosmic' + fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : "" + fusionreport_detect_args2 = "--export csv" +} + +process { + withName: 'FUSIONREPORT_DOWNLOAD' { + ext.args = params.fusionreport_download_args + } + + withName: 'FUSIONREPORT_DETECT' { + ext.args = params.fusionreport_detect_args + ext.args2 = params.fusionreport_detect_args2 + } + + withName: 'FUSIONINSPECTOR' { + ext.args = '--annotate --examine_coding_effect' + } + + resourceLimits = [ + cpus: 6, + memory: '36.GB', + time: '4.h' + ] +} From cf5802e4c323176296d1b09d9c9f1f4fa0054aa3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 26 Aug 2025 12:44:19 +0200 Subject: [PATCH 793/887] update snap --- tests/test_stub.nf.test.snap | 42 ++++++------------------------------ 1 file changed, 6 insertions(+), 36 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 759d060d9..70a4596e5 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -507,20 +507,14 @@ }, "stub test fusioninspector": { "content": [ - 24, + 21, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" }, - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.1" - }, "ARRIBA_ARRIBA": { "arriba": "2.5.0" }, - "ARRIBA_VISUALISATION": { - "arriba": "2.5.0" - }, "BIOAWK": { "bioawk": 1.0 }, @@ -582,10 +576,6 @@ "samtools": 1.21, "gawk": "5.1.0" }, - "VCF_COLLECT": { - "python": "3.11.0", - "vcf_collect": 0.1 - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -593,12 +583,9 @@ [ "agat", "agat/Homo_sapiens.GRCh38.46.gtf.bed", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "bioawk", "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", "fastqc", @@ -768,16 +755,14 @@ "star/test.toTranscriptome.out.bam", "star/test.unmapped_1.fastq.gz", "star/test.unmapped_2.fastq.gz", - "star/testXd.out.bam", - "vcf", - "vcf/test_fusion_data.vcf" + "star/testXd.out.bam" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:16:11.496999226" + "timestamp": "2025-08-26T12:27:13.997309" }, "stub test salmon": { "content": [ @@ -1600,20 +1585,14 @@ }, "stub test all": { "content": [ - 35, + 32, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" }, - "AGAT_CONVERTSPGFF2TSV": { - "agat": "v1.4.1" - }, "ARRIBA_ARRIBA": { "arriba": "2.5.0" }, - "ARRIBA_VISUALISATION": { - "arriba": "2.5.0" - }, "BIOAWK": { "bioawk": 1.0 }, @@ -1708,10 +1687,6 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, - "VCF_COLLECT": { - "python": "3.11.0", - "vcf_collect": 0.1 - }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1719,12 +1694,9 @@ [ "agat", "agat/Homo_sapiens.GRCh38.46.gtf.bed", - "agat/test.tsv", "arriba", "arriba/test.arriba.fusions.discarded.tsv", "arriba/test.arriba.fusions.tsv", - "arriba_visualisation", - "arriba_visualisation/test_combined_fusions_arriba_visualisation.pdf", "bioawk", "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", "ctatsplicing", @@ -1956,15 +1928,13 @@ "stringtie/test.ballgown", "stringtie/test.coverage.gtf", "stringtie/test.gene.abundance.txt", - "stringtie/test.transcripts.gtf", - "vcf", - "vcf/test_fusion_data.vcf" + "stringtie/test.transcripts.gtf" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-18T16:02:59.744224309" + "timestamp": "2025-08-25T16:52:54.430967" } } \ No newline at end of file From ace5d0c2283b64b208ef2cbfbf20b6f75dc3a6a4 Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Tue, 26 Aug 2025 20:18:13 +0200 Subject: [PATCH 794/887] Update test --- conf/modules.config | 1 - .../local/fusioninspector_workflow/main.nf | 8 ++- .../tests/main.nf.test | 64 ++++++++++++----- .../tests/main.nf.test.snap | 72 +++++++++++++++++++ .../tests/nextflow.config | 20 ++---- workflows/rnafusion.nf | 4 +- 6 files changed, 132 insertions(+), 37 deletions(-) create mode 100644 subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index 8e0ba6060..548cc1895 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -329,7 +329,6 @@ process { ext.args = "--max_readlength ${params.read_length} --human_gencode_filter" } - withName: 'STRINGTIE_MERGE' { publishDir = [ path: { "${params.outdir}/stringtie/${meta.id}" }, diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index ec6e4fafd..40257fa61 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -20,15 +20,17 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_starfusion_ref skip_vis skip_vcf + tools_cutoff + whitelist main: ch_versions = Channel.empty() ch_arriba_visualisation = Channel.empty() - ch_fusion_list = ( params.tools_cutoff > 1 ? fusion_list_filtered : fusion_list ) + ch_fusion_list = ( tools_cutoff > 1 ? fusion_list_filtered : fusion_list ) - if (params.whitelist) { - ch_whitelist = ch_fusion_list.combine(Channel.value(file(params.whitelist, checkIfExists:true))) + if (whitelist) { + ch_whitelist = ch_fusion_list.combine(Channel.value(file(whitelist, checkIfExists:true))) .map { meta, fusions, whitelist -> [ meta, [fusions, whitelist] ] } CAT_CAT(ch_whitelist) // fusioninspector takes care of possible duplicates diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test index 0e3930b83..4483e8f86 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test @@ -5,7 +5,8 @@ nextflow_workflow { workflow "FUSIONINSPECTOR_WORKFLOW" config './nextflow.config' - test("FUSIONINSPECTOR_WORKFLOW - human") { + test("FUSIONINSPECTOR_WORKFLOW - human") { + setup { run("STARFUSION_BUILD") { script "../../../../modules/nf-core/starfusion/build/main.nf" @@ -13,15 +14,14 @@ nextflow_workflow { """ input[0] = [ [ id:'minigenome_fasta' ], - file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46_dna_primary_assembly.fa") + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.fa') ] input[1] = [ [ id:'minigenome_gtf' ], - file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46.gtf") + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.gtf') ] input[2] = file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/CTAT_HumanFusionLib.mini.dat.gz') input[3] = "homo_sapiens" - input[3] = "homo_sapiens" input[4] = "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/Pfam-A.hmm.gz" input[5] = [ "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm", @@ -61,6 +61,15 @@ nextflow_workflow { } when { + params { + no_cosmic = true + whitelist = [] + outdir = "test" + genomes_base = "test" + fusionreport_download_args = '--no-cosmic' + fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : "" + fusionreport_detect_args2 = "--export csv" + } workflow { """ input[0] = Channel.of( @@ -70,21 +79,27 @@ nextflow_workflow { file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") ] ]) - input[1] = FUSIONREPORT_DETECT.out.fusion_list - input[2] = FUSIONREPORT_DETECT.out.fusion_list_filtered + input[1] = Channel.of([ [id:'test_sample'], file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")]) + input[2] = Channel.of([ [id:'test_sample'], file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")]) input[3] = FUSIONREPORT_DETECT.out.report input[4] = FUSIONREPORT_DETECT.out.csv - input[5] = [ [], [], [] ] + input[5] = Channel.of([ + [id:'test_sample'], + [], + [] + ]) input[6] = Channel.of( [ [ id:'test_gtf' ], - file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46.gtf")]) + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.gtf')]) input[7] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3")) input[8] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv")) input[9] = Channel.of([[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] ) input[10] = Channel.of([[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] ) input[11] = STARFUSION_BUILD.out.reference - input[12] = true - input[13] = false + input[12] = false + input[13] = true + input[14] = 1 + input[15] = params.whitelist """ } } @@ -99,6 +114,7 @@ nextflow_workflow { test("FUSIONINSPECTOR_WORKFLOW - human - stub") { options "-stub" + setup { run("STARFUSION_BUILD") { script "../../../../modules/nf-core/starfusion/build/main.nf" @@ -114,7 +130,6 @@ nextflow_workflow { ] input[2] = file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/CTAT_HumanFusionLib.mini.dat.gz') input[3] = "homo_sapiens" - input[3] = "homo_sapiens" input[4] = "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/Pfam-A.hmm.gz" input[5] = [ "https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/human/test_starfusion_dfam.hmm", @@ -154,6 +169,15 @@ nextflow_workflow { } when { + params { + no_cosmic = true + whitelist = [] + outdir = "test" + genomes_base = "test" + fusionreport_download_args = '--no-cosmic' + fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : "" + fusionreport_detect_args2 = "--export csv" + } workflow { """ input[0] = Channel.of( @@ -163,21 +187,27 @@ nextflow_workflow { file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz") ] ]) - input[1] = FUSIONREPORT_DETECT.out.fusion_list - input[2] = FUSIONREPORT_DETECT.out.fusion_list_filtered + input[1] = Channel.of([ [id:'test_sample'], file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")]) + input[2] = Channel.of([ [id:'test_sample'], file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")]) input[3] = FUSIONREPORT_DETECT.out.report input[4] = FUSIONREPORT_DETECT.out.csv - input[5] = [ [], [], [] ] + input[5] = Channel.of([ + [id:'test_sample'], + [], + [] + ]) input[6] = Channel.of( [ [ id:'test_gtf' ], - file("s3://nf-core-awsmegatests/rnafusion/references/GRCh38/gencode_v46/gencode/Homo_sapiens_GRCh38_46.gtf")]) + file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.gtf')]) input[7] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3")) input[8] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv")) input[9] = Channel.of([[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] ) input[10] = Channel.of([[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] ) input[11] = STARFUSION_BUILD.out.reference - input[12] = true - input[13] = false + input[12] = false + input[13] = true + input[14] = 1 + input[15] = params.whitelist """ } } diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap new file mode 100644 index 000000000..7677e5b5f --- /dev/null +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "FUSIONINSPECTOR_WORKFLOW - human - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_sample" + }, + "test_sample_combined_fusions_arriba_visualisation.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", + "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" + ], + "ch_arriba_visualisation": [ + [ + { + "id": "test_sample" + }, + "test_sample_combined_fusions_arriba_visualisation.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", + "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.2" + }, + "timestamp": "2025-08-26T20:11:13.798144726" + }, + "FUSIONINSPECTOR_WORKFLOW - human": { + "content": [ + { + "0": [ + [ + { + "id": "test_sample" + }, + "test_sample_combined_fusions_arriba_visualisation.pdf:md5,8264fb7e5cbf6aab0b7971953ddd9b87" + ] + ], + "1": [ + "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", + "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" + ], + "ch_arriba_visualisation": [ + [ + { + "id": "test_sample" + }, + "test_sample_combined_fusions_arriba_visualisation.pdf:md5,8264fb7e5cbf6aab0b7971953ddd9b87" + ] + ], + "versions": [ + "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", + "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.2" + }, + "timestamp": "2025-08-26T20:05:51.190155915" + } +} \ No newline at end of file diff --git a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config index 25a00a186..50818cf99 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config +++ b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config @@ -1,18 +1,8 @@ -params { - arriba = true - starfusion = true - fusioncatcher = true - no_cosmic = true - tools_cutoff = 1 - whitelist = null - outdir = "test" - genomes_base = "test" - fusionreport_download_args = '--no-cosmic' - fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : "" - fusionreport_detect_args2 = "--export csv" -} - process { + withName: 'STARFUSION_BUILD' { + ext.args = [] + } + withName: 'FUSIONREPORT_DOWNLOAD' { ext.args = params.fusionreport_download_args } @@ -31,4 +21,4 @@ process { memory: '36.GB', time: '4.h' ] -} +} \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 06a5dd26c..ece00c82b 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -357,7 +357,9 @@ workflow RNAFUSION { BUILD_REFERENCES.out.hgnc_date, BUILD_REFERENCES.out.starfusion_ref, params.skip_vis, - params.skip_vcf + params.skip_vcf, + params.tools_cutoff, + params.whitelist ) ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions) ch_multiqc_files = ch_multiqc_files.mix(FUSIONINSPECTOR_WORKFLOW.out.ch_arriba_visualisation.collect{it[1]}.ifEmpty([])) From 8822e21322141e67f20cd851097c55102064fb90 Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Tue, 26 Aug 2025 20:20:11 +0200 Subject: [PATCH 795/887] Update gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 23b0c7de9..f3ddfe03c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ testing* *.pyc null/ .nf-test* +log/ +test/ +reports/ From e8b1eeb09537f35a827dd72d48c378a35eaf7350 Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Tue, 26 Aug 2025 20:59:48 +0200 Subject: [PATCH 796/887] Update tags --- .../local/fusioninspector_workflow/tests/main.nf.test | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test index 4483e8f86..cc579b57e 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test @@ -4,6 +4,17 @@ nextflow_workflow { script "../main.nf" workflow "FUSIONINSPECTOR_WORKFLOW" config './nextflow.config' + tag 'subworkflows' + tag 'subworkflows/fusioninspector_workflow' + tag 'cat/cat' + tag 'subworkflows_nfcore' + tag 'fusionreport/detect' + tag 'fusioninspector' + tag 'starfusion/build' + tag 'fusionreport/download' + tag 'arriba/visualisation' + tag 'subworkflows/../../modules/local/vcf_collect' + tag 'agat/convertspgff2tsv' test("FUSIONINSPECTOR_WORKFLOW - human") { From e756a33dc836ab7f098dd2cce84ddae2e3678713 Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:00:48 -0300 Subject: [PATCH 797/887] Update .gitignore --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index f3ddfe03c..23b0c7de9 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,3 @@ testing* *.pyc null/ .nf-test* -log/ -test/ -reports/ From c2cad26cfd18ce1807a0f6b26d87274e3927dabe Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:08:57 -0300 Subject: [PATCH 798/887] Update nextflow.config --- .../local/fusioninspector_workflow/tests/nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config index 50818cf99..808fbdffa 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config +++ b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config @@ -21,4 +21,4 @@ process { memory: '36.GB', time: '4.h' ] -} \ No newline at end of file +} From e839eab60eb68ac5c19692c3b54ba08c665cdfda Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:58:43 -0300 Subject: [PATCH 799/887] Update nextflow.config --- .../local/fusioninspector_workflow/tests/nextflow.config | 6 ------ 1 file changed, 6 deletions(-) diff --git a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config index 808fbdffa..e00f3ced2 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config +++ b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config @@ -15,10 +15,4 @@ process { withName: 'FUSIONINSPECTOR' { ext.args = '--annotate --examine_coding_effect' } - - resourceLimits = [ - cpus: 6, - memory: '36.GB', - time: '4.h' - ] } From f8a579084b63172af61e96b864ba88c8a7c447b8 Mon Sep 17 00:00:00 2001 From: Delfina Terradas Date: Tue, 26 Aug 2025 20:21:33 +0000 Subject: [PATCH 800/887] Change to nf-core subworkflow of `fastq_align_star` --- conf/modules.config | 5 + modules.json | 36 +- .../nf-core/samtools/flagstat/environment.yml | 8 + modules/nf-core/samtools/flagstat/main.nf | 45 +++ modules/nf-core/samtools/flagstat/meta.yml | 60 +++ .../samtools/flagstat/tests/main.nf.test | 56 +++ .../samtools/flagstat/tests/main.nf.test.snap | 72 ++++ .../nf-core/samtools/idxstats/environment.yml | 8 + modules/nf-core/samtools/idxstats/main.nf | 48 +++ modules/nf-core/samtools/idxstats/meta.yml | 60 +++ .../samtools/idxstats/tests/main.nf.test | 53 +++ .../samtools/idxstats/tests/main.nf.test.snap | 72 ++++ .../nf-core/samtools/stats/environment.yml | 8 + modules/nf-core/samtools/stats/main.nf | 48 +++ modules/nf-core/samtools/stats/meta.yml | 72 ++++ .../nf-core/samtools/stats/tests/main.nf.test | 113 ++++++ .../samtools/stats/tests/main.nf.test.snap | 142 +++++++ subworkflows/local/fastq_align_star/main.nf | 55 --- .../nf-core/bam_sort_stats_samtools/main.nf | 50 +++ .../nf-core/bam_sort_stats_samtools/meta.yml | 70 ++++ .../tests/main.nf.test | 134 +++++++ .../tests/main.nf.test.snap | 330 +++++++++++++++++ .../nf-core/bam_stats_samtools/main.nf | 32 ++ .../nf-core/bam_stats_samtools/meta.yml | 43 +++ .../bam_stats_samtools/tests/main.nf.test | 188 ++++++++++ .../tests/main.nf.test.snap | 350 ++++++++++++++++++ subworkflows/nf-core/fastq_align_star/main.nf | 69 ++++ .../nf-core/fastq_align_star/meta.yml | 133 +++++++ .../nf-core/fastq_align_star/nextflow.config | 10 + .../fastq_align_star/tests/main.nf.test | 250 +++++++++++++ .../fastq_align_star/tests/main.nf.test.snap | 282 ++++++++++++++ .../fastq_align_star/tests/nextflow.config | 21 ++ .../tests/with_transcripts.config | 21 ++ workflows/rnafusion.nf | 16 +- 34 files changed, 2897 insertions(+), 63 deletions(-) create mode 100644 modules/nf-core/samtools/flagstat/environment.yml create mode 100644 modules/nf-core/samtools/flagstat/main.nf create mode 100644 modules/nf-core/samtools/flagstat/meta.yml create mode 100644 modules/nf-core/samtools/flagstat/tests/main.nf.test create mode 100644 modules/nf-core/samtools/flagstat/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/idxstats/environment.yml create mode 100644 modules/nf-core/samtools/idxstats/main.nf create mode 100644 modules/nf-core/samtools/idxstats/meta.yml create mode 100644 modules/nf-core/samtools/idxstats/tests/main.nf.test create mode 100644 modules/nf-core/samtools/idxstats/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/stats/environment.yml create mode 100644 modules/nf-core/samtools/stats/main.nf create mode 100644 modules/nf-core/samtools/stats/meta.yml create mode 100644 modules/nf-core/samtools/stats/tests/main.nf.test create mode 100644 modules/nf-core/samtools/stats/tests/main.nf.test.snap delete mode 100644 subworkflows/local/fastq_align_star/main.nf create mode 100644 subworkflows/nf-core/bam_sort_stats_samtools/main.nf create mode 100644 subworkflows/nf-core/bam_sort_stats_samtools/meta.yml create mode 100644 subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test create mode 100644 subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap create mode 100644 subworkflows/nf-core/bam_stats_samtools/main.nf create mode 100644 subworkflows/nf-core/bam_stats_samtools/meta.yml create mode 100644 subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test create mode 100644 subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap create mode 100644 subworkflows/nf-core/fastq_align_star/main.nf create mode 100644 subworkflows/nf-core/fastq_align_star/meta.yml create mode 100644 subworkflows/nf-core/fastq_align_star/nextflow.config create mode 100644 subworkflows/nf-core/fastq_align_star/tests/main.nf.test create mode 100644 subworkflows/nf-core/fastq_align_star/tests/main.nf.test.snap create mode 100644 subworkflows/nf-core/fastq_align_star/tests/nextflow.config create mode 100644 subworkflows/nf-core/fastq_align_star/tests/with_transcripts.config diff --git a/conf/modules.config b/conf/modules.config index 8e0ba6060..e40b81b54 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -261,6 +261,11 @@ process { ] } + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.Aligned.sortedByCoord" } + ext.args = { params.cram ? "--write-index --output-fmt cram" : "--write-index" } + } + withName: 'STAR_ALIGN' { publishDir = [ path: { "${params.outdir}/star" }, diff --git a/modules.json b/modules.json index 61e76f0a3..463d52bd1 100644 --- a/modules.json +++ b/modules.json @@ -142,20 +142,35 @@ "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["modules"] }, + "samtools/flagstat": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["bam_stats_samtools"] + }, + "samtools/idxstats": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["bam_stats_samtools"] + }, "samtools/index": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["modules"] + "installed_by": ["bam_sort_stats_samtools", "modules"] }, "samtools/sort": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["modules"] + "installed_by": ["bam_sort_stats_samtools", "modules"] + }, + "samtools/stats": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["bam_stats_samtools"] }, "star/align": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["modules"] + "installed_by": ["fastq_align_star", "modules"] }, "star/genomegenerate": { "branch": "master", @@ -191,6 +206,21 @@ }, "subworkflows": { "nf-core": { + "bam_sort_stats_samtools": { + "branch": "master", + "git_sha": "e89ff68a46b848c4d8aabb8569767516d46db319", + "installed_by": ["fastq_align_star"] + }, + "bam_stats_samtools": { + "branch": "master", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": ["bam_sort_stats_samtools"] + }, + "fastq_align_star": { + "branch": "master", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": ["subworkflows"] + }, "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", diff --git a/modules/nf-core/samtools/flagstat/environment.yml b/modules/nf-core/samtools/flagstat/environment.yml new file mode 100644 index 000000000..62054fc97 --- /dev/null +++ b/modules/nf-core/samtools/flagstat/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf new file mode 100644 index 000000000..c23f3a5cf --- /dev/null +++ b/modules/nf-core/samtools/flagstat/main.nf @@ -0,0 +1,45 @@ +process SAMTOOLS_FLAGSTAT { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path("*.flagstat"), emit: flagstat + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + samtools \\ + flagstat \\ + --threads ${task.cpus} \\ + $bam \\ + > ${prefix}.flagstat + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.flagstat + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml new file mode 100644 index 000000000..ebbc15f27 --- /dev/null +++ b/modules/nf-core/samtools/flagstat/meta.yml @@ -0,0 +1,60 @@ +name: samtools_flagstat +description: Counts the number of alignments in a BAM/CRAM/SAM file for each FLAG + type +keywords: + - stats + - mapping + - counts + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + ontologies: [] + - bai: + type: file + description: Index for BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + ontologies: [] +output: + flagstat: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.flagstat": + type: file + description: File containing samtools flagstat output + pattern: "*.{flagstat}" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML +authors: + - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test b/modules/nf-core/samtools/flagstat/tests/main.nf.test new file mode 100644 index 000000000..3b648a37d --- /dev/null +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FLAGSTAT" + script "../main.nf" + process "SAMTOOLS_FLAGSTAT" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/flagstat" + + test("BAM") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("BAM - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap new file mode 100644 index 000000000..04c3852b2 --- /dev/null +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "BAM - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:02:58.866491759" + }, + "BAM": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + ] + ], + "1": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + ] + ], + "versions": [ + "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:02:47.383332837" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/idxstats/environment.yml b/modules/nf-core/samtools/idxstats/environment.yml new file mode 100644 index 000000000..62054fc97 --- /dev/null +++ b/modules/nf-core/samtools/idxstats/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf new file mode 100644 index 000000000..3d5bf4bdc --- /dev/null +++ b/modules/nf-core/samtools/idxstats/main.nf @@ -0,0 +1,48 @@ +process SAMTOOLS_IDXSTATS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path("*.idxstats"), emit: idxstats + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + # Note: --threads value represents *additional* CPUs to allocate (total CPUs = 1 + --threads). + samtools \\ + idxstats \\ + --threads ${task.cpus-1} \\ + $bam \\ + > ${prefix}.idxstats + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + touch ${prefix}.idxstats + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml new file mode 100644 index 000000000..96d427466 --- /dev/null +++ b/modules/nf-core/samtools/idxstats/meta.yml @@ -0,0 +1,60 @@ +name: samtools_idxstats +description: Reports alignment summary statistics for a BAM/CRAM/SAM file +keywords: + - stats + - mapping + - counts + - chromosome + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + ontologies: [] + - bai: + type: file + description: Index for BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + ontologies: [] +output: + idxstats: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.idxstats": + type: file + description: File containing samtools idxstats output + pattern: "*.{idxstats}" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML +authors: + - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test new file mode 100644 index 000000000..5fd1fc78e --- /dev/null +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test @@ -0,0 +1,53 @@ +nextflow_process { + + name "Test Process SAMTOOLS_IDXSTATS" + script "../main.nf" + process "SAMTOOLS_IDXSTATS" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/idxstats" + + test("bam") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("bam - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + }} diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap new file mode 100644 index 000000000..2cc89a3b8 --- /dev/null +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:11:56.466856235" + }, + "bam": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + ] + ], + "1": [ + "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + ] + ], + "versions": [ + "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:11:46.311550359" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml new file mode 100644 index 000000000..62054fc97 --- /dev/null +++ b/modules/nf-core/samtools/stats/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf new file mode 100644 index 000000000..4443948b7 --- /dev/null +++ b/modules/nf-core/samtools/stats/main.nf @@ -0,0 +1,48 @@ +process SAMTOOLS_STATS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" + + input: + tuple val(meta), path(input), path(input_index) + tuple val(meta2), path(fasta) + + output: + tuple val(meta), path("*.stats"), emit: stats + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--reference ${fasta}" : "" + """ + samtools \\ + stats \\ + --threads ${task.cpus} \\ + ${reference} \\ + ${input} \\ + > ${prefix}.stats + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.stats + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml new file mode 100644 index 000000000..6dc51885d --- /dev/null +++ b/modules/nf-core/samtools/stats/meta.yml @@ -0,0 +1,72 @@ +name: samtools_stats +description: Produces comprehensive statistics from SAM/BAM/CRAM file +keywords: + - statistics + - counts + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + ontologies: [] + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + ontologies: [] +output: + stats: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.stats": + type: file + description: File containing samtools stats output + pattern: "*.{stats}" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML +authors: + - "@drpatelh" + - "@FriederikeHanssen" + - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test new file mode 100644 index 000000000..5bc893095 --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -0,0 +1,113 @@ +nextflow_process { + + name "Test Process SAMTOOLS_STATS" + script "../main.nf" + process "SAMTOOLS_STATS" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/stats" + + test("bam") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("cram") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("cram - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } +} diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap new file mode 100644 index 000000000..df507be7a --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -0,0 +1,142 @@ +{ + "cram": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:16.767396182" + }, + "bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:29.721580274" + }, + "cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:53.567964304" + }, + "bam": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d53a2584376d78942839e9933a34d11b" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d53a2584376d78942839e9933a34d11b" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:28:50.73610604" + } +} \ No newline at end of file diff --git a/subworkflows/local/fastq_align_star/main.nf b/subworkflows/local/fastq_align_star/main.nf deleted file mode 100644 index fe9848c39..000000000 --- a/subworkflows/local/fastq_align_star/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -include { SAMTOOLS_CONVERT } from '../../../modules/nf-core/samtools/convert/main' -include { STAR_ALIGN } from '../../../modules/nf-core/star/align/main' -include { SAMTOOLS_INDEX } from '../../../modules/nf-core/samtools/index/main.nf' - -workflow FASTQ_ALIGN_STAR { - take: - reads // channel: [ meta, [ fastq1, fastq2 ]] - index // channel: [ meta, index ] - gtf // channel: [ meta, gtf ] - fasta // channel: [ meta, fasta ] - fai // channel: [ meta, fai ] - ignore_sjdbgtf // boolean - cram // boolean: Create CRAM files - - main: - def ch_versions = Channel.empty() - STAR_ALIGN( - reads, - index, - gtf, - ignore_sjdbgtf, - "", // seq_platform is handled in the config - "" // seq_center is handled in the config - ) - ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) - - SAMTOOLS_INDEX( - STAR_ALIGN.out.bam_sorted_aligned - ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) - - ch_bam_bai = STAR_ALIGN.out.bam_sorted_aligned - .join(SAMTOOLS_INDEX.out.bai, failOnMismatch:true, failOnDuplicate:true) - - def ch_cram_crai = Channel.empty() - if(cram) { - SAMTOOLS_CONVERT( - STAR_ALIGN.out.bam_sorted_aligned.map { meta, bam -> [ meta, bam, []] }, - fasta, - fai - ) - ch_versions = ch_versions.mix(SAMTOOLS_CONVERT.out.versions.first()) - ch_cram_crai = SAMTOOLS_CONVERT.out.cram - .join(SAMTOOLS_CONVERT.out.crai, failOnMismatch:true, failOnDuplicate:true) - } - - emit: - versions = ch_versions // channel [ versions ] - bam_bai = ch_bam_bai - cram_crai = ch_cram_crai - junctions = STAR_ALIGN.out.junction - spl_junc_tabs = STAR_ALIGN.out.spl_junc_tab - log_final = STAR_ALIGN.out.log_final - gene_count = STAR_ALIGN.out.read_per_gene_tab -} diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf new file mode 100644 index 000000000..460726368 --- /dev/null +++ b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf @@ -0,0 +1,50 @@ +// +// Sort, index BAM file and run samtools stats, flagstat and idxstats +// + +include { SAMTOOLS_SORT } from '../../../modules/nf-core/samtools/sort/main' +include { SAMTOOLS_INDEX } from '../../../modules/nf-core/samtools/index/main' +include { BAM_STATS_SAMTOOLS } from '../bam_stats_samtools/main' + +workflow BAM_SORT_STATS_SAMTOOLS { + take: + ch_bam // channel: [ val(meta), [ bam ] ] + ch_fasta // channel: [ val(meta), path(fasta) ] + + main: + + ch_versions = Channel.empty() + + SAMTOOLS_SORT ( ch_bam, ch_fasta, '' ) + ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) + + SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) + + SAMTOOLS_SORT.out.bam + .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) + .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) + .map { + meta, bam, bai, csi -> + if (bai) { + [ meta, bam, bai ] + } else { + [ meta, bam, csi ] + } + } + .set { ch_bam_bai } + + BAM_STATS_SAMTOOLS ( ch_bam_bai, ch_fasta ) + ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) + + emit: + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] + + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/meta.yml b/subworkflows/nf-core/bam_sort_stats_samtools/meta.yml new file mode 100644 index 000000000..e01f9ccf6 --- /dev/null +++ b/subworkflows/nf-core/bam_sort_stats_samtools/meta.yml @@ -0,0 +1,70 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: bam_sort_stats_samtools +description: Sort SAM/BAM/CRAM file +keywords: + - sort + - bam + - sam + - cram +components: + - samtools/sort + - samtools/index + - samtools/stats + - samtools/idxstats + - samtools/flagstat + - bam_stats_samtools +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - fasta: + type: file + description: Reference genome fasta file + pattern: "*.{fasta,fa}" +# TODO Update when we decide on a standard for subworkflow docs +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - crai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - stats: + type: file + description: File containing samtools stats output + pattern: "*.{stats}" + - flagstat: + type: file + description: File containing samtools flagstat output + pattern: "*.{flagstat}" + - idxstats: + type: file + description: File containing samtools idxstats output + pattern: "*.{idxstats}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@ewels" +maintainers: + - "@drpatelh" + - "@ewels" diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test new file mode 100644 index 000000000..821a3cf50 --- /dev/null +++ b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test @@ -0,0 +1,134 @@ +nextflow_workflow { + + name "Test Workflow BAM_SORT_STATS_SAMTOOLS" + script "../main.nf" + workflow "BAM_SORT_STATS_SAMTOOLS" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/bam_sort_stats_samtools" + tag "bam_sort_stats_samtools" + tag "subworkflows/bam_stats_samtools" + tag "bam_stats_samtools" + tag "samtools" + tag "samtools/index" + tag "samtools/sort" + tag "samtools/stats" + tag "samtools/idxstats" + tag "samtools/flagstat" + + test("test_bam_sort_stats_samtools_single_end") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert workflow.out.bam.get(0).get(1) ==~ ".*.bam"}, + { assert workflow.out.bai.get(0).get(1) ==~ ".*.bai"}, + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats, + workflow.out.versions).match() } + ) + } + } + + test("test_bam_sort_stats_samtools_paired_end") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert workflow.out.bam.get(0).get(1) ==~ ".*.bam"}, + { assert workflow.out.bai.get(0).get(1) ==~ ".*.bai"}, + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats, + workflow.out.versions).match() } + ) + } + } + + test("test_bam_sort_stats_samtools_single_end - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("test_bam_sort_stats_samtools_paired_end - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap new file mode 100644 index 000000000..e4b8af9a5 --- /dev/null +++ b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap @@ -0,0 +1,330 @@ +{ + "test_bam_sort_stats_samtools_single_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,2fe0f3a7a1f07906061c1dadb62e0d05" + ] + ], + [ + "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", + "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", + "versions.yml:md5,721391fd94c417808516480c9451c6fd", + "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", + "versions.yml:md5,c294c162aeb09862cc5e55b602647452" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T14:07:28.387184086" + }, + "test_bam_sort_stats_samtools_paired_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,ba007b13981dad548358c7c957d41e12" + ] + ], + [ + "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", + "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", + "versions.yml:md5,721391fd94c417808516480c9451c6fd", + "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", + "versions.yml:md5,c294c162aeb09862cc5e55b602647452" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T14:07:39.841563832" + }, + "test_bam_sort_stats_samtools_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", + "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", + "versions.yml:md5,721391fd94c417808516480c9451c6fd", + "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", + "versions.yml:md5,c294c162aeb09862cc5e55b602647452" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", + "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", + "versions.yml:md5,721391fd94c417808516480c9451c6fd", + "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", + "versions.yml:md5,c294c162aeb09862cc5e55b602647452" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T16:43:39.764967263" + }, + "test_bam_sort_stats_samtools_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", + "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", + "versions.yml:md5,721391fd94c417808516480c9451c6fd", + "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", + "versions.yml:md5,c294c162aeb09862cc5e55b602647452" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", + "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", + "versions.yml:md5,721391fd94c417808516480c9451c6fd", + "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", + "versions.yml:md5,c294c162aeb09862cc5e55b602647452" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T16:43:47.431619557" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/bam_stats_samtools/main.nf b/subworkflows/nf-core/bam_stats_samtools/main.nf new file mode 100644 index 000000000..44d4c010a --- /dev/null +++ b/subworkflows/nf-core/bam_stats_samtools/main.nf @@ -0,0 +1,32 @@ +// +// Run SAMtools stats, flagstat and idxstats +// + +include { SAMTOOLS_STATS } from '../../../modules/nf-core/samtools/stats/main' +include { SAMTOOLS_IDXSTATS } from '../../../modules/nf-core/samtools/idxstats/main' +include { SAMTOOLS_FLAGSTAT } from '../../../modules/nf-core/samtools/flagstat/main' + +workflow BAM_STATS_SAMTOOLS { + take: + ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [ val(meta), path(fasta) ] + + main: + ch_versions = Channel.empty() + + SAMTOOLS_STATS ( ch_bam_bai, ch_fasta ) + ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions) + + SAMTOOLS_FLAGSTAT ( ch_bam_bai ) + ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions) + + SAMTOOLS_IDXSTATS ( ch_bam_bai ) + ch_versions = ch_versions.mix(SAMTOOLS_IDXSTATS.out.versions) + + emit: + stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] + flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), path(flagstat) ] + idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), path(idxstats) ] + + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/nf-core/bam_stats_samtools/meta.yml b/subworkflows/nf-core/bam_stats_samtools/meta.yml new file mode 100644 index 000000000..809bf736b --- /dev/null +++ b/subworkflows/nf-core/bam_stats_samtools/meta.yml @@ -0,0 +1,43 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: bam_stats_samtools +description: Produces comprehensive statistics from SAM/BAM/CRAM file +keywords: + - statistics + - counts + - bam + - sam + - cram +components: + - samtools/stats + - samtools/idxstats + - samtools/flagstat +input: + - ch_bam_bai: + description: | + The input channel containing the BAM/CRAM and it's index + Structure: [ val(meta), path(bam), path(bai) ] + - ch_fasta: + description: | + Reference genome fasta file + Structure: [ path(fasta) ] +output: + - stats: + description: | + File containing samtools stats output + Structure: [ val(meta), path(stats) ] + - flagstat: + description: | + File containing samtools flagstat output + Structure: [ val(meta), path(flagstat) ] + - idxstats: + description: | + File containing samtools idxstats output + Structure: [ val(meta), path(idxstats)] + - versions: + description: | + Files containing software versions + Structure: [ path(versions.yml) ] +authors: + - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test new file mode 100644 index 000000000..76e7a40a0 --- /dev/null +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test @@ -0,0 +1,188 @@ +nextflow_workflow { + + name "Test Workflow BAM_STATS_SAMTOOLS" + script "../main.nf" + workflow "BAM_STATS_SAMTOOLS" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "bam_stats_samtools" + tag "subworkflows/bam_stats_samtools" + tag "samtools" + tag "samtools/flagstat" + tag "samtools/idxstats" + tag "samtools/stats" + + test("test_bam_stats_samtools_single_end") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats, + workflow.out.versions).match() } + ) + } + } + + test("test_bam_stats_samtools_paired_end") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats, + workflow.out.versions).match() } + ) + } + } + + test("test_bam_stats_samtools_paired_end_cram") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats, + workflow.out.versions).match() } + ) + } + } + + test ("test_bam_stats_samtools_single_end - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("test_bam_stats_samtools_paired_end - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("test_bam_stats_samtools_paired_end_cram - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap new file mode 100644 index 000000000..8ca225263 --- /dev/null +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap @@ -0,0 +1,350 @@ +{ + "test_bam_stats_samtools_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:08:35.660286921" + }, + "test_bam_stats_samtools_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:08:24.220305512" + }, + "test_bam_stats_samtools_paired_end_cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:08:54.206770141" + }, + "test_bam_stats_samtools_single_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,291bb2393ec947140d12d42c2795b222" + ] + ], + [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:07:49.731645858" + }, + "test_bam_stats_samtools_paired_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,8140d69cdedd77570ca1d7618a744e16" + ] + ], + [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:08:01.421996172" + }, + "test_bam_stats_samtools_paired_end_cram": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,a53f3d26e2e9851f7d528442bbfe9781" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,1622856127bafd6cdbadee9cd64ec9b7" + ] + ], + [ + "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", + "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", + "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:08:12.640915756" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_star/main.nf b/subworkflows/nf-core/fastq_align_star/main.nf new file mode 100644 index 000000000..4b3602982 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/main.nf @@ -0,0 +1,69 @@ +include { STAR_ALIGN } from '../../../modules/nf-core/star/align/main' +include { BAM_SORT_STATS_SAMTOOLS as BAM_SORT_STATS_SAMTOOLS_GENOME } from '../bam_sort_stats_samtools/main' +include { BAM_SORT_STATS_SAMTOOLS as BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME } from '../bam_sort_stats_samtools/main' + + +workflow FASTQ_ALIGN_STAR { + + take: + ch_reads // channel: [ val(meta), [ path(reads) ] ] + ch_index // channel: [ path(index) ] + ch_gtf // channel: [ path(gtf) ] + val_star_ignore_sjdbgtf // boolean: when using pre-built STAR indices do not re-extract and use splice junctions from the GTF file + val_seq_platform // string : sequencing platform + val_seq_center // string : sequencing center + ch_fasta // channel: [ val(meta), path(fasta) ] + ch_transcripts_fasta // channel: [ val(meta), path(fasta) ] + + main: + + ch_versions = Channel.empty() + + // + // Map reads with STAR + // + STAR_ALIGN ( ch_reads, ch_index, ch_gtf, val_star_ignore_sjdbgtf, val_seq_platform, val_seq_center ) + ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) + + // + // Sort, index BAM file and run samtools stats, flagstat and idxstats + // + BAM_SORT_STATS_SAMTOOLS_GENOME ( STAR_ALIGN.out.bam, ch_fasta ) + ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS_GENOME.out.versions) + + // + // Sort, index BAM file and run samtools stats, flagstat and idxstats + // + // Only runs when '--quantMode TranscriptomeSAM' is set in args and + // STAR_ALIGN.out.bam_transcript is populated + // + + BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME ( STAR_ALIGN.out.bam_transcript, ch_transcripts_fasta ) + ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME.out.versions) + + emit: + + orig_bam = STAR_ALIGN.out.bam // channel: [ val(meta), path(bam) ] + log_final = STAR_ALIGN.out.log_final // channel: [ val(meta), path(log_final) ] + log_out = STAR_ALIGN.out.log_out // channel: [ val(meta), path(log_out) ] + log_progress = STAR_ALIGN.out.log_progress // channel: [ val(meta), path(log_progress) ] + bam_sorted = STAR_ALIGN.out.bam_sorted // channel: [ val(meta), path(bam) ] + fastq = STAR_ALIGN.out.fastq // channel: [ val(meta), path(fastq) ] + tab = STAR_ALIGN.out.tab // channel: [ val(meta), path(tab) ] + orig_bam_transcript = STAR_ALIGN.out.bam_transcript // channel: [ val(meta), path(bam) ] + bam_sorted_aligned = STAR_ALIGN.out.bam_sorted_aligned // channel: [ val(meta), path(bam) ] + + bam = BAM_SORT_STATS_SAMTOOLS_GENOME.out.bam // channel: [ val(meta), path(bam) ] + bai = BAM_SORT_STATS_SAMTOOLS_GENOME.out.bai // channel: [ val(meta), path(bai) ] + stats = BAM_SORT_STATS_SAMTOOLS_GENOME.out.stats // channel: [ val(meta), path(stats) ] + flagstat = BAM_SORT_STATS_SAMTOOLS_GENOME.out.flagstat // channel: [ val(meta), path(flagstat) ] + idxstats = BAM_SORT_STATS_SAMTOOLS_GENOME.out.idxstats // channel: [ val(meta), path(idxstats) ] + + bam_transcript = BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME.out.bam // channel: [ val(meta), path(bam) ] + bai_transcript = BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME.out.bai // channel: [ val(meta), path(bai) ] + stats_transcript = BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME.out.stats // channel: [ val(meta), path(stats) ] + flagstat_transcript = BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME.out.flagstat // channel: [ val(meta), path(flagstat) ] + idxstats_transcript = BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME.out.idxstats // channel: [ val(meta), path(idxstats) ] + + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/nf-core/fastq_align_star/meta.yml b/subworkflows/nf-core/fastq_align_star/meta.yml new file mode 100644 index 000000000..796d3e4b6 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/meta.yml @@ -0,0 +1,133 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "fastq_align_star" +description: Align reads to a reference genome using bowtie2 then sort with samtools +keywords: + - align + - fasta + - genome + - reference +components: + - star/align + - samtools/sort + - samtools/index + - samtools/stats + - samtools/idxstats + - samtools/flagstat + - bam_sort_stats_samtools +input: + - ch_reads: + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + Structure: [ val(meta), [ path(reads) ] ] + - ch_index: + type: directory + description: STAR genome index + pattern: "star" + - ch_gtf: + type: file + description: | + GTF file used to set the splice junctions with the --sjdbGTFfile flag + pattern: "*.gtf" + - val_star_ignore_sjdbgtf: + type: boolean + description: | + If true the --sjdbGTFfile flag is set + pattern: "true|false" + - val_seq_platform: + type: string + description: | + Sequencing platform to be added to the bam header using the --outSAMattrRGline flag + - val_seq_center: + type: string + description: | + Sequencing center to be added to the bam header using the --outSAMattrRGline flag + - ch_fasta: + type: file + description: Reference genome fasta file + pattern: "*.{fasta,fa,fna}" + - ch_transcripts_fasta: + type: file + description: Optional reference genome fasta file + pattern: "*.{fasta,fa,fna}" +output: + - orig_bam: + description: | + Output BAM file containing read alignments + Structure: [ val(meta), path(bam) ] + - log_final: + description: | + STAR final log file + Structure: [ val(meta), path(log_final) ] + - log_out: + description: | + STAR log out file + Structure: [ val(meta), path(log_out) ] + - log_progress: + description: | + STAR log progress file + Structure: [ val(meta), path(log_progress) ] + - bam_sorted: + description: | + Sorted BAM file of read alignments (optional) + Structure: [ val(meta), path(bam) ] + - orig_bam_transcript: + description: | + Output BAM file of transcriptome alignment (optional) + Structure: [ val(meta), path(bam) ] + - fastq: + description: | + Unmapped FastQ files (optional) + Structure: [ val(meta), path(fastq) ] + - tab: + description: | + STAR output tab file(s) (optional) + Structure: [ val(meta), path(tab) ] + - bam: + description: | + BAM file ordered by samtools + Structure: [ val(meta), path(bam) ] + - bai: + description: | + BAI index of the ordered BAM file + Structure: [ val(meta), path(bai) ] + - stats: + description: | + File containing samtools stats output + Structure: [ val(meta), path(stats) ] + - flagstat: + description: | + File containing samtools flagstat output + Structure: [ val(meta), path(flagstat) ] + - idxstats: + description: | + File containing samtools idxstats output + Structure: [ val(meta), path(idxstats) ] + - bam_transcript: + description: | + Transcriptome-level BAM file ordered by samtools (optional) + Structure: [ val(meta), path(bam) ] + - bai_transcript: + description: | + Transcriptome-level BAI index of the ordered BAM file (optional) + Structure: [ val(meta), path(bai) ] + - stats_transcript: + description: | + Transcriptome-level file containing samtools stats output (optional) + Structure: [ val(meta), path(stats) ] + - flagstat_transcript: + description: | + Transcriptome-level file containing samtools flagstat output (optional) + Structure: [ val(meta), path(flagstat) ] + - idxstats_transcript: + description: | + Transcriptome-level file containing samtools idxstats output (optional) + Structure: [ val(meta), path(idxstats) ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@JoseEspinosa" +maintainers: + - "@JoseEspinosa" diff --git a/subworkflows/nf-core/fastq_align_star/nextflow.config b/subworkflows/nf-core/fastq_align_star/nextflow.config new file mode 100644 index 000000000..926eae710 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/nextflow.config @@ -0,0 +1,10 @@ +// IMPORTANT: Add this configuration to your modules.config + +process { + withName: ".*:FASTQ_ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS_GENOME:.*" { + ext.prefix = {"${meta.id}_genome"} + } + withName: ".*:FASTQ_ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS_TRANSCRIPTOME:.*" { + ext.prefix = {"${meta.id}_transcriptome"} + } +} diff --git a/subworkflows/nf-core/fastq_align_star/tests/main.nf.test b/subworkflows/nf-core/fastq_align_star/tests/main.nf.test new file mode 100644 index 000000000..c1ad73a93 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/tests/main.nf.test @@ -0,0 +1,250 @@ +nextflow_workflow { + + name "Test Subworkflow FASTQ_ALIGN_STAR" + script "../main.nf" + workflow "FASTQ_ALIGN_STAR" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_align_star" + tag "star/align" + tag "star/genomegenerate" + tag "rsem/preparereference" + tag "subworkflows/bam_sort_stats_samtools" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + test("homo_sapiens - fastq - single_end") { + config "./nextflow.config" + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = true // star_ignore_sjdbgtf + input[4] = 'illumina' // seq_platform + input[5] = false // seq_center + input[6] = Channel.of([ + [ id:'test_fasta' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[7] = Channel.of([[:], []]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + bam(workflow.out.bam[0][1]).getReadsMD5(), + bam(workflow.out.orig_bam[0][1]).getReadsMD5(), + workflow.out.fastq, + workflow.out.tab, + workflow.out.stats, + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.versions + ).match() }, + { assert path(workflow.out.bai.get(0).get(1)).exists() }, + { assert path(workflow.out.log_out.get(0).get(1)).exists() }, + { assert path(workflow.out.log_final.get(0).get(1)).exists() }, + { assert path(workflow.out.log_progress.get(0).get(1)).exists() } + ) + } + } + + test("homo_sapiens - fastq - paired_end") { + config "./nextflow.config" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = true // star_ignore_sjdbgtf + input[4] = 'illumina' // seq_platform + input[5] = false // seq_center + input[6] = Channel.of([ + [ id:'test_fasta' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[7] = Channel.of([[:], []]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + bam(workflow.out.bam[0][1]).getReadsMD5(), + bam(workflow.out.orig_bam[0][1]).getReadsMD5(), + workflow.out.fastq, + workflow.out.tab, + workflow.out.stats, + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.versions + ).match() }, + { assert path(workflow.out.bai.get(0).get(1)).exists() }, + { assert path(workflow.out.log_out.get(0).get(1)).exists() }, + { assert path(workflow.out.log_final.get(0).get(1)).exists() }, + { assert path(workflow.out.log_progress.get(0).get(1)).exists() } + ) + } + } + + test("homo_sapiens - fastq - paired_end - with_transcriptome") { + config "./with_transcripts.config" + + setup { + run("RSEM_PREPAREREFERENCE") { + script "../../../../modules/nf-core/rsem/preparereference/main.nf" + process { + """ + input[0] = channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkifexists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkifexists: true)) + """ + } + } + } + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = true // star_ignore_sjdbgtf + input[4] = 'illumina' // seq_platform + input[5] = false // seq_center + input[6] = Channel.of([ + [ id:'test_fasta' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[7] = RSEM_PREPAREREFERENCE.out.transcript_fasta.map{[[:], it]} + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + bam(workflow.out.bam[0][1]).getReadsMD5(), + bam(workflow.out.orig_bam[0][1]).getReadsMD5(), + bam(workflow.out.bam_transcript[0][1]).getReadsMD5(), + bam(workflow.out.orig_bam_transcript[0][1]).getReadsMD5(), + workflow.out.fastq, + workflow.out.tab, + workflow.out.stats, + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats_transcript, + workflow.out.flagstat_transcript, + workflow.out.idxstats_transcript, + workflow.out.versions + ).match() }, + { assert path(workflow.out.bai.get(0).get(1)).exists() }, + { assert path(workflow.out.bai_transcript.get(0).get(1)).exists() }, + { assert path(workflow.out.log_out.get(0).get(1)).exists() }, + { assert path(workflow.out.log_final.get(0).get(1)).exists() }, + { assert path(workflow.out.log_progress.get(0).get(1)).exists() } + ) + } + } + + test("homo_sapiens - fastq - paired_end - transcripts - no_transcriptome") { + config "./with_transcripts.config" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = true // star_ignore_sjdbgtf + input[4] = 'illumina' // seq_platform + input[5] = false // seq_center + input[6] = Channel.of([ + [ id:'test_fasta' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[7] = Channel.of([[:], []]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + bam(workflow.out.bam[0][1]).getReadsMD5(), + bam(workflow.out.orig_bam[0][1]).getReadsMD5(), + workflow.out.fastq, + workflow.out.tab, + workflow.out.stats, + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats_transcript, + workflow.out.versions + ).match() }, + { assert path(workflow.out.bai.get(0).get(1)).exists() }, + { assert path(workflow.out.log_out.get(0).get(1)).exists() }, + { assert path(workflow.out.log_final.get(0).get(1)).exists() }, + { assert path(workflow.out.log_progress.get(0).get(1)).exists() } + ) + } + } +} diff --git a/subworkflows/nf-core/fastq_align_star/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_star/tests/main.nf.test.snap new file mode 100644 index 000000000..c21ec0cc9 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/tests/main.nf.test.snap @@ -0,0 +1,282 @@ +{ + "homo_sapiens - fastq - paired_end - transcripts - no_transcriptome": { + "content": [ + "1e02b8e6b4a02ab58bfe4ee795aba815", + "47a5da42b696886e2ed36af199a9042e", + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,d7509941ffbfb221115faa2481115f23" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.flagstat:md5,db0e25cd0b37d3030e807846c022199e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.idxstats:md5,107ca94dd426cc44db316f0d402307c5" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,10c63f09ff2b849443bafad71a824b0e" + ] + ], + [ + "versions.yml:md5,167faaf660e4936645b0ad5a9d3bf620", + "versions.yml:md5,24b681997fbdd563910240af500d965e", + "versions.yml:md5,2bdea75e8dad77676c54b806ceecb68b", + "versions.yml:md5,2e0fd05eea17eb1f5cdf079c12a30b88", + "versions.yml:md5,421308f325b1038feafdb6862cebc28a", + "versions.yml:md5,63c683e2834a8968f4d626dbe9b7a07f", + "versions.yml:md5,6a96fec10a72e1da236e6e1d7519590e", + "versions.yml:md5,9dd7217e54100569bf9f87f7a1cca54a", + "versions.yml:md5,a305cb08e7cb3194be54d0bb8a257722", + "versions.yml:md5,ade8e9901ff456f43bc0f93f5f7af793", + "versions.yml:md5,ec328c7ea462702388fa15204aeb6689" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-11T17:09:46.703861921" + }, + "homo_sapiens - fastq - paired_end - with_transcriptome": { + "content": [ + "1e02b8e6b4a02ab58bfe4ee795aba815", + "47a5da42b696886e2ed36af199a9042e", + "9b8ec790f8138071a0731b5225c84f00", + "9b8ec790f8138071a0731b5225c84f00", + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,d7509941ffbfb221115faa2481115f23" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.flagstat:md5,db0e25cd0b37d3030e807846c022199e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.idxstats:md5,107ca94dd426cc44db316f0d402307c5" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,10ca84181b17dafd7248296114f05333" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.flagstat:md5,a204dee59ef8b7cd0f7d952a80119b77" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.idxstats:md5,4030919b4a05393dcd7e699d72725803" + ] + ], + [ + "versions.yml:md5,167faaf660e4936645b0ad5a9d3bf620", + "versions.yml:md5,24b681997fbdd563910240af500d965e", + "versions.yml:md5,2bdea75e8dad77676c54b806ceecb68b", + "versions.yml:md5,2e0fd05eea17eb1f5cdf079c12a30b88", + "versions.yml:md5,421308f325b1038feafdb6862cebc28a", + "versions.yml:md5,63c683e2834a8968f4d626dbe9b7a07f", + "versions.yml:md5,6a96fec10a72e1da236e6e1d7519590e", + "versions.yml:md5,9dd7217e54100569bf9f87f7a1cca54a", + "versions.yml:md5,a305cb08e7cb3194be54d0bb8a257722", + "versions.yml:md5,ade8e9901ff456f43bc0f93f5f7af793", + "versions.yml:md5,ec328c7ea462702388fa15204aeb6689" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-11T17:08:59.431516768" + }, + "homo_sapiens - fastq - single_end": { + "content": [ + "8b3699d1b3344c90f82363edadae6427", + "c491ec34a25f55c7583e325e0a191b5d", + [ + + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.stats:md5,30abf517cda76c6a7468541781c4dd7a" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.flagstat:md5,075e7a684a7ceb5fd1dae154f823128a" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.idxstats:md5,0d5a12e3e3ffdb15f1c6c50f02f22575" + ] + ], + [ + "versions.yml:md5,167faaf660e4936645b0ad5a9d3bf620", + "versions.yml:md5,24b681997fbdd563910240af500d965e", + "versions.yml:md5,2e0fd05eea17eb1f5cdf079c12a30b88", + "versions.yml:md5,421308f325b1038feafdb6862cebc28a", + "versions.yml:md5,6a96fec10a72e1da236e6e1d7519590e", + "versions.yml:md5,9dd7217e54100569bf9f87f7a1cca54a" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-11T17:07:23.833781959" + }, + "homo_sapiens - fastq - paired_end": { + "content": [ + "1e02b8e6b4a02ab58bfe4ee795aba815", + "47a5da42b696886e2ed36af199a9042e", + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,d7509941ffbfb221115faa2481115f23" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.flagstat:md5,db0e25cd0b37d3030e807846c022199e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.idxstats:md5,107ca94dd426cc44db316f0d402307c5" + ] + ], + [ + "versions.yml:md5,167faaf660e4936645b0ad5a9d3bf620", + "versions.yml:md5,24b681997fbdd563910240af500d965e", + "versions.yml:md5,2e0fd05eea17eb1f5cdf079c12a30b88", + "versions.yml:md5,421308f325b1038feafdb6862cebc28a", + "versions.yml:md5,6a96fec10a72e1da236e6e1d7519590e", + "versions.yml:md5,9dd7217e54100569bf9f87f7a1cca54a" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-11T17:08:08.904146433" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_star/tests/nextflow.config b/subworkflows/nf-core/fastq_align_star/tests/nextflow.config new file mode 100644 index 000000000..6af49d586 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/tests/nextflow.config @@ -0,0 +1,21 @@ +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: STAR_GENOMEGENERATE { + ext.args = '--genomeSAindexNbases 9' + } + + withName: STAR_ALIGN { + ext.args = '--readFilesCommand zcat' + } + + withName: '.*:BAM_SORT_STATS_SAMTOOLS_.*:SAMTOOLS_.*' { + ext.prefix = { "${meta.id}.sorted" } + } + + withName: '.*:BAM_SORT_STATS_SAMTOOLS_.*:BAM_STATS_SAMTOOLS:.*' { + ext.prefix = { "${meta.id}.sorted.bam" } + } + +} diff --git a/subworkflows/nf-core/fastq_align_star/tests/with_transcripts.config b/subworkflows/nf-core/fastq_align_star/tests/with_transcripts.config new file mode 100644 index 000000000..62f152501 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/tests/with_transcripts.config @@ -0,0 +1,21 @@ +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: STAR_GENOMEGENERATE { + ext.args = '--genomeSAindexNbases 9' + } + + withName: STAR_ALIGN { + ext.args = '--readFilesCommand zcat --quantMode TranscriptomeSAM' + } + + withName: '.*:BAM_SORT_STATS_SAMTOOLS_.*:SAMTOOLS_.*' { + ext.prefix = { "${meta.id}.sorted" } + } + + withName: '.*:BAM_SORT_STATS_SAMTOOLS_.*:BAM_STATS_SAMTOOLS:.*' { + ext.prefix = { "${meta.id}.sorted.bam" } + } + +} diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 06a5dd26c..dbb5e726e 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -18,8 +18,9 @@ include { MULTIQC } from '../modules/nf-core/multiqc/mai include { STAR_ALIGN } from '../modules/nf-core/star/align/main' include { SALMON_QUANT } from '../modules/nf-core/salmon/quant/main' include { SAMTOOLS_CONVERT } from '../modules/nf-core/samtools/convert/main' +include { SAMTOOLS_INDEX } from '../modules/nf-core/samtools/index/main' include { paramsSummaryMap } from 'plugin/nf-schema' -include { FASTQ_ALIGN_STAR } from '../subworkflows/local/fastq_align_star' +include { FASTQ_ALIGN_STAR } from '../subworkflows/nf-core/fastq_align_star' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rnafusion_pipeline' @@ -181,13 +182,18 @@ workflow RNAFUSION { ch_fastqs_to_align, BUILD_REFERENCES.out.starindex_ref, BUILD_REFERENCES.out.gtf, - BUILD_REFERENCES.out.fasta, - BUILD_REFERENCES.out.fai, params.star_ignore_sjdbgtf, - params.cram + ch_fastqs_to_align.map { meta, _fastqs -> meta.seq_platform }, + ch_fastqs_to_align.map { meta, _fastqs -> meta.seq_center }, + BUILD_REFERENCES.out.fasta, + [[:], []] ) + FASTQ_ALIGN_STAR.out.bam_sorted_aligned.view() + SAMTOOLS_INDEX(FASTQ_ALIGN_STAR.out.bam_sorted_aligned) + ch_bam_bai = FASTQ_ALIGN_STAR.out.bam_sorted_aligned + .join(SAMTOOLS_INDEX.out.bai, failOnMismatch:true, failOnDuplicate:true) ch_versions = ch_versions.mix(FASTQ_ALIGN_STAR.out.versions) - ch_aligned_reads = ch_aligned_reads.mix(FASTQ_ALIGN_STAR.out.bam_bai) + ch_aligned_reads = ch_aligned_reads.mix(ch_bam_bai) ch_star_junctions = ch_star_junctions.mix(FASTQ_ALIGN_STAR.out.junctions) ch_star_splice_junctions = ch_star_splice_junctions.mix(FASTQ_ALIGN_STAR.out.spl_junc_tabs) ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_STAR.out.log_final.collect{it[1]}.ifEmpty([])) From baf957e35c074c18f720aa2a8fab40dd7acf476c Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Tue, 26 Aug 2025 23:35:48 +0200 Subject: [PATCH 801/887] Add emits to fastq_align_star subworkflow --- .../nf-core/bam_sort_stats_samtools/main.nf | 2 +- subworkflows/nf-core/fastq_align_star/main.nf | 3 ++ tests/test_stub_bam.nf.test.snap | 28 +++++++++---------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf index 460726368..b716375b0 100644 --- a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf @@ -15,7 +15,7 @@ workflow BAM_SORT_STATS_SAMTOOLS { ch_versions = Channel.empty() - SAMTOOLS_SORT ( ch_bam, ch_fasta, '' ) + SAMTOOLS_SORT ( ch_bam, ch_fasta ) ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) diff --git a/subworkflows/nf-core/fastq_align_star/main.nf b/subworkflows/nf-core/fastq_align_star/main.nf index 4b3602982..c4b382ebb 100644 --- a/subworkflows/nf-core/fastq_align_star/main.nf +++ b/subworkflows/nf-core/fastq_align_star/main.nf @@ -52,6 +52,9 @@ workflow FASTQ_ALIGN_STAR { tab = STAR_ALIGN.out.tab // channel: [ val(meta), path(tab) ] orig_bam_transcript = STAR_ALIGN.out.bam_transcript // channel: [ val(meta), path(bam) ] bam_sorted_aligned = STAR_ALIGN.out.bam_sorted_aligned // channel: [ val(meta), path(bam) ] + junctions = STAR_ALIGN.out.junction // channel: [ val(meta), path(junction) ] + spl_junc_tabs = STAR_ALIGN.out.spl_junc_tab // channel: [ val(meta), path(spl_junc_tab) ] + gene_count = STAR_ALIGN.out.read_per_gene_tab // channel: [ val(meta), path(read_tab) ] bam = BAM_SORT_STATS_SAMTOOLS_GENOME.out.bam // channel: [ val(meta), path(bam) ] bai = BAM_SORT_STATS_SAMTOOLS_GENOME.out.bai // channel: [ val(meta), path(bai) ] diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 762751f28..e4a6a04be 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -189,9 +189,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T15:54:01.219397324" + "timestamp": "2025-08-26T23:14:20.283916876" }, "stub test stringtie": { "content": [ @@ -311,9 +311,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-08T11:34:57.146117646" + "timestamp": "2025-08-26T23:15:30.482022054" }, "stub test arriba": { "content": [ @@ -423,9 +423,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-08T11:31:27.759259528" + "timestamp": "2025-08-26T22:48:22.193453934" }, "stub test fusioninspector": { "content": [ @@ -673,9 +673,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T16:00:15.182860428" + "timestamp": "2025-08-26T23:30:41.022404222" }, "stub test salmon": { "content": [ @@ -1000,9 +1000,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T15:47:14.034109802" + "timestamp": "2025-08-26T23:06:10.100949608" }, "stub test fusionreport": { "content": [ @@ -1227,9 +1227,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T15:56:39.559031879" + "timestamp": "2025-08-26T23:22:51.682095887" }, "stub test fastp": { "content": [ @@ -1762,8 +1762,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T15:39:59.605183405" + "timestamp": "2025-08-26T23:00:13.773945342" } } \ No newline at end of file From 859edab5061af2aab5a9572cb447191a61714af1 Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Wed, 27 Aug 2025 15:55:03 +0200 Subject: [PATCH 802/887] Update stub test --- tests/test_stub.nf.test.snap | 175 ++++++++++++++++++++++++++++++----- 1 file changed, 154 insertions(+), 21 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 759d060d9..61f9424c2 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -1,7 +1,7 @@ { "stub test starfusion": { "content": [ - 17, + 27, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" @@ -37,9 +37,21 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, @@ -189,7 +201,14 @@ "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.Aligned.sortedByCoord.bam.csi", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", "star", + "star/test.Aligned.sortedByCoord.bam.bai", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", "star/test.Aligned.unsort.out.bam", @@ -216,13 +235,13 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T16:11:25.285702343" + "timestamp": "2025-08-27T15:23:50.746792719" }, "stub test stringtie": { "content": [ - 17, + 27, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" @@ -258,9 +277,21 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, @@ -332,7 +363,14 @@ "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", "references/GRCh38/gencode_v46/star/sjdbList.out.tab", "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.Aligned.sortedByCoord.bam.csi", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", "star", + "star/test.Aligned.sortedByCoord.bam.bai", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", "star/test.Aligned.unsort.out.bam", @@ -362,13 +400,13 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-08T11:20:46.857913005" + "timestamp": "2025-08-27T15:25:28.858027686" }, "stub test arriba": { "content": [ - 16, + 26, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" @@ -407,9 +445,21 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, "STAR_ALIGN": { "star": "2.7.11b", "samtools": 1.21, @@ -478,7 +528,14 @@ "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", "references/GRCh38/gencode_v46/star/sjdbList.out.tab", "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.Aligned.sortedByCoord.bam.csi", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", "star", + "star/test.Aligned.sortedByCoord.bam.bai", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", "star/test.Aligned.unsort.out.bam", @@ -501,13 +558,13 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-08T11:16:32.896368369" + "timestamp": "2025-08-27T15:16:09.411578571" }, "stub test fusioninspector": { "content": [ - 24, + 34, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" @@ -564,9 +621,21 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, @@ -750,7 +819,14 @@ "references/GRCh38/hgnc", "references/GRCh38/hgnc/HGNC-DB-timestamp.txt", "references/GRCh38/hgnc/hgnc_complete_set.txt", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.Aligned.sortedByCoord.bam.csi", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", "star", + "star/test.Aligned.sortedByCoord.bam.bai", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", "star/test.Aligned.unsort.out.bam", @@ -775,9 +851,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T16:16:11.496999226" + "timestamp": "2025-08-27T15:34:06.043690619" }, "stub test salmon": { "content": [ @@ -876,7 +952,7 @@ }, "stub test ctatsplicing": { "content": [ - 18, + 28, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" @@ -918,9 +994,21 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, @@ -1084,7 +1172,14 @@ "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.Aligned.sortedByCoord.bam.csi", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", "star", + "star/test.Aligned.sortedByCoord.bam.bai", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", "star/test.Aligned.unsort.out.bam", @@ -1107,13 +1202,13 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T16:08:54.904059765" + "timestamp": "2025-08-27T15:19:10.863659919" }, "stub test fusionreport": { "content": [ - 21, + 31, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" @@ -1161,9 +1256,21 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, @@ -1334,7 +1441,14 @@ "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.Aligned.sortedByCoord.bam.csi", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", "star", + "star/test.Aligned.sortedByCoord.bam.bai", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", "star/test.Aligned.unsort.out.bam", @@ -1361,9 +1475,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T16:13:31.815555556" + "timestamp": "2025-08-27T15:28:20.168052482" }, "stub test fastp": { "content": [ @@ -1600,7 +1714,7 @@ }, "stub test all": { "content": [ - 35, + 45, { "AGAT_CONVERTGFF2BED": { "agat": "v1.5.1" @@ -1681,9 +1795,21 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, "SAMTOOLS_INDEX": { "samtools": 1.21 }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, "STARFUSION_BUILD": { "gunzip": 1.12, "hmmer": 3.4, @@ -1927,7 +2053,14 @@ "salmon/test", "salmon/test_lib_format_counts.json", "salmon/test_meta_info.json", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.Aligned.sortedByCoord.bam.csi", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", "star", + "star/test.Aligned.sortedByCoord.bam.bai", "star/test.Aligned.sortedByCoord.out.bam", "star/test.Aligned.sortedByCoord.out.bam.bai", "star/test.Aligned.unsort.out.bam", @@ -1963,8 +2096,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-08-18T16:02:59.744224309" + "timestamp": "2025-08-27T15:15:02.845874526" } } \ No newline at end of file From 5071899d9fad6f3c5909967b860b58be8c1f9f98 Mon Sep 17 00:00:00 2001 From: Delfina Terradas Date: Wed, 27 Aug 2025 14:12:53 +0000 Subject: [PATCH 803/887] Patch subworkflows to avoid lint failures --- .../bam_sort_stats_samtools.diff | 18 +++++++++++++++ .../fastq_align_star/fastq_align_star.diff | 23 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff create mode 100644 subworkflows/nf-core/fastq_align_star/fastq_align_star.diff diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff b/subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff new file mode 100644 index 000000000..74c35330d --- /dev/null +++ b/subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff @@ -0,0 +1,18 @@ +Changes in component 'nf-core/bam_sort_stats_samtools' +Changes in 'bam_sort_stats_samtools/main.nf': +--- subworkflows/nf-core/bam_sort_stats_samtools/main.nf ++++ subworkflows/nf-core/bam_sort_stats_samtools/main.nf +@@ -15,7 +15,7 @@ + + ch_versions = Channel.empty() + +- SAMTOOLS_SORT ( ch_bam, ch_fasta, '' ) ++ SAMTOOLS_SORT ( ch_bam, ch_fasta ) + ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) + + SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) + +'subworkflows/nf-core/bam_sort_stats_samtools/meta.yml' is unchanged +'subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test' is unchanged +'subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/subworkflows/nf-core/fastq_align_star/fastq_align_star.diff b/subworkflows/nf-core/fastq_align_star/fastq_align_star.diff new file mode 100644 index 000000000..1f4a289e5 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_star/fastq_align_star.diff @@ -0,0 +1,23 @@ +Changes in component 'nf-core/fastq_align_star' +Changes in 'fastq_align_star/main.nf': +--- subworkflows/nf-core/fastq_align_star/main.nf ++++ subworkflows/nf-core/fastq_align_star/main.nf +@@ -51,6 +51,10 @@ + fastq = STAR_ALIGN.out.fastq // channel: [ val(meta), path(fastq) ] + tab = STAR_ALIGN.out.tab // channel: [ val(meta), path(tab) ] + orig_bam_transcript = STAR_ALIGN.out.bam_transcript // channel: [ val(meta), path(bam) ] ++ bam_sorted_aligned = STAR_ALIGN.out.bam_sorted_aligned // channel: [ val(meta), path(bam) ] ++ junctions = STAR_ALIGN.out.junction // channel: [ val(meta), path(junction) ] ++ spl_junc_tabs = STAR_ALIGN.out.spl_junc_tab // channel: [ val(meta), path(spl_junc_tab) ] ++ gene_count = STAR_ALIGN.out.read_per_gene_tab // channel: [ val(meta), path(read_tab) ] + + bam = BAM_SORT_STATS_SAMTOOLS_GENOME.out.bam // channel: [ val(meta), path(bam) ] + bai = BAM_SORT_STATS_SAMTOOLS_GENOME.out.bai // channel: [ val(meta), path(bai) ] + +'subworkflows/nf-core/fastq_align_star/meta.yml' is unchanged +'subworkflows/nf-core/fastq_align_star/nextflow.config' is unchanged +'subworkflows/nf-core/fastq_align_star/tests/main.nf.test' is unchanged +'subworkflows/nf-core/fastq_align_star/tests/main.nf.test.snap' is unchanged +'subworkflows/nf-core/fastq_align_star/tests/nextflow.config' is unchanged +'subworkflows/nf-core/fastq_align_star/tests/with_transcripts.config' is unchanged +************************************************************ From 8282dc06ef04448075529f67183a6595fad4f0a1 Mon Sep 17 00:00:00 2001 From: Delfina Terradas Date: Wed, 27 Aug 2025 14:21:39 +0000 Subject: [PATCH 804/887] Update santools/sort and keep original subworkflow bam_sort_stats_samtools --- modules.json | 2 +- modules/nf-core/samtools/sort/main.nf | 59 ++-- modules/nf-core/samtools/sort/meta.yml | 67 +++-- .../nf-core/samtools/sort/tests/main.nf.test | 144 +++++++++- .../samtools/sort/tests/main.nf.test.snap | 272 +++++++++++++----- .../samtools/sort/tests/nextflow.config | 1 - .../bam_sort_stats_samtools.diff | 18 -- .../nf-core/bam_sort_stats_samtools/main.nf | 2 +- 8 files changed, 437 insertions(+), 128 deletions(-) delete mode 100644 subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff diff --git a/modules.json b/modules.json index 463d52bd1..904735b15 100644 --- a/modules.json +++ b/modules.json @@ -159,7 +159,7 @@ }, "samtools/sort": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "e89ff68a46b848c4d8aabb8569767516d46db319", "installed_by": ["bam_sort_stats_samtools", "modules"] }, "samtools/stats": { diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index caf3c61a8..6c436c043 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -10,24 +10,35 @@ process SAMTOOLS_SORT { input: tuple val(meta) , path(bam) tuple val(meta2), path(fasta) + val index_format output: - tuple val(meta), path("*.bam"), emit: bam, optional: true - tuple val(meta), path("*.cram"), emit: cram, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true - path "versions.yml", emit: versions + tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true + tuple val(meta), path("${prefix}.${extension}.crai"), emit: crai, optional: true + tuple val(meta), path("${prefix}.${extension}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${extension}.bai"), emit: bai, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt cram") ? "cram" : - "bam" - def reference = fasta ? "--reference ${fasta}" : "" + prefix = task.ext.prefix ?: "${meta.id}" + extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + reference = fasta ? "--reference ${fasta}" : "" + output_file = index_format ? "${prefix}.${extension}##idx##${prefix}.${extension}.${index_format} --write-index" : "${prefix}.${extension}" + if (index_format) { + if (!index_format.matches('bai|csi|crai')) { + error "Index format not one of bai, csi, crai." + } else if (extension == "sam") { + error "Indexing not compatible with SAM output" + } + } if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ @@ -39,7 +50,7 @@ process SAMTOOLS_SORT { -T ${prefix} \\ --threads $task.cpus \\ ${reference} \\ - -o ${prefix}.${extension} \\ + -o ${output_file} \\ - cat <<-END_VERSIONS > versions.yml @@ -50,19 +61,23 @@ process SAMTOOLS_SORT { stub: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt cram") ? "cram" : - "bam" + prefix = task.ext.prefix ?: "${meta.id}" + extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + def reference = fasta ? "--reference ${fasta}" : "" + if (index_format) { + if (!index_format.matches('bai|csi|crai')) { + error "Index format not one of bai, csi, crai." + } else if (extension == "sam") { + error "Indexing not compatible with SAM output" + } + } + index = index_format ? "touch ${prefix}.${extension}.${index_format}" : "" + """ touch ${prefix}.${extension} - if [ "${extension}" == "bam" ]; - then - touch ${prefix}.${extension}.csi - elif [ "${extension}" == "cram" ]; - then - touch ${prefix}.${extension}.crai - fi + ${index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index a9dbec5a8..4c4010bbb 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -26,6 +26,7 @@ input: type: file description: BAM/CRAM/SAM file(s) pattern: "*.{bam,cram,sam}" + ontologies: [] - - meta2: type: map description: | @@ -36,52 +37,86 @@ input: description: Reference genome FASTA file pattern: "*.{fa,fasta,fna}" optional: true + ontologies: [] + - index_format: + type: string + description: Index format to use (optional) + pattern: "bai|csi|crai" output: - - bam: - - meta: + bam: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.bam": + - "${prefix}.bam": type: file description: Sorted BAM file pattern: "*.{bam}" - - cram: - - meta: + ontologies: [] + cram: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.cram": + - "${prefix}.cram": type: file description: Sorted CRAM file pattern: "*.{cram}" - - crai: - - meta: + ontologies: [] + sam: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.crai": + - "${prefix}.sam": + type: file + description: Sorted SAM file + pattern: "*.{sam}" + ontologies: [] + + crai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}.${extension}.crai": type: file description: CRAM index file (optional) pattern: "*.crai" - - csi: - - meta: + ontologies: [] + csi: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.csi": + - "${prefix}.${extension}.csi": type: file description: BAM index file (optional) pattern: "*.csi" - - versions: - - versions.yml: + ontologies: [] + bai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}.${extension}.bai": type: file - description: File containing software versions - pattern: "versions.yml" + description: BAM index file (optional) + pattern: "*.bai" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index b05e6691b..fa2778722 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -8,7 +8,7 @@ nextflow_process { tag "samtools" tag "samtools/sort" - test("bam") { + test("bam_no_index") { config "./nextflow.config" @@ -23,6 +23,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -32,7 +33,71 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.bam, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.bai, + process.out.versions + ).match()} + ) + } + } + + test("bam_bai_index") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'bai' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.bai, + process.out.versions + ).match()} + ) + } + } + + test("bam_csi_index") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'csi' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi, process.out.versions ).match()} ) @@ -57,6 +122,77 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("multiple bam bai index") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'bai' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.bai.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("multiple bam csi index") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'csi' """ } } @@ -88,6 +224,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -120,6 +257,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -150,6 +288,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -178,6 +317,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index 469891fe3..84e728024 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -24,10 +24,10 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:49:58.207549273" + "timestamp": "2025-08-13T16:39:40.803476526" }, "bam - stub": { "content": [ @@ -48,16 +48,19 @@ ], "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + ], "4": [ + + ], + "5": [ + + ], + "6": [ "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bai": [ + ], "bam": [ [ @@ -75,13 +78,10 @@ ], "csi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + + ], + "sam": [ + ], "versions": [ "versions.yml:md5,2659b187d681241451539d4c53500b9f" @@ -89,10 +89,70 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T16:39:46.797296642" + }, + "bam_csi_index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,d9645c9b6d7f991426d47ad80c275ef7" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,124e6600a0a811227c43fd6864c72902" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T16:39:13.394881233" + }, + "multiple bam bai index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,0669e48038989db924a9f2957e26317c" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:50:08.630951018" + "timestamp": "2025-08-13T16:39:28.192036852" }, "cram - stub": { "content": [ @@ -110,31 +170,28 @@ ] ], "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + ], "3": [ ], "4": [ + + ], + "5": [ + + ], + "6": [ "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bai": [ + ], "bam": [ ], "crai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + ], "cram": [ [ @@ -147,6 +204,9 @@ ], "csi": [ + ], + "sam": [ + ], "versions": [ "versions.yml:md5,2659b187d681241451539d4c53500b9f" @@ -154,10 +214,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:50:19.061912443" + "timestamp": "2025-08-13T16:39:58.847704746" }, "multiple bam": { "content": [ @@ -167,27 +227,21 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + "test.sorted.bam:md5,c6ab045cc495485d3819bd44c5d69b92" ] ], [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi" - ] + ], [ "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.09.0" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-10-08T11:59:55.479443" + "timestamp": "2025-08-13T14:00:50.550947084" }, "multiple bam - stub": { "content": [ @@ -198,7 +252,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + "test.sorted.bam:md5,c6ab045cc495485d3819bd44c5d69b92" ] ], "1": [ @@ -208,16 +262,19 @@ ], "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" - ] + ], "4": [ + + ], + "5": [ + + ], + "6": [ "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bai": [ + ], "bam": [ [ @@ -225,7 +282,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + "test.sorted.bam:md5,c6ab045cc495485d3819bd44c5d69b92" ] ], "crai": [ @@ -235,13 +292,10 @@ ], "csi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" - ] + + ], + "sam": [ + ], "versions": [ "versions.yml:md5,2659b187d681241451539d4c53500b9f" @@ -249,10 +303,64 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.09.0" + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T14:02:05.837266709" + }, + "bam_no_index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,7fa751088f8d86c2685fb50a8b90f53f" + ] + ], + [ + + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-10-08T11:36:13.781404" + "timestamp": "2025-08-13T14:00:20.988801663" + }, + "multiple bam csi index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,3fe979e8bd453d33224706d1478df7a1" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T16:39:34.591655792" }, "bam": { "content": [ @@ -283,5 +391,35 @@ "nextflow": "24.09.0" }, "timestamp": "2024-10-08T11:59:46.372244" + }, + "bam_bai_index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,31e1c0224336156ea9ca81dcfe23356d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai:md5,0575b098cbea8c3af1f58d2a83efa07f" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-13T16:39:06.968372189" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config index f642771f5..723f62b21 100644 --- a/modules/nf-core/samtools/sort/tests/nextflow.config +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -2,7 +2,6 @@ process { withName: SAMTOOLS_SORT { ext.prefix = { "${meta.id}.sorted" } - ext.args = "--write-index" } } diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff b/subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff deleted file mode 100644 index 74c35330d..000000000 --- a/subworkflows/nf-core/bam_sort_stats_samtools/bam_sort_stats_samtools.diff +++ /dev/null @@ -1,18 +0,0 @@ -Changes in component 'nf-core/bam_sort_stats_samtools' -Changes in 'bam_sort_stats_samtools/main.nf': ---- subworkflows/nf-core/bam_sort_stats_samtools/main.nf -+++ subworkflows/nf-core/bam_sort_stats_samtools/main.nf -@@ -15,7 +15,7 @@ - - ch_versions = Channel.empty() - -- SAMTOOLS_SORT ( ch_bam, ch_fasta, '' ) -+ SAMTOOLS_SORT ( ch_bam, ch_fasta ) - ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) - - SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - -'subworkflows/nf-core/bam_sort_stats_samtools/meta.yml' is unchanged -'subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test' is unchanged -'subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf index b716375b0..460726368 100644 --- a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf @@ -15,7 +15,7 @@ workflow BAM_SORT_STATS_SAMTOOLS { ch_versions = Channel.empty() - SAMTOOLS_SORT ( ch_bam, ch_fasta ) + SAMTOOLS_SORT ( ch_bam, ch_fasta, '' ) ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) From 4719efcb6498c1f85e75d4fcf5f424f15519811c Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Wed, 27 Aug 2025 16:31:02 +0200 Subject: [PATCH 805/887] Use smaller dfam and pfam files in tests --- tests/nextflow.config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/nextflow.config b/tests/nextflow.config index 66ddf0787..eef755fe4 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -24,6 +24,12 @@ process { } params { + dfam_hmm = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm" + dfam_h3f = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3f" + dfam_h3i = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3i" + dfam_h3m = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3m" + dfam_h3p = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3p" + pfam_file = "${pipelines_testdata_base_path}/testdata/human/Pfam-A.hmm.gz" fusioncatcher_ref = "${projectDir}/assets" arriba_ref_blacklist = "s3://nf-core-awsmegatests/rnafusion/references/GRCh38/arriba/2.5.0/blacklist_hg38_GRCh38_v2.5.0.tsv.gz" arriba_ref_cytobands = "s3://nf-core-awsmegatests/rnafusion/references/GRCh38/arriba/2.5.0/cytobands_hg38_GRCh38_v2.5.0.tsv" From 6c937316f86e8d8d3cea41f116fb0c7acd3dd7c5 Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Wed, 27 Aug 2025 11:34:18 -0300 Subject: [PATCH 806/887] Update nextflow.config to use samller dfam and pfam files in tests --- tests/nextflow.config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/nextflow.config b/tests/nextflow.config index 66ddf0787..eef755fe4 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -24,6 +24,12 @@ process { } params { + dfam_hmm = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm" + dfam_h3f = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3f" + dfam_h3i = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3i" + dfam_h3m = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3m" + dfam_h3p = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3p" + pfam_file = "${pipelines_testdata_base_path}/testdata/human/Pfam-A.hmm.gz" fusioncatcher_ref = "${projectDir}/assets" arriba_ref_blacklist = "s3://nf-core-awsmegatests/rnafusion/references/GRCh38/arriba/2.5.0/blacklist_hg38_GRCh38_v2.5.0.tsv.gz" arriba_ref_cytobands = "s3://nf-core-awsmegatests/rnafusion/references/GRCh38/arriba/2.5.0/cytobands_hg38_GRCh38_v2.5.0.tsv" From 9c560e8554f7ce2ba4541349d588036132840dff Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Wed, 27 Aug 2025 11:35:06 -0300 Subject: [PATCH 807/887] Update nextflow.config --- tests/nextflow.config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/nextflow.config b/tests/nextflow.config index 66ddf0787..eef755fe4 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -24,6 +24,12 @@ process { } params { + dfam_hmm = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm" + dfam_h3f = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3f" + dfam_h3i = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3i" + dfam_h3m = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3m" + dfam_h3p = "${pipelines_testdata_base_path}/testdata/human/test_starfusion_dfam.hmm.h3p" + pfam_file = "${pipelines_testdata_base_path}/testdata/human/Pfam-A.hmm.gz" fusioncatcher_ref = "${projectDir}/assets" arriba_ref_blacklist = "s3://nf-core-awsmegatests/rnafusion/references/GRCh38/arriba/2.5.0/blacklist_hg38_GRCh38_v2.5.0.tsv.gz" arriba_ref_cytobands = "s3://nf-core-awsmegatests/rnafusion/references/GRCh38/arriba/2.5.0/cytobands_hg38_GRCh38_v2.5.0.tsv" From e3e4c13ae5d6f5ad247325db4195559388b8a339 Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Wed, 27 Aug 2025 19:11:36 +0200 Subject: [PATCH 808/887] Update stub test snapshot --- tests/test_stub.nf.test.snap | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 61f9424c2..e389619f4 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -203,7 +203,6 @@ "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "samtools", "samtools/test.Aligned.sortedByCoord.bam", - "samtools/test.Aligned.sortedByCoord.bam.csi", "samtools/test.flagstat", "samtools/test.idxstats", "samtools/test.stats", @@ -237,7 +236,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-27T15:23:50.746792719" + "timestamp": "2025-08-27T18:45:45.33537438" }, "stub test stringtie": { "content": [ @@ -365,7 +364,6 @@ "references/GRCh38/gencode_v46/star/transcriptInfo.tab", "samtools", "samtools/test.Aligned.sortedByCoord.bam", - "samtools/test.Aligned.sortedByCoord.bam.csi", "samtools/test.flagstat", "samtools/test.idxstats", "samtools/test.stats", @@ -402,7 +400,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-27T15:25:28.858027686" + "timestamp": "2025-08-27T18:46:51.467658698" }, "stub test arriba": { "content": [ @@ -530,7 +528,6 @@ "references/GRCh38/gencode_v46/star/transcriptInfo.tab", "samtools", "samtools/test.Aligned.sortedByCoord.bam", - "samtools/test.Aligned.sortedByCoord.bam.csi", "samtools/test.flagstat", "samtools/test.idxstats", "samtools/test.stats", @@ -560,7 +557,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-27T15:16:09.411578571" + "timestamp": "2025-08-27T18:41:39.472865742" }, "stub test fusioninspector": { "content": [ @@ -821,7 +818,6 @@ "references/GRCh38/hgnc/hgnc_complete_set.txt", "samtools", "samtools/test.Aligned.sortedByCoord.bam", - "samtools/test.Aligned.sortedByCoord.bam.csi", "samtools/test.flagstat", "samtools/test.idxstats", "samtools/test.stats", @@ -853,7 +849,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-27T15:34:06.043690619" + "timestamp": "2025-08-27T18:51:23.029137047" }, "stub test salmon": { "content": [ @@ -1174,7 +1170,6 @@ "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "samtools", "samtools/test.Aligned.sortedByCoord.bam", - "samtools/test.Aligned.sortedByCoord.bam.csi", "samtools/test.flagstat", "samtools/test.idxstats", "samtools/test.stats", @@ -1204,7 +1199,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-27T15:19:10.863659919" + "timestamp": "2025-08-27T18:42:46.678568423" }, "stub test fusionreport": { "content": [ @@ -1443,7 +1438,6 @@ "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", "samtools", "samtools/test.Aligned.sortedByCoord.bam", - "samtools/test.Aligned.sortedByCoord.bam.csi", "samtools/test.flagstat", "samtools/test.idxstats", "samtools/test.stats", @@ -1477,7 +1471,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-27T15:28:20.168052482" + "timestamp": "2025-08-27T18:48:05.810728943" }, "stub test fastp": { "content": [ @@ -2055,7 +2049,6 @@ "salmon/test_meta_info.json", "samtools", "samtools/test.Aligned.sortedByCoord.bam", - "samtools/test.Aligned.sortedByCoord.bam.csi", "samtools/test.flagstat", "samtools/test.idxstats", "samtools/test.stats", @@ -2098,6 +2091,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-27T15:15:02.845874526" + "timestamp": "2025-08-27T18:40:27.833068219" } } \ No newline at end of file From 8a9d1579d506c6ac7dad5f1e832d8e7b13983dae Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Wed, 27 Aug 2025 20:00:09 +0200 Subject: [PATCH 809/887] Replace modules in test for QC_WORKFLOW --- .../local/qc_workflow/test/main.nf.test | 15 ++++++-- .../local/qc_workflow/test/main.nf.test.snap | 38 +------------------ 2 files changed, 14 insertions(+), 39 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index ae36becb6..2abb710e1 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -28,8 +28,8 @@ nextflow_workflow { } // Filter GTF to extract rRNA genes - run("GET_RRNA_TRANSCRIPTS") { - script "../../../../modules/local/get_rrna_transcript/main.nf" + run("BIOAWK") { + script "../../../../modules/nf-core/bioawk/main.nf" process { """ input[0] = Channel.of( @@ -42,13 +42,22 @@ nextflow_workflow { } } + run("AGAT_CONVERTGFF2BED") { + script "../../../../modules/nf-core/agat/convertgff2bed/main.nf" + process { + """ + input[0] = BIOAWK.out.output + """ + } + } + // Convert rRNA BED to interval list (the necessary file) run("GATK4_BEDTOINTERVALLIST") { script "../../../../modules/nf-core/gatk4/bedtointervallist/main.nf" process { """ - input[0] = GET_RRNA_TRANSCRIPTS.out.bed + input[0] = AGAT_CONVERTGFF2BED.out.bed input[1] = Channel.of( [ [id: 'chr22_dic'], diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap index cdaa0cc8b..3542ffc8e 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test.snap +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -1,22 +1,4 @@ { - "duplicate_metrics": { - "content": "651d8a4702f9f9871e94afbce3e50e34", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.711230835" - }, - "versions": { - "content": [ - "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.686297468" - }, "QC_WORKFLOW - Homo sapiens chr22": { "content": [ [ @@ -45,24 +27,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-22T13:19:46.99615" - }, - "rnaseq_metrics": { - "content": "84a348c3735ed2f6c47f346eeed661f4", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.704632753" - }, - "insertsize_metrics": { - "content": "160db81b19843c4d46fe74ac61f9f013", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nextflow": "25.04.2" }, - "timestamp": "2024-12-04T19:29:09.717929716" + "timestamp": "2025-08-27T19:55:15.893171257" } } \ No newline at end of file From 605cbc711fdd9b64a6a739e28e8f211592ce215b Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 28 Aug 2025 11:16:54 +0200 Subject: [PATCH 810/887] update qc workflow test and snap --- .../local/qc_workflow/test/main.nf.test | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index ae36becb6..c4db1c92f 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -27,31 +27,39 @@ nextflow_workflow { } } - // Filter GTF to extract rRNA genes - run("GET_RRNA_TRANSCRIPTS") { - script "../../../../modules/local/get_rrna_transcript/main.nf" + run("BIOAWK") { + script "../../../../modules/nf-core/bioawk/main" process { """ input[0] = Channel.of( [ - [id: 'fasta'], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", checkIfExist: true) + [id: 'gtf'], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) ] ) """ } } + run("AGAT_CONVERTGFF2BED") { + script "../../../../modules/nf-core/agat/convertgff2bed/main" + process { + """ + input[0] = BIOAWK.out.output + """ + } + } + // Convert rRNA BED to interval list (the necessary file) run("GATK4_BEDTOINTERVALLIST") { script "../../../../modules/nf-core/gatk4/bedtointervallist/main.nf" process { """ - input[0] = GET_RRNA_TRANSCRIPTS.out.bed + input[0] = AGAT_CONVERTGFF2BED.out.bed input[1] = Channel.of( [ - [id: 'chr22_dic'], + [id: 'chr22_dict'], file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.dict", checkIfExist: true) ] ) From 225aeb999390a1341f877439fc8eff71fb2385cb Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Thu, 28 Aug 2025 09:09:18 -0300 Subject: [PATCH 811/887] Update workflows/rnafusion.nf Co-authored-by: Anabella Trigila <18577080+atrigila@users.noreply.github.com> --- workflows/rnafusion.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index dbb5e726e..4043980bb 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -188,7 +188,6 @@ workflow RNAFUSION { BUILD_REFERENCES.out.fasta, [[:], []] ) - FASTQ_ALIGN_STAR.out.bam_sorted_aligned.view() SAMTOOLS_INDEX(FASTQ_ALIGN_STAR.out.bam_sorted_aligned) ch_bam_bai = FASTQ_ALIGN_STAR.out.bam_sorted_aligned .join(SAMTOOLS_INDEX.out.bai, failOnMismatch:true, failOnDuplicate:true) From 88c99323add6dc1d8a238efb30a0da323ee921e0 Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:22:03 -0300 Subject: [PATCH 812/887] Update main.nf.test --- subworkflows/local/qc_workflow/test/main.nf.test | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index ae36becb6..2abb710e1 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -28,8 +28,8 @@ nextflow_workflow { } // Filter GTF to extract rRNA genes - run("GET_RRNA_TRANSCRIPTS") { - script "../../../../modules/local/get_rrna_transcript/main.nf" + run("BIOAWK") { + script "../../../../modules/nf-core/bioawk/main.nf" process { """ input[0] = Channel.of( @@ -42,13 +42,22 @@ nextflow_workflow { } } + run("AGAT_CONVERTGFF2BED") { + script "../../../../modules/nf-core/agat/convertgff2bed/main.nf" + process { + """ + input[0] = BIOAWK.out.output + """ + } + } + // Convert rRNA BED to interval list (the necessary file) run("GATK4_BEDTOINTERVALLIST") { script "../../../../modules/nf-core/gatk4/bedtointervallist/main.nf" process { """ - input[0] = GET_RRNA_TRANSCRIPTS.out.bed + input[0] = AGAT_CONVERTGFF2BED.out.bed input[1] = Channel.of( [ [id: 'chr22_dic'], From d82593c854b7d6777f95ee46479011ba40f42f35 Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:22:57 -0300 Subject: [PATCH 813/887] Update main.nf.test.snap --- .../local/qc_workflow/test/main.nf.test.snap | 40 ++----------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap index cdaa0cc8b..a8f3b776c 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test.snap +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -1,22 +1,4 @@ { - "duplicate_metrics": { - "content": "651d8a4702f9f9871e94afbce3e50e34", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.711230835" - }, - "versions": { - "content": [ - "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.686297468" - }, "QC_WORKFLOW - Homo sapiens chr22": { "content": [ [ @@ -45,24 +27,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-22T13:19:46.99615" - }, - "rnaseq_metrics": { - "content": "84a348c3735ed2f6c47f346eeed661f4", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.704632753" - }, - "insertsize_metrics": { - "content": "160db81b19843c4d46fe74ac61f9f013", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" + "nextflow": "25.04.2" }, - "timestamp": "2024-12-04T19:29:09.717929716" + "timestamp": "2025-08-27T19:55:15.893171257" } -} \ No newline at end of file +} From c59cd57d3c62d0dfbfb728def91c3511e5d7166b Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Thu, 28 Aug 2025 13:04:40 -0300 Subject: [PATCH 814/887] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1837f0ef4..4cda7f669 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -91,6 +91,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replaced local `STARFUSION_BUILD` for module from nf-core [#709](https://github.com/nf-core/rnafusion/pull/709) - Modified `test_build` profile to use a reduced version of Pfam and Dfam files [#733](https://github.com/nf-core/rnafusion/pull/733) - Changed local `ARRIBA_VISUALIZATION`, `CTATSPLICING_STARTOCANCERINTRONS`, `CTATSPLICING_PREPGENOMELIB`, `FUSIONINSPECTOR`, `STARFUSION_DETECT` for its nf-core module versions [#740](https://github.com/nf-core/rnafusion/pull/740) +- Changed local `FASTQ_ALIGN_STAR` for subworkflow from nf-core [#756](https://github.com/nf-core/rnafusion/pull/756) ### Fixed @@ -115,6 +116,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update VCF_COLLECT script to adapt to transcript_version not being an entry in fusioninspector gtf anymore [#726](https://github.com/nf-core/rnafusion/pull/726) - Fix rRNA detection and make it more customizable with nf-core modules [#736](https://github.com/nf-core/rnafusion/pull/736) - Fix rRNA detection in GTF using `transcript_type` [#749](https://github.com/nf-core/rnafusion/pull/749) +- Fixed nf-test for `QC_WORKFLOW` subworkflow [#756](https://github.com/nf-core/rnafusion/pull/756) ### Removed From 66077fb283895e11b6b008c226c13ddf30d21152 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Thu, 28 Aug 2025 17:09:22 +0000 Subject: [PATCH 815/887] test: update snapshot --- .../local/qc_workflow/test/main.nf.test | 15 ++++++-- .../local/qc_workflow/test/main.nf.test.snap | 36 +------------------ 2 files changed, 13 insertions(+), 38 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index ae36becb6..2abb710e1 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -28,8 +28,8 @@ nextflow_workflow { } // Filter GTF to extract rRNA genes - run("GET_RRNA_TRANSCRIPTS") { - script "../../../../modules/local/get_rrna_transcript/main.nf" + run("BIOAWK") { + script "../../../../modules/nf-core/bioawk/main.nf" process { """ input[0] = Channel.of( @@ -42,13 +42,22 @@ nextflow_workflow { } } + run("AGAT_CONVERTGFF2BED") { + script "../../../../modules/nf-core/agat/convertgff2bed/main.nf" + process { + """ + input[0] = BIOAWK.out.output + """ + } + } + // Convert rRNA BED to interval list (the necessary file) run("GATK4_BEDTOINTERVALLIST") { script "../../../../modules/nf-core/gatk4/bedtointervallist/main.nf" process { """ - input[0] = GET_RRNA_TRANSCRIPTS.out.bed + input[0] = AGAT_CONVERTGFF2BED.out.bed input[1] = Channel.of( [ [id: 'chr22_dic'], diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap index cdaa0cc8b..4a95d91b4 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test.snap +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -1,22 +1,4 @@ { - "duplicate_metrics": { - "content": "651d8a4702f9f9871e94afbce3e50e34", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.711230835" - }, - "versions": { - "content": [ - "versions.yml:md5,3f13b395c67e317f74194b3b6c89f139" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.686297468" - }, "QC_WORKFLOW - Homo sapiens chr22": { "content": [ [ @@ -47,22 +29,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-22T13:19:46.99615" - }, - "rnaseq_metrics": { - "content": "84a348c3735ed2f6c47f346eeed661f4", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.704632753" - }, - "insertsize_metrics": { - "content": "160db81b19843c4d46fe74ac61f9f013", - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-04T19:29:09.717929716" + "timestamp": "2025-08-28T17:08:08.334459479" } } \ No newline at end of file From b771b47d8df51a1e5c264f9d3e9d648d4fc72c3e Mon Sep 17 00:00:00 2001 From: delfiterradas Date: Thu, 28 Aug 2025 22:20:32 +0200 Subject: [PATCH 816/887] Update nf-test to avoid failure due to unstable file --- .../tests/main.nf.test | 3 +- .../tests/main.nf.test.snap | 32 +++---------------- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test index cc579b57e..e02352e94 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test @@ -118,7 +118,8 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot(workflow.out).match() } + { assert snapshot(file(workflow.out.ch_arriba_visualisation[0][1]).length()) }, + { assert snapshot(workflow.out.versions).match() } ) } } diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap index 7677e5b5f..8c2578116 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap @@ -36,37 +36,15 @@ }, "FUSIONINSPECTOR_WORKFLOW - human": { "content": [ - { - "0": [ - [ - { - "id": "test_sample" - }, - "test_sample_combined_fusions_arriba_visualisation.pdf:md5,8264fb7e5cbf6aab0b7971953ddd9b87" - ] - ], - "1": [ - "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", - "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" - ], - "ch_arriba_visualisation": [ - [ - { - "id": "test_sample" - }, - "test_sample_combined_fusions_arriba_visualisation.pdf:md5,8264fb7e5cbf6aab0b7971953ddd9b87" - ] - ], - "versions": [ - "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", - "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" - ] - } + [ + "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", + "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" + ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-08-26T20:05:51.190155915" + "timestamp": "2025-08-28T21:54:05.453749443" } } \ No newline at end of file From 1acb395a11e2f51c31ceb66a3517e6d6b8a3573b Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Thu, 28 Aug 2025 17:49:58 -0300 Subject: [PATCH 817/887] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1837f0ef4..89c1ef1f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added support for references hosted on the nf-core AWS S3 bucket. [#717](https://github.com/nf-core/rnafusion/pull/717) - Added `--dfam_hmm`, `--dfam_h3f`, `--dfam_h3i`, `--dfam_h3m`, `--dfam_h3p`, `--pfam_file` and `--annot_filter_url` parameters to allow use of custom files in `STARFUSION_BUILD` module [#709](https://github.com/nf-core/rnafusion/pull/709) - Add nf-test to local module: `VCF_COLLECT`. [#745](https://github.com/nf-core/rnafusion/pull/745) +- Added nf-test for local subworkflow: `FUSIONINSPECTOR_WORKFLOW`. [#753](https://github.com/nf-core/rnafusion/pull/753) ### Changed From b8e59d4ad35ff07b57f5a82388ca6254f82af4fb Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Fri, 29 Aug 2025 09:53:02 -0300 Subject: [PATCH 818/887] Fix modules.json --- modules.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules.json b/modules.json index 96245f791..1833dcc8d 100644 --- a/modules.json +++ b/modules.json @@ -224,6 +224,8 @@ "fastq_align_star": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "installed_by": ["subworkflows"] + }, "fastq_fastqc_umitools_fastp": { "branch": "master", "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", From 5e0383b85a0b69d19203693400794466141d9326 Mon Sep 17 00:00:00 2001 From: Delfina Terradas <155591053+delfiterradas@users.noreply.github.com> Date: Fri, 29 Aug 2025 10:17:00 -0300 Subject: [PATCH 819/887] Fix main.nf.test.snap --- subworkflows/local/qc_workflow/test/main.nf.test.snap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test.snap b/subworkflows/local/qc_workflow/test/main.nf.test.snap index 7b7f8ee53..80a937268 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test.snap +++ b/subworkflows/local/qc_workflow/test/main.nf.test.snap @@ -27,6 +27,8 @@ ], "meta": { "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, "timestamp": "2025-08-28T17:08:08.334459479" } -} \ No newline at end of file +} From a3472084b4e2a1d63a2bd90e088d84c63c57cac2 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 1 Sep 2025 16:15:12 +0200 Subject: [PATCH 820/887] reshuffling --- subworkflows/local/fusioninspector_workflow/main.nf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index 9d5711ad4..2c3213ccc 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -55,6 +55,11 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) fusion_data = tsv_abridged_nonempty.combine(AGAT_CONVERTSPGFF2TSV.out.tsv, fusionreport_out, fusionreport_csv).ifEmpty { Channel.empty() } + fusion_data = tsv_abridged_nonempty + .combine(AGAT_CONVERTSPGFF2TSV.out.tsv) + .combine(fusionreport_out) + .combine(fusionreport_csv) + .ifEmpty{ Channel.empty() } VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) From fcfe9b17302bac4038c8b3ba3cf361a4c47aeafa Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:07:54 +0200 Subject: [PATCH 821/887] Update CHANGELOG.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a35d7776..c839ac19b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,7 +89,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update logo [#715](https://github.com/nf-core/rnafusion/pull/715) - Replaced local `STARFUSION_BUILD` for module from nf-core [#709](https://github.com/nf-core/rnafusion/pull/709) - Modified `test_build` profile to use a reduced version of Pfam and Dfam files [#733](https://github.com/nf-core/rnafusion/pull/733) -- Updated the documentation to reflect the changes done in the release [#741](https://github.com/nf-core/rnafusion/pull/741) +- Updated the documentation to reflect the changes done in this release [#741](https://github.com/nf-core/rnafusion/pull/741) ### Fixed From 021f5f8f2acc5beb2b6f1a4a69fd7bfa0c5e5765 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:11:21 +0200 Subject: [PATCH 822/887] Update docs/output.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index e8ad8fefd..a6b79f190 100644 --- a/docs/output.md +++ b/docs/output.md @@ -95,7 +95,7 @@ If no parameters are specified, the default is applied. ### Agat -[Arriba](https://github.com/NBISweden/AGAT) is to convert the GFF file to a TSV file, which is then used in the VCF creation. +[Agat](https://github.com/NBISweden/AGAT) is to convert the GFF file to a TSV file, which is then used in the VCF creation.
    Output files From 23210771ed62159f992b7316636c3fa3bd30d67a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:11:32 +0200 Subject: [PATCH 823/887] Update docs/output.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- docs/output.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index a6b79f190..c1044c4d8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -158,7 +158,9 @@ If `--tools ctatsplicing` is present, [CTAT-SPLICING](https://github.com/Trinity ### Fastp -If `--tools fastp` is present, [fastp](https://github.com/OpenGene/fastp) will filter low quality reads as well as bases at the 5' and 3' ends, trim adapters (automatically detected, but input with parameter `--adapter_fasta` is possible). 3' trimming is also possible via parameter `--trim_tail_fusioncatcher`. +If `--tools fastp` is present, [fastp](https://github.com/OpenGene/fastp) will filter low quality reads as well as bases at the 5' and 3' ends, trim adapters (automatically detected, but input with parameter `--adapter_fasta` is possible). 3' trimming is also possible via parameter `--trim_tail`. + +As fusioncatcher is especially sensitive to read length, 100 bp being the recommended length, an additional parameter `--trim_tail_fusioncatcher` triggers an extra fastp process with 3' trimming of the length given, these triggered reads are then fed to fusioncatcher but the non-extra trimmed ones are still used for arriba and STAR-Fusion.
    Output files From 71fb65278a8b72919c73a0c022ab427db5b780ee Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:11:46 +0200 Subject: [PATCH 824/887] Update README.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1645c0ca3..8187200b7 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,8 @@ The pipeline is also able to build the references in case files from a specific 4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR) 5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba) 6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) -7. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher) +7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected) +7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher) 8. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/) 9. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) 10. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) From 69a133cf66b58c638b6f2d1b1eca3344eca65640 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:11:56 +0200 Subject: [PATCH 825/887] Update README.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8187200b7..84c11805d 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ The pipeline is also able to build the references in case files from a specific 10. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) 11. Post-processing and analysis of data - [FusionInspector](https://github.com/FusionInspector/FusionInspector) + - Summarize information into a VCF file - [Arriba](https://github.com/suhrig/arriba) visualisation - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) 12. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) From 9888efb024013f6324737fb30d09c66bff3dd19d Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:12:14 +0200 Subject: [PATCH 826/887] Update docs/output.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- docs/output.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index c1044c4d8..8795bf6a6 100644 --- a/docs/output.md +++ b/docs/output.md @@ -399,4 +399,3 @@ Vcf-collect takes as input the results of fusion-report and fusioninspector. Tha
    -[Megafusion](https://github.com/J35P312/MegaFusion) converts RNA fusion files to SV VCF and collects statistics and metrics in a VCF file. From f1b4a6f8990702f3da4ea899f364be2eb2691257 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 1 Sep 2025 17:12:59 +0200 Subject: [PATCH 827/887] add missing links --- README.md | 2 +- docs/usage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1645c0ca3..b47b62498 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ The pipeline is also able to build the references in case files from a specific 8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs > [!WARNING] -> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. +> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. See the [References](#references) section for more information. #### Main workflow diff --git a/docs/usage.md b/docs/usage.md index d05e4f6f9..df2a100d6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,7 +10,7 @@ The pipeline is divided into two parts: 1. Download and build references -- Download the references from the S3 bucket (recommended) or build them with the pipeline +- [Download](#download-and-build-references) the references from the S3 bucket (recommended) or build them with the pipeline - **Important**: has to be done with each new release 2. Running the analysis From ada6a0d5867b2c116eac5958d737b0b80dbcef89 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 1 Sep 2025 17:20:35 +0200 Subject: [PATCH 828/887] apply suggestions from comment --- conf/modules.config | 14 ++++++++++++++ docs/output.md | 10 +++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index e15c3914d..013814cce 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -139,6 +139,14 @@ process { ] } + withName: 'GATK4_CREATESEQUENCEDICTIONARY' { + publishDir = [ + path: { "${params.genomes_base}/GRCh38/gencode_v${params.genome_gencode_version}/gencode" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'GATK4_MARKDUPLICATES' { publishDir = [ path: { "${params.outdir}/picard" }, @@ -147,6 +155,12 @@ process { ] } + withName: 'GET_RRNA_TRANSCRIPTS' { + publishDir = [ + enabled: false + ] + } + withName: 'GFFREAD' { ext.args = { '-w -S' } publishDir = [ diff --git a/docs/output.md b/docs/output.md index 8795bf6a6..9f3a0dd20 100644 --- a/docs/output.md +++ b/docs/output.md @@ -36,11 +36,17 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `/` - `/` - - `fusion_report_db` + - `arriba/` + - `blacklist_hg38_GRCh38_v.tsv.gz` + - `cytobands_hg38_GRCh38_v.tsv` + - `known_fusions_hg38_GRCh38_v.tsv.gz` + - `protein_domains_hg38_GRCh38_v.gff3` + - `fusion_report_db/` - `cosmic.db` - `fusiongdb2.db` - `mitelman.db` - `gencode_v/` + - `fusioncatcher/` - `gencode/` - `Homo_sapiens.GRCh38..all.fa` - `Homo_sapiens.GRCh38..cdna.all.fa.gz` @@ -78,8 +84,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ├── fusioncatcher ├── fusioninspector ├── fusionreport -├── gatk4 -├── get ├── multiqc ├── picard ├── pipeline_info From 52b43dd0f279d2412ef00f5ff8ef5a4d4498204d Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 2 Sep 2025 07:52:16 +0000 Subject: [PATCH 829/887] chore: replace local for nf-core subworkflow --- modules.json | 9 ++- subworkflows/local/stringtie_workflow/main.nf | 36 ---------- .../stringtie_workflow/tests/main.nf.test | 70 ------------------- .../tests/main.nf.test.snap | 56 --------------- .../nf-core/bam_stringtie_merge/main.nf | 35 ++++++++++ .../nf-core/bam_stringtie_merge/meta.yml | 48 +++++++++++++ .../bam_stringtie_merge/tests/main.nf.test | 38 ++++++++++ .../tests/main.nf.test.snap | 27 +++++++ workflows/rnafusion.nf | 6 +- 9 files changed, 158 insertions(+), 167 deletions(-) delete mode 100644 subworkflows/local/stringtie_workflow/main.nf delete mode 100644 subworkflows/local/stringtie_workflow/tests/main.nf.test delete mode 100644 subworkflows/local/stringtie_workflow/tests/main.nf.test.snap create mode 100644 subworkflows/nf-core/bam_stringtie_merge/main.nf create mode 100644 subworkflows/nf-core/bam_stringtie_merge/meta.yml create mode 100644 subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test create mode 100644 subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test.snap diff --git a/modules.json b/modules.json index 1833dcc8d..c3555ee44 100644 --- a/modules.json +++ b/modules.json @@ -190,12 +190,12 @@ "stringtie/merge": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["modules"] + "installed_by": ["bam_stringtie_merge", "modules"] }, "stringtie/stringtie": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["modules"] + "installed_by": ["bam_stringtie_merge", "modules"] }, "ucsc/gtftogenepred": { "branch": "master", @@ -221,6 +221,11 @@ "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["bam_sort_stats_samtools"] }, + "bam_stringtie_merge": { + "branch": "master", + "git_sha": "5ce6cef7d4a100409aa30bca79b5020b6738767c", + "installed_by": ["subworkflows"] + }, "fastq_align_star": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", diff --git a/subworkflows/local/stringtie_workflow/main.nf b/subworkflows/local/stringtie_workflow/main.nf deleted file mode 100644 index 5d6d72fc7..000000000 --- a/subworkflows/local/stringtie_workflow/main.nf +++ /dev/null @@ -1,36 +0,0 @@ -include { STRINGTIE_STRINGTIE } from '../../../modules/nf-core/stringtie/stringtie/main' -include { STRINGTIE_MERGE } from '../../../modules/nf-core/stringtie/merge/main' - - -workflow STRINGTIE_WORKFLOW { - take: - bam_sorted // channel: [meta, bam] - ch_chrgtf // channel: [meta, gtf] - - main: - ch_versions = Channel.empty() - ch_stringtie_gtf = Channel.empty() - - STRINGTIE_STRINGTIE( - bam_sorted, - ch_chrgtf.map { _meta, gtf -> [ gtf ]} - ) - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - STRINGTIE_STRINGTIE - .out - .transcript_gtf - .map { it -> it[1] } - .set { stringtie_gtf } - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) - - - STRINGTIE_MERGE (stringtie_gtf, ch_chrgtf.map { _meta, gtf -> [ gtf ]}) - ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) - ch_stringtie_gtf = STRINGTIE_MERGE.out.gtf - - emit: - stringtie_gtf = ch_stringtie_gtf.ifEmpty(null) // channel: [meta, gtf] - versions = ch_versions // channel: [ path(versions.yml) ] - - } diff --git a/subworkflows/local/stringtie_workflow/tests/main.nf.test b/subworkflows/local/stringtie_workflow/tests/main.nf.test deleted file mode 100644 index da423ed57..000000000 --- a/subworkflows/local/stringtie_workflow/tests/main.nf.test +++ /dev/null @@ -1,70 +0,0 @@ -nextflow_workflow { - - name "Test STRINGTIE_WORKFLOW" - script "../main.nf" - workflow "STRINGTIE_WORKFLOW" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "stringtie" - - test("Should run stringtie workflow with stringtie = true") { - - when { - workflow { - """ - input[0] = Channel.of([ - [ id:'test', strandedness:'reverse' ], // meta map - file("${params.test_data_base}/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) - ]) - input[1] = Channel.of([ - [ id:'test' ], // meta map - file("${params.test_data_base}/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) - ]) - """ - } - params { - stringtie = true - outdir = "$outputDir" - test_data_base = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() }, - ) - } - } - - test("Should run stringtie workflow with params.all = true") { - - when { - workflow { - """ - input[0] = Channel.of([ - [ id:'test', strandedness:'reverse' ], // meta map - file("${params.test_data_base}/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) - ]) - input[1] = Channel.of([ - [ id:'test' ], // meta map - file("${params.test_data_base}/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) - ]) - """ - } - params { - all = true - outdir = "$outputDir" - test_data_base = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() }, - ) - } - } - -} diff --git a/subworkflows/local/stringtie_workflow/tests/main.nf.test.snap b/subworkflows/local/stringtie_workflow/tests/main.nf.test.snap deleted file mode 100644 index 2abc99913..000000000 --- a/subworkflows/local/stringtie_workflow/tests/main.nf.test.snap +++ /dev/null @@ -1,56 +0,0 @@ -{ - "Should run stringtie workflow with params.all = true": { - "content": [ - { - "0": [ - "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" - ], - "1": [ - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" - ], - "stringtie_gtf": [ - "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" - ], - "versions": [ - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-16T12:58:20.587179" - }, - "Should run stringtie workflow with stringtie = true": { - "content": [ - { - "0": [ - "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" - ], - "1": [ - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" - ], - "stringtie_gtf": [ - "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" - ], - "versions": [ - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,0abbefd068f245608a323d26fcaf6d0b", - "versions.yml:md5,be2acf8efb04dc33562c9d00df7c3a50" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-07-16T12:33:08.507844" - } -} \ No newline at end of file diff --git a/subworkflows/nf-core/bam_stringtie_merge/main.nf b/subworkflows/nf-core/bam_stringtie_merge/main.nf new file mode 100644 index 000000000..7cbd582ed --- /dev/null +++ b/subworkflows/nf-core/bam_stringtie_merge/main.nf @@ -0,0 +1,35 @@ +include { STRINGTIE_STRINGTIE } from '../../../modules/nf-core/stringtie/stringtie/main' +include { STRINGTIE_MERGE } from '../../../modules/nf-core/stringtie/merge/main' + + +workflow BAM_STRINGTIE_MERGE { + + take: + bam_sorted // channel: [ meta, bam ] + ch_chrgtf // channel: [ meta, gtf ] + + main: + ch_versions = Channel.empty() + ch_stringtie_gtfs = Channel.empty() + + STRINGTIE_STRINGTIE( + bam_sorted, + ch_chrgtf.map { _meta, gtf -> [ gtf ] } + ) + ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions) + + STRINGTIE_STRINGTIE.out.transcript_gtf + .map { it[1] } + .set { stringtie_gtfs } + + STRINGTIE_MERGE( + stringtie_gtfs, + ch_chrgtf.map { _meta, gtf -> [ gtf ] } + ) + ch_versions = ch_versions.mix(STRINGTIE_MERGE.out.versions) + ch_stringtie_gtfs = STRINGTIE_MERGE.out.gtf + + emit: + stringtie_gtf = ch_stringtie_gtfs // channel: [ meta, gtf ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/nf-core/bam_stringtie_merge/meta.yml b/subworkflows/nf-core/bam_stringtie_merge/meta.yml new file mode 100644 index 000000000..19c1496bf --- /dev/null +++ b/subworkflows/nf-core/bam_stringtie_merge/meta.yml @@ -0,0 +1,48 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "bam_stringtie_merge" +description: > + Assemble transcripts from sorted BAM alignments using StringTie, then merge + per-sample transcript GTFs into a unified annotation. +keywords: + - rna-seq + - transcript-assembly + - transcript-merge + - stringtie + - gtf +components: + - stringtie/stringtie + - stringtie/merge +input: + - bam_sorted: + type: file + description: | + Sorted alignment files. + Structure: [ val(meta), path(bam) ] + pattern: "*.bam" + - ch_chrgtf: + type: file + description: | + Reference gene annotation (GTF) for guided assembly and merge. + Structure: [ val(meta), path(gtf) ] + pattern: "*.gtf" +output: + - stringtie_gtf: + type: file + description: | + Merged transcript annotation produced by StringTie --merge. + Structure: [ val(meta), path(gtf) ] + pattern: "*.gtf" + - versions: + type: file + description: | + File containing software versions for the subworkflow components. + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@atrigila" + - "@rannick" + - "@nvnieuwk" +maintainers: + - "@atrigila" + - "@rannick" + - "@nvnieuwk" diff --git a/subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test b/subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test new file mode 100644 index 000000000..48408633d --- /dev/null +++ b/subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test @@ -0,0 +1,38 @@ +nextflow_workflow { + + name "Test BAM_STRINGTIE_MERGE" + script "../main.nf" + workflow "BAM_STRINGTIE_MERGE" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "stringtie" + tag "stringtie/stringtie" + tag "stringtie/merge" + tag "subworkflows/bam_stringtie_merge" + + test("Should run stringtie subworkflow") { + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', strandedness:'reverse' ], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() }, + ) + } + } + +} \ No newline at end of file diff --git a/subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test.snap b/subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test.snap new file mode 100644 index 000000000..f671dd0b0 --- /dev/null +++ b/subworkflows/nf-core/bam_stringtie_merge/tests/main.nf.test.snap @@ -0,0 +1,27 @@ +{ + "Should run stringtie subworkflow": { + "content": [ + { + "0": [ + "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" + ], + "1": [ + "versions.yml:md5,3ab29dfb260f355cad809acd8dbd1424", + "versions.yml:md5,7c84e875854527473ba6ada66b51e4a6" + ], + "stringtie_gtf": [ + "stringtie.merged.gtf:md5,6da479298d73d5b3216d4e1576a2bdf4" + ], + "versions": [ + "versions.yml:md5,3ab29dfb260f355cad809acd8dbd1424", + "versions.yml:md5,7c84e875854527473ba6ada66b51e4a6" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-31T23:17:24.40243201" + } +} \ No newline at end of file diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index afbfa37d7..eb792032a 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -9,7 +9,7 @@ include { CAT_FASTQ } from '../modules/nf-core/cat/fastq/m include { FASTQ_FASTQC_UMITOOLS_FASTP } from '../subworkflows/nf-core/fastq_fastqc_umitools_fastp/main' include { QC_WORKFLOW } from '../subworkflows/local/qc_workflow' include { STARFUSION_DETECT } from '../modules/nf-core/starfusion/detect/main' -include { STRINGTIE_WORKFLOW } from '../subworkflows/local/stringtie_workflow/main' +include { BAM_STRINGTIE_MERGE } from '../subworkflows/nf-core/bam_stringtie_merge/main' include { FUSIONCATCHER_WORKFLOW } from '../subworkflows/local/fusioncatcher_workflow' include { FUSIONINSPECTOR_WORKFLOW } from '../subworkflows/local/fusioninspector_workflow' include { FUSIONREPORT_DETECT } from '../modules/nf-core/fusionreport/detect/main' @@ -312,11 +312,11 @@ workflow RNAFUSION { // if(tools.contains("stringtie")) { - STRINGTIE_WORKFLOW ( + BAM_STRINGTIE_MERGE ( ch_aligned_reads.map { meta, bam, _bai -> [meta, bam]}, BUILD_REFERENCES.out.gtf ) - ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions) + ch_versions = ch_versions.mix(BAM_STRINGTIE_MERGE.out.versions) } // From d43cf513eced86b22f186a40eeeebd8acc30b4c2 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 2 Sep 2025 10:20:39 +0200 Subject: [PATCH 830/887] remove baseDir in rrna transcript --- modules/local/get_rrna_transcript/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/get_rrna_transcript/main.nf b/modules/local/get_rrna_transcript/main.nf index 901c17b42..79b544791 100644 --- a/modules/local/get_rrna_transcript/main.nf +++ b/modules/local/get_rrna_transcript/main.nf @@ -20,9 +20,9 @@ process GET_RRNA_TRANSCRIPTS { script: """ - $baseDir/bin/get_rrna_transcripts.py ${gtf} rrna.gtf + get_rrna_transcripts.py ${gtf} rrna.gtf - $baseDir/bin/gtf2bed rrna.gtf > rrna.bed + gtf2bed rrna.gtf > rrna.bed cat <<-END_VERSIONS > versions.yml "${task.process}": From 59fcd5438d0b5229b2b6db3a3a918d232a3ff302 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:27:39 +0200 Subject: [PATCH 831/887] Update subworkflows/local/fusioninspector_workflow/main.nf Co-authored-by: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> --- subworkflows/local/fusioninspector_workflow/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index 2c3213ccc..5e2ead7da 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -54,7 +54,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { AGAT_CONVERTSPGFF2TSV(gtf_nonempty) ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) - fusion_data = tsv_abridged_nonempty.combine(AGAT_CONVERTSPGFF2TSV.out.tsv, fusionreport_out, fusionreport_csv).ifEmpty { Channel.empty() } + fusion_data = tsv_abridged_nonempty.combine(AGAT_CONVERTSPGFF2TSV.out.tsv, fusionreport_out, fusionreport_csv) fusion_data = tsv_abridged_nonempty .combine(AGAT_CONVERTSPGFF2TSV.out.tsv) .combine(fusionreport_out) From 08c7dec29006e09fe074200976bf08ccab5d668f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:27:45 +0200 Subject: [PATCH 832/887] Update subworkflows/local/fusioninspector_workflow/main.nf Co-authored-by: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> --- subworkflows/local/fusioninspector_workflow/main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index 5e2ead7da..4d3d61b9a 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -59,7 +59,6 @@ workflow FUSIONINSPECTOR_WORKFLOW { .combine(AGAT_CONVERTSPGFF2TSV.out.tsv) .combine(fusionreport_out) .combine(fusionreport_csv) - .ifEmpty{ Channel.empty() } VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) From ddd26f2084eefb563e75284b38d759e00124a530 Mon Sep 17 00:00:00 2001 From: atrigila <18577080+atrigila@users.noreply.github.com> Date: Tue, 2 Sep 2025 08:33:13 +0000 Subject: [PATCH 833/887] chore: replace gtftorefflat for nf-core module --- CHANGELOG.md | 1 + conf/modules.config | 4 +- .../local/uscs/custom_gtftogenepred/main.nf | 39 ------ subworkflows/local/build_references/main.nf | 8 +- tests/test_build.nf.test.snap | 10 +- tests/test_stub.nf.test.snap | 113 ++++++++++-------- tests/test_stub_bam.nf.test.snap | 104 ++++++++-------- 7 files changed, 132 insertions(+), 147 deletions(-) delete mode 100644 modules/local/uscs/custom_gtftogenepred/main.nf diff --git a/CHANGELOG.md b/CHANGELOG.md index f88ce94af..e995541cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changed local `ARRIBA_VISUALIZATION`, `CTATSPLICING_STARTOCANCERINTRONS`, `CTATSPLICING_PREPGENOMELIB`, `FUSIONINSPECTOR`, `STARFUSION_DETECT` for its nf-core module versions [#740](https://github.com/nf-core/rnafusion/pull/740) - Replaced local subworkflow `TRIM_WORKFLOW` for its nf-core subworkflow equivalent `FASTQ_FASTQC_UMITOOLS_FASTP` [#752](https://github.com/nf-core/rnafusion/pull/752) - Changed local `FASTQ_ALIGN_STAR` for subworkflow from nf-core [#756](https://github.com/nf-core/rnafusion/pull/756) +- Replaced local subworkflow `STRINGTIE_WORKFLOW` for its nf-core version `BAM_STRINGTIE_MERGE` and the local module module `GTF_TO_REFFLAT` for nf-core's `UCSC_GTFTOGENEPRED` [#758](https://github.com/nf-core/rnafusion/pull/758) ### Fixed diff --git a/conf/modules.config b/conf/modules.config index da5569f14..517209790 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -166,8 +166,8 @@ process { ] } - withName: 'GTF_TO_REFFLAT' { - ext.args = "-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons" + withName: 'UCSC_GTFTOGENEPRED' { + ext.args = '-genePredExt -geneNameAsName2 -ignoreGroupsWithoutExons' publishDir = [ path: { "${params.genomes_base}/GRCh38/gencode_v${params.genome_gencode_version}/gencode" }, mode: params.publish_dir_mode, diff --git a/modules/local/uscs/custom_gtftogenepred/main.nf b/modules/local/uscs/custom_gtftogenepred/main.nf deleted file mode 100644 index 9cc15765e..000000000 --- a/modules/local/uscs/custom_gtftogenepred/main.nf +++ /dev/null @@ -1,39 +0,0 @@ -process GTF_TO_REFFLAT { - tag "$meta.id" - label 'process_low' - - conda "bioconda::ucsc-gtftogenepred=377" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ucsc-gtftogenepred:377--ha8a8165_5' : - 'quay.io/biocontainers/ucsc-gtftogenepred:377--ha8a8165_5' }" - - input: - tuple val(meta), path (gtf) - - output: - path('*.refflat') , emit: refflat - path "versions.yml" , emit: versions - - script: - def genepred = gtf + '.genepred' - def refflat = gtf + '.refflat' - """ - gtfToGenePred -genePredExt -geneNameAsName2 ${gtf} ${genepred} - paste ${genepred} ${genepred} | cut -f12,16-25 > ${refflat} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gtfToGenePred: 377 - END_VERSIONS - """ - - stub: - def refflat = gtf + '.refflat' - """ - touch ${refflat} - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gtfToGenePred: 377 - END_VERSIONS - """ -} diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index a7e9e859a..7ac3285a2 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -6,13 +6,13 @@ include { GENCODE_DOWNLOAD } from '../../../modules/local/gencode_download/main' include { HGNC_DOWNLOAD } from '../../../modules/local/hgnc/main' -include { GTF_TO_REFFLAT } from '../../../modules/local/uscs/custom_gtftogenepred/main' /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS ======================================================================================== */ +include { UCSC_GTFTOGENEPRED } from '../../../modules/nf-core/ucsc/gtftogenepred/main' include { CTATSPLICING_PREPGENOMELIB } from '../../../modules/nf-core/ctatsplicing/prepgenomelib/main.nf' include { BIOAWK } from '../../../modules/nf-core/bioawk/main' include { AGAT_CONVERTGFF2BED } from '../../../modules/nf-core/agat/convertgff2bed/main' @@ -101,9 +101,9 @@ workflow BUILD_REFERENCES { def ch_refflat = Channel.empty() if (!params.skip_qc) { if (!exists_not_empty(params.refflat)){ - GTF_TO_REFFLAT(ch_gtf) - ch_versions = ch_versions.mix(GTF_TO_REFFLAT.out.versions) - ch_refflat = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } + UCSC_GTFTOGENEPRED(ch_gtf) + ch_versions = ch_versions.mix(UCSC_GTFTOGENEPRED.out.versions) + ch_refflat = UCSC_GTFTOGENEPRED.out.refflat.map { meta, rf -> [[id: meta.id], rf] } } else { ch_refflat = Channel.fromPath(params.refflat).map { that -> [[id:that.Name], that] } } diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 4bdf1c518..7e0e54ae2 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -24,9 +24,6 @@ "GFFREAD": { "gffread": "0.12.7" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "HGNC_DOWNLOAD": { "wget": "1.21.4" }, @@ -46,6 +43,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -70,6 +70,7 @@ "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/minigenome.fa.fai", "references/GRCh38/gencode_v46/gencode/minigenome.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/minigenome.gtf.genepred", "references/GRCh38/gencode_v46/gencode/minigenome.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/minigenome.gtf.refflat", "references/GRCh38/gencode_v46/salmon", @@ -197,6 +198,7 @@ "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", + "minigenome.gtf.genepred:md5,c5b0d2118efd89f7a2831e2dc486b999", "minigenome.gtf.interval_list:md5,6496748a0994cb8a9764761ae74f8004", "minigenome.gtf.refflat:md5,ed76bc063c98087f1100a928923758c7", "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", @@ -285,6 +287,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T16:53:43.678975494" + "timestamp": "2025-09-02T08:18:01.248835367" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index dfe100279..5a3a1bc32 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -25,9 +25,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -70,6 +67,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -104,6 +104,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -234,9 +235,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:20:40.211602465" + "timestamp": "2025-09-02T08:22:03.749618742" }, "stub test stringtie": { "content": [ @@ -264,9 +265,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -307,6 +305,9 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -341,6 +342,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -398,9 +400,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:21:21.812203485" + "timestamp": "2025-09-02T08:22:39.560551811" }, "stub test arriba": { "content": [ @@ -431,9 +433,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -468,6 +467,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -505,6 +507,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -555,9 +558,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:15:00.863385937" + "timestamp": "2025-09-02T08:19:38.026180355" }, "stub test fusioninspector": { "content": [ @@ -603,9 +606,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "HGNC_DOWNLOAD": { "wget": "1.21.4" }, @@ -648,6 +648,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "VCF_COLLECT": { "python": "3.11.0", "vcf_collect": 0.1 @@ -716,6 +719,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -847,9 +851,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:31:32.043336569" + "timestamp": "2025-09-02T08:25:11.604461904" }, "stub test salmon": { "content": [ @@ -876,9 +880,6 @@ "GFFREAD": { "gffread": "0.12.7" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "SALMON_INDEX": { "salmon": "1.10.3" }, @@ -888,6 +889,9 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -914,6 +918,7 @@ "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -944,7 +949,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:27:42.592742898" + "timestamp": "2025-09-02T08:24:28.067668122" }, "stub test ctatsplicing": { "content": [ @@ -978,9 +983,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -1020,6 +1022,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1066,6 +1071,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1197,9 +1203,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-27T18:42:46.678568423" + "timestamp": "2025-09-02T08:20:13.319176919" }, "stub test fusionreport": { "content": [ @@ -1239,9 +1245,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -1284,6 +1287,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1339,6 +1345,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1469,9 +1476,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:26:22.470758896" + "timestamp": "2025-09-02T08:23:24.792491035" }, "stub test fastp": { "content": [ @@ -1501,12 +1508,12 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1541,6 +1548,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1551,7 +1559,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T22:48:35.622133369" + "timestamp": "2025-09-02T08:23:56.858216733" }, "stub test fusioncatcher": { "content": [ @@ -1578,12 +1586,12 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1613,6 +1621,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1623,7 +1632,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:16:52.604596162" + "timestamp": "2025-09-02T08:20:49.030393254" }, "stub test fusioncatcher trim": { "content": [ @@ -1653,12 +1662,12 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1694,6 +1703,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1704,7 +1714,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:17:29.899160389" + "timestamp": "2025-09-02T08:21:15.319414382" }, "stub test all": { "content": [ @@ -1768,9 +1778,6 @@ "GFFREAD": { "gffread": "0.12.7" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "HGNC_DOWNLOAD": { "wget": "1.21.4" }, @@ -1828,6 +1835,9 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "VCF_COLLECT": { "python": "3.11.0", "vcf_collect": 0.1 @@ -1922,6 +1932,7 @@ "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -2089,8 +2100,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T22:48:04.457572169" + "timestamp": "2025-09-02T08:19:03.489568486" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 697d2e898..af94c528c 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -25,9 +25,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -50,6 +47,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -84,6 +84,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -189,9 +190,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T23:14:20.283916876" + "timestamp": "2025-09-02T08:29:13.77559568" }, "stub test stringtie": { "content": [ @@ -219,9 +220,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -242,6 +240,9 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -276,6 +277,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -311,9 +313,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T23:15:30.482022054" + "timestamp": "2025-09-02T08:29:53.58622226" }, "stub test arriba": { "content": [ @@ -344,9 +346,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -361,6 +360,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -398,6 +400,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -423,9 +426,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T22:48:22.193453934" + "timestamp": "2025-09-02T08:26:49.642086755" }, "stub test fusioninspector": { "content": [ @@ -471,9 +474,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "HGNC_DOWNLOAD": { "wget": "1.21.4" }, @@ -496,6 +496,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "VCF_COLLECT": { "python": "3.11.0", "vcf_collect": 0.1 @@ -564,6 +567,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -673,9 +677,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T23:30:41.022404222" + "timestamp": "2025-09-02T08:32:46.154112416" }, "stub test salmon": { "content": [ @@ -706,9 +710,6 @@ "GFFREAD": { "gffread": "0.12.7" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -724,6 +725,9 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -759,6 +763,7 @@ "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -789,7 +794,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:45:12.252856442" + "timestamp": "2025-09-02T08:31:56.747683511" }, "stub test ctatsplicing": { "content": [ @@ -823,9 +828,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -845,6 +847,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -891,6 +896,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1000,9 +1006,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T23:06:10.100949608" + "timestamp": "2025-09-02T08:27:33.646044212" }, "stub test fusionreport": { "content": [ @@ -1042,9 +1048,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -1067,6 +1070,9 @@ "samtools": 1.21, "gawk": "5.1.0" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1122,6 +1128,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1227,9 +1234,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T23:22:51.682095887" + "timestamp": "2025-09-02T08:30:34.704355039" }, "stub test fastp": { "content": [ @@ -1263,9 +1270,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -1275,6 +1279,9 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1318,6 +1325,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1328,7 +1336,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T22:51:21.946095021" + "timestamp": "2025-09-02T08:31:12.481382473" }, "stub test fusioncatcher": { "content": [ @@ -1359,9 +1367,6 @@ "GENCODE_DOWNLOAD": { "wget": "1.21.4" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "PICARD_COLLECTINSERTSIZEMETRICS": { "picard": "3.3.0" }, @@ -1371,6 +1376,9 @@ "SAMTOOLS_FAIDX": { "samtools": 1.21 }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "Workflow": { "nf-core/rnafusion": "v4.0.0dev" } @@ -1409,6 +1417,7 @@ "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1419,7 +1428,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-21T18:38:43.272605368" + "timestamp": "2025-09-02T08:28:10.779582543" }, "stub test all": { "content": [ @@ -1483,9 +1492,6 @@ "GFFREAD": { "gffread": "0.12.7" }, - "GTF_TO_REFFLAT": { - "gtfToGenePred": 377 - }, "HGNC_DOWNLOAD": { "wget": "1.21.4" }, @@ -1523,6 +1529,9 @@ "STRINGTIE_STRINGTIE": { "stringtie": "2.2.3" }, + "UCSC_GTFTOGENEPRED": { + "ucsc": 447 + }, "VCF_COLLECT": { "python": "3.11.0", "vcf_collect": 0.1 @@ -1617,6 +1626,7 @@ "references/GRCh38/gencode_v46/gencode", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", @@ -1762,8 +1772,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T23:00:13.773945342" + "timestamp": "2025-09-02T08:26:08.667543202" } } \ No newline at end of file From ddbfd78cd1535ff7a7758755f304a64ed8d41cc4 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 2 Sep 2025 10:36:58 +0200 Subject: [PATCH 834/887] fix linting --- README.md | 16 ++++++++-------- docs/output.md | 1 - docs/usage.md | 2 +- ro-crate-metadata.json | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 5a2b788eb..6da8f3b1a 100644 --- a/README.md +++ b/README.md @@ -64,18 +64,18 @@ The pipeline is also able to build the references in case files from a specific 4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR) 5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba) 6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) -7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected) -7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher) -8. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/) -9. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) -10. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) -11. Post-processing and analysis of data + 7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected) + 7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher) +7. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/) +8. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) +9. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) +10. Post-processing and analysis of data - [FusionInspector](https://github.com/FusionInspector/FusionInspector) - Summarize information into a VCF file - [Arriba](https://github.com/suhrig/arriba) visualisation - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) -12. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) -13. Compress bam files to cram with [samtools view](http://www.htslib.org/) +11. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +12. Compress bam files to cram with [samtools view](http://www.htslib.org/) ## Usage diff --git a/docs/output.md b/docs/output.md index 9f3a0dd20..9937f7fb4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -402,4 +402,3 @@ The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, `pa Vcf-collect takes as input the results of fusion-report and fusioninspector. That means fusions from all tools are aggregated. Fusioninspector applies a filter so it is possible some fusions detected by a caller are not filtered out by fusioninspector. In those cases, vcf-collect will display the fusions, but a lot of data will be missing as fusioninspector performs the analysis for each fusion.
    - diff --git a/docs/usage.md b/docs/usage.md index df2a100d6..d0cee2b1a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -145,7 +145,7 @@ TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,forward | `sample` | Custom sample name. This value needs to be unique across all entries in the samplesheet and cannot contain spaces | ✅ | | `strandedness` | Strandedness: forward or reverse. | ✅ | | `fastq_1` | Full path to FastQ file for Illumina short reads 1. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`. | ❓ | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`". | ❓ | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File must exist, has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". It's recommended to always provide the FASTQ files because the pipeline will be able to create any missing files from these. The FASTQ files are required to run `salmon`, `fusioninspector` and `fusioncatcher`". | ❓ | | `bam` | Full path to the BAM file created with STAR. File has to exist and must have the extension ".bam". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The BAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `cram` fields are empty. | ❓ | | `bai` | Full path to the index of the BAM file. File has to exist and must have the extension ".bai". | ❌ | | `cram` | Full path to the CRAM file created with STAR. File has to exist and must have the extension ".cram". It's the responsibility of the pipeline user to make sure this file has been correctly created, see the [prepare chapter](#preparing-bamcramjunctionssplice_junctions) for more information. The CRAM file is required to run `ctatsplicing`, `stringtie`, `fusioninspector` and `arriba` when the `fastq_1` and `bam` fields are empty. | ❓ | diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 68b7f82a0..dcaae2ca0 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "InProgress", "datePublished": "2025-07-08T11:39:11+00:00", - "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 3 fusion callers tools are created, and are also aggregated, most notably in a pdf visualisation document, a vcf data collection file, and html and tsv reports.\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results).\n\nIn rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human).\n\n## Pipeline summary\n\n![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png)\n\n### References\n\nThe references for the pipeline can be downloaded from the nf-core AWS megatests S3 bucket using the following command for the [AWS CLI tool](https://github.com/aws/aws-cli):\n\n```bash\naws --no-sign-request s3 sync s3://nf-core-awsmegatests/rnafusion/references/ \n```\n\nThe path to the downloaded references can then be provided to the pipeline with the `--genomes_base` parameter.\n\n\u26a0\ufe0f **Please note that the references are large and can take a long time to download, so it is recommended to download them once and use them for all future runs of the pipeline.**\n\nThe pipeline is also able to build the references in case files from a specific gencode version are missing (Note: only gencode 46 is available for fusioncatcher). This is done automatically when the expected references are not found and these files will be automatically published in the directory specified by the `--genomes_base` parameter. Use the `--references_only` parameter to trigger the reference building workflow only, without running the rest of the pipeline.\n\n1. Download gencode fasta and gtf files\n2. Download the HGNC nomenclature file\n3. Create files needed for QC (Sequence Dictionary and RRNA intervals)\n4. Convert the gtf file to a refflat file\n5. Create the [Salmon](https://salmon.readthedocs.io/en/latest/) index\n6. Create [STAR](https://github.com/alexdobin/STAR) index\n7. Build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) and [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) references\n8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs\n\n> [!WARNING]\n> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source.\n\n#### Main workflow\n\n1. Input samplesheet check\n2. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n3. Optional trimming with [fastp](https://github.com/OpenGene/fastp)\n4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR)\n5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba)\n6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion)\n7. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher)\n8. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/)\n9. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING)\n10. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report)\n11. Post-processing and analysis of data\n - [FusionInspector](https://github.com/FusionInspector/FusionInspector)\n - [Arriba](https://github.com/suhrig/arriba) visualisation\n - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-))\n12. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n13. Compress bam files to cram with [samtools view](http://www.htslib.org/)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nAs the reference building is computationally heavy (> 24h on HPC), we had to use dummy reference files in the test profile. Therefore, it is recommended to run the test profile with the `-stub` option.\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile test, \\\n --outdir \\\n -stub\n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n> **Notes:**\n>\n> - Conda is not currently supported; run with singularity or docker.\n> - Paths need to be absolute.\n> - GRCh38 is the only supported reference.\n> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp.\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick))\n\n## We thank the following people for their help in the development of this pipeline\n\n- [Phil Ewels](https://github.com/ewels)\n- [Rickard Hammar\u00e9n](https://github.com/Hammarn)\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Praveen Raj](https://github.com/praveenraj2018)\n- [Anabella Trigila](https://github.com/atrigila)\n- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnafusion for your analysis, please cite it using the following doi: [10.5281/zenodo.3946477](https://doi.org/10.5281/zenodo.3946477)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 3 fusion callers tools are created, and are also aggregated, most notably in a pdf visualisation document, a vcf data collection file, and html and tsv reports.\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results).\n\nIn rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human).\n\n## Pipeline summary\n\n![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png)\n\n### References\n\nThe references for the pipeline can be downloaded from the nf-core AWS megatests S3 bucket using the following command for the [AWS CLI tool](https://github.com/aws/aws-cli):\n\n```bash\naws --no-sign-request s3 sync s3://nf-core-awsmegatests/rnafusion/references/ \n```\n\nThe path to the downloaded references can then be provided to the pipeline with the `--genomes_base` parameter.\n\n\u26a0\ufe0f **Please note that the references are large and can take a long time to download, so it is recommended to download them once and use them for all future runs of the pipeline.**\n\nThe pipeline is also able to build the references in case files from a specific gencode version are missing (Note: only gencode 46 is available for fusioncatcher). This is done automatically when the expected references are not found and these files will be automatically published in the directory specified by the `--genomes_base` parameter. Use the `--references_only` parameter to trigger the reference building workflow only, without running the rest of the pipeline.\n\n1. Download gencode fasta and gtf files\n2. Download the HGNC nomenclature file\n3. Create files needed for QC (Sequence Dictionary and RRNA intervals)\n4. Convert the gtf file to a refflat file\n5. Create the [Salmon](https://salmon.readthedocs.io/en/latest/) index\n6. Create [STAR](https://github.com/alexdobin/STAR) index\n7. Build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) and [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) references\n8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs\n\n> [!WARNING]\n> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. See the [References](#references) section for more information.\n\n#### Main workflow\n\n1. Input samplesheet check\n2. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n3. Optional trimming with [fastp](https://github.com/OpenGene/fastp)\n4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR)\n5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba)\n6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion)\n7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected)\n7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher)\n8. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/)\n9. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING)\n10. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report)\n11. Post-processing and analysis of data\n - [FusionInspector](https://github.com/FusionInspector/FusionInspector)\n - Summarize information into a VCF file\n - [Arriba](https://github.com/suhrig/arriba) visualisation\n - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-))\n12. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n13. Compress bam files to cram with [samtools view](http://www.htslib.org/)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nAs the reference building is computationally heavy (> 24h on HPC), we had to use dummy reference files in the test profile. Therefore, it is recommended to run the test profile with the `-stub` option.\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile test, \\\n --outdir \\\n -stub\n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n> **Notes:**\n>\n> - Conda is not currently supported; run with singularity or docker.\n> - Paths need to be absolute.\n> - GRCh38 is the only supported reference.\n> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp.\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick))\n\n## We thank the following people for their help in the development of this pipeline\n\n- [Phil Ewels](https://github.com/ewels)\n- [Rickard Hammar\u00e9n](https://github.com/Hammarn)\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Praveen Raj](https://github.com/praveenraj2018)\n- [Anabella Trigila](https://github.com/atrigila)\n- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnafusion for your analysis, please cite it using the following doi: [10.5281/zenodo.3946477](https://doi.org/10.5281/zenodo.3946477)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" From ea84891d6bb93de280131859681c54f00ad100ed Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 2 Sep 2025 10:40:06 +0200 Subject: [PATCH 835/887] fix config --- conf/modules.config | 6 ------ 1 file changed, 6 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 1d75baf17..066bd4813 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -165,12 +165,6 @@ process { ] } - withName: 'GET_RRNA_TRANSCRIPTS' { - publishDir = [ - enabled: false - ] - } - withName: 'GFFREAD' { ext.args = { '-w -S' } publishDir = [ From 36221f8e09cdfd86eec8c55eb8cb6af2564cfd58 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:57:59 +0200 Subject: [PATCH 836/887] update --- subworkflows/local/fusioninspector_workflow/main.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index 2c3213ccc..8e1b3db2d 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -54,12 +54,10 @@ workflow FUSIONINSPECTOR_WORKFLOW { AGAT_CONVERTSPGFF2TSV(gtf_nonempty) ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) - fusion_data = tsv_abridged_nonempty.combine(AGAT_CONVERTSPGFF2TSV.out.tsv, fusionreport_out, fusionreport_csv).ifEmpty { Channel.empty() } fusion_data = tsv_abridged_nonempty .combine(AGAT_CONVERTSPGFF2TSV.out.tsv) .combine(fusionreport_out) .combine(fusionreport_csv) - .ifEmpty{ Channel.empty() } VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) From eeaf8bb77b223b1d6c22d526fd2d991ea77b9611 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Tue, 2 Sep 2025 11:03:35 +0200 Subject: [PATCH 837/887] fix lint --- ro-crate-metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index dcaae2ca0..3925e8228 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "InProgress", "datePublished": "2025-07-08T11:39:11+00:00", - "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 3 fusion callers tools are created, and are also aggregated, most notably in a pdf visualisation document, a vcf data collection file, and html and tsv reports.\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results).\n\nIn rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human).\n\n## Pipeline summary\n\n![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png)\n\n### References\n\nThe references for the pipeline can be downloaded from the nf-core AWS megatests S3 bucket using the following command for the [AWS CLI tool](https://github.com/aws/aws-cli):\n\n```bash\naws --no-sign-request s3 sync s3://nf-core-awsmegatests/rnafusion/references/ \n```\n\nThe path to the downloaded references can then be provided to the pipeline with the `--genomes_base` parameter.\n\n\u26a0\ufe0f **Please note that the references are large and can take a long time to download, so it is recommended to download them once and use them for all future runs of the pipeline.**\n\nThe pipeline is also able to build the references in case files from a specific gencode version are missing (Note: only gencode 46 is available for fusioncatcher). This is done automatically when the expected references are not found and these files will be automatically published in the directory specified by the `--genomes_base` parameter. Use the `--references_only` parameter to trigger the reference building workflow only, without running the rest of the pipeline.\n\n1. Download gencode fasta and gtf files\n2. Download the HGNC nomenclature file\n3. Create files needed for QC (Sequence Dictionary and RRNA intervals)\n4. Convert the gtf file to a refflat file\n5. Create the [Salmon](https://salmon.readthedocs.io/en/latest/) index\n6. Create [STAR](https://github.com/alexdobin/STAR) index\n7. Build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) and [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) references\n8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs\n\n> [!WARNING]\n> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. See the [References](#references) section for more information.\n\n#### Main workflow\n\n1. Input samplesheet check\n2. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n3. Optional trimming with [fastp](https://github.com/OpenGene/fastp)\n4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR)\n5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba)\n6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion)\n7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected)\n7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher)\n8. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/)\n9. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING)\n10. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report)\n11. Post-processing and analysis of data\n - [FusionInspector](https://github.com/FusionInspector/FusionInspector)\n - Summarize information into a VCF file\n - [Arriba](https://github.com/suhrig/arriba) visualisation\n - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-))\n12. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n13. Compress bam files to cram with [samtools view](http://www.htslib.org/)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nAs the reference building is computationally heavy (> 24h on HPC), we had to use dummy reference files in the test profile. Therefore, it is recommended to run the test profile with the `-stub` option.\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile test, \\\n --outdir \\\n -stub\n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n> **Notes:**\n>\n> - Conda is not currently supported; run with singularity or docker.\n> - Paths need to be absolute.\n> - GRCh38 is the only supported reference.\n> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp.\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick))\n\n## We thank the following people for their help in the development of this pipeline\n\n- [Phil Ewels](https://github.com/ewels)\n- [Rickard Hammar\u00e9n](https://github.com/Hammarn)\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Praveen Raj](https://github.com/praveenraj2018)\n- [Anabella Trigila](https://github.com/atrigila)\n- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnafusion for your analysis, please cite it using the following doi: [10.5281/zenodo.3946477](https://doi.org/10.5281/zenodo.3946477)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 3 fusion callers tools are created, and are also aggregated, most notably in a pdf visualisation document, a vcf data collection file, and html and tsv reports.\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results).\n\nIn rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human).\n\n## Pipeline summary\n\n![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png)\n\n### References\n\nThe references for the pipeline can be downloaded from the nf-core AWS megatests S3 bucket using the following command for the [AWS CLI tool](https://github.com/aws/aws-cli):\n\n```bash\naws --no-sign-request s3 sync s3://nf-core-awsmegatests/rnafusion/references/ \n```\n\nThe path to the downloaded references can then be provided to the pipeline with the `--genomes_base` parameter.\n\n\u26a0\ufe0f **Please note that the references are large and can take a long time to download, so it is recommended to download them once and use them for all future runs of the pipeline.**\n\nThe pipeline is also able to build the references in case files from a specific gencode version are missing (Note: only gencode 46 is available for fusioncatcher). This is done automatically when the expected references are not found and these files will be automatically published in the directory specified by the `--genomes_base` parameter. Use the `--references_only` parameter to trigger the reference building workflow only, without running the rest of the pipeline.\n\n1. Download gencode fasta and gtf files\n2. Download the HGNC nomenclature file\n3. Create files needed for QC (Sequence Dictionary and RRNA intervals)\n4. Convert the gtf file to a refflat file\n5. Create the [Salmon](https://salmon.readthedocs.io/en/latest/) index\n6. Create [STAR](https://github.com/alexdobin/STAR) index\n7. Build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) and [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) references\n8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs\n\n> [!WARNING]\n> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. See the [References](#references) section for more information.\n\n#### Main workflow\n\n1. Input samplesheet check\n2. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n3. Optional trimming with [fastp](https://github.com/OpenGene/fastp)\n4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR)\n5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba)\n6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion)\n 7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected)\n 7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher)\n7. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/)\n8. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING)\n9. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report)\n10. Post-processing and analysis of data\n - [FusionInspector](https://github.com/FusionInspector/FusionInspector)\n - Summarize information into a VCF file\n - [Arriba](https://github.com/suhrig/arriba) visualisation\n - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-))\n11. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n12. Compress bam files to cram with [samtools view](http://www.htslib.org/)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nAs the reference building is computationally heavy (> 24h on HPC), we had to use dummy reference files in the test profile. Therefore, it is recommended to run the test profile with the `-stub` option.\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile test, \\\n --outdir \\\n -stub\n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n> **Notes:**\n>\n> - Conda is not currently supported; run with singularity or docker.\n> - Paths need to be absolute.\n> - GRCh38 is the only supported reference.\n> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp.\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick))\n\n## We thank the following people for their help in the development of this pipeline\n\n- [Phil Ewels](https://github.com/ewels)\n- [Rickard Hammar\u00e9n](https://github.com/Hammarn)\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Praveen Raj](https://github.com/praveenraj2018)\n- [Anabella Trigila](https://github.com/atrigila)\n- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnafusion for your analysis, please cite it using the following doi: [10.5281/zenodo.3946477](https://doi.org/10.5281/zenodo.3946477)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" From e765480f93be36f8389536105f90902c30456cbe Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 2 Sep 2025 16:49:04 +0200 Subject: [PATCH 838/887] update snap --- tests/test_stub.nf.test.snap | 2066 ++++++++++++++++++++++++++++++++++ 1 file changed, 2066 insertions(+) create mode 100644 tests/test_stub.nf.test.snap diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap new file mode 100644 index 000000000..e472136c1 --- /dev/null +++ b/tests/test_stub.nf.test.snap @@ -0,0 +1,2066 @@ +{ + "stub test starfusion": { + "content": [ + 27, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", + "star", + "star/test.Aligned.sortedByCoord.bam.bai", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:37:02.108394" + }, + "stub test stringtie": { + "content": [ + 27, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", + "star", + "star/test.Aligned.sortedByCoord.bam.bai", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:38:46.627115" + }, + "stub test arriba": { + "content": [ + 26, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", + "star", + "star/test.Aligned.sortedByCoord.bam.bai", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T15:55:28.908716" + }, + "stub test fusioninspector": { + "content": [ + 31, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FUSIONINSPECTOR": { + "FusionInspector": "2.10.0" + }, + "FUSIONREPORT_DETECT": { + "fusion_report": "4.0.1" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "4.0.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": "1.21.4" + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioninspector", + "fusioninspector/test", + "fusioninspector/test/FusionInspector.log", + "fusioninspector/test/IGV_inputs", + "fusioninspector/test/chckpts_dir", + "fusioninspector/test/fi_workdir", + "fusioninspector/test/fi_workdir/test.gtf", + "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test/test.FusionInspector.fusions.tsv", + "fusioninspector/test/test.fusion_inspector_web.html", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/fusion_report_db", + "references/GRCh38/fusion_report_db/DB-timestamp.txt", + "references/GRCh38/fusion_report_db/cosmic.db", + "references/GRCh38/fusion_report_db/fusion_report.log", + "references/GRCh38/fusion_report_db/fusiongdb2.db", + "references/GRCh38/fusion_report_db/mitelman.db", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "references/GRCh38/hgnc", + "references/GRCh38/hgnc/HGNC-DB-timestamp.txt", + "references/GRCh38/hgnc/hgnc_complete_set.txt", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", + "star", + "star/test.Aligned.sortedByCoord.bam.bai", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:45:07.811039" + }, + "stub test salmon": { + "content": [ + 12, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/salmon", + "references/GRCh38/gencode_v46/salmon/complete_ref_lens.bin", + "references/GRCh38/gencode_v46/salmon/ctable.bin", + "references/GRCh38/gencode_v46/salmon/ctg_offsets.bin", + "references/GRCh38/gencode_v46/salmon/duplicate_clusters.tsv", + "references/GRCh38/gencode_v46/salmon/info.json", + "references/GRCh38/gencode_v46/salmon/mphf.bin", + "references/GRCh38/gencode_v46/salmon/pos.bin", + "references/GRCh38/gencode_v46/salmon/pre_indexing.log", + "references/GRCh38/gencode_v46/salmon/rank.bin", + "references/GRCh38/gencode_v46/salmon/refAccumLengths.bin", + "references/GRCh38/gencode_v46/salmon/ref_indexing.log", + "references/GRCh38/gencode_v46/salmon/reflengths.bin", + "references/GRCh38/gencode_v46/salmon/refseq.bin", + "references/GRCh38/gencode_v46/salmon/seq.bin", + "references/GRCh38/gencode_v46/salmon/versionInfo.json", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:43:03.790312" + }, + "stub test ctatsplicing": { + "content": [ + 28, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "CTATSPLICING_PREPGENOMELIB": { + "ctatsplicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "ctatsplicing", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", + "star", + "star/test.Aligned.sortedByCoord.bam.bai", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T15:57:11.157812" + }, + "stub test fusionreport": { + "content": [ + 31, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_FUSIONCATCHER": { + "fusioncatcher": "1.33" + }, + "FUSIONREPORT_DETECT": { + "fusion_report": "4.0.1" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "4.0.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/fusion_report_db", + "references/GRCh38/fusion_report_db/DB-timestamp.txt", + "references/GRCh38/fusion_report_db/cosmic.db", + "references/GRCh38/fusion_report_db/fusion_report.log", + "references/GRCh38/fusion_report_db/fusiongdb2.db", + "references/GRCh38/fusion_report_db/mitelman.db", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", + "star", + "star/test.Aligned.sortedByCoord.bam.bai", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:40:47.748229" + }, + "stub test fastp": { + "content": [ + 11, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTP": { + "fastp": "0.24.0" + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FASTQC_TRIM": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:41:54.637163" + }, + "stub test fusioncatcher": { + "content": [ + 10, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_FUSIONCATCHER": { + "fusioncatcher": "1.33" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T15:58:18.715882" + }, + "stub test fusioncatcher trim": { + "content": [ + 11, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTP_FOR_FUSIONCATCHER": { + "fastp": "0.24.0" + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_FUSIONCATCHER": { + "fusioncatcher": "1.33" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastp_for_fusioncatcher", + "fastp_for_fusioncatcher/test_trimmed_for_fusioncatcher.fastp.html", + "fastp_for_fusioncatcher/test_trimmed_for_fusioncatcher.fastp.json", + "fastp_for_fusioncatcher/test_trimmed_for_fusioncatcher.fastp.log", + "fastp_for_fusioncatcher/test_trimmed_for_fusioncatcher_1.fastp.fastq.gz", + "fastp_for_fusioncatcher/test_trimmed_for_fusioncatcher_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T15:59:24.345391" + }, + "stub test all": { + "content": [ + 42, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "CTATSPLICING_PREPGENOMELIB": { + "ctatsplicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTP": { + "fastp": "0.24.0" + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FASTQC_TRIM": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_FUSIONCATCHER": { + "fusioncatcher": "1.33" + }, + "FUSIONINSPECTOR": { + "FusionInspector": "2.10.0" + }, + "FUSIONREPORT_DETECT": { + "fusion_report": "4.0.1" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "4.0.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": "1.21.4" + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_SORT": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, + "STAR_ALIGN": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "ctatsplicing", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", + "fusioninspector", + "fusioninspector/test", + "fusioninspector/test/FusionInspector.log", + "fusioninspector/test/IGV_inputs", + "fusioninspector/test/chckpts_dir", + "fusioninspector/test/fi_workdir", + "fusioninspector/test/fi_workdir/test.gtf", + "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test/test.FusionInspector.fusions.tsv", + "fusioninspector/test/test.fusion_inspector_web.html", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/fusion_report_db", + "references/GRCh38/fusion_report_db/DB-timestamp.txt", + "references/GRCh38/fusion_report_db/cosmic.db", + "references/GRCh38/fusion_report_db/fusion_report.log", + "references/GRCh38/fusion_report_db/fusiongdb2.db", + "references/GRCh38/fusion_report_db/mitelman.db", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/salmon", + "references/GRCh38/gencode_v46/salmon/complete_ref_lens.bin", + "references/GRCh38/gencode_v46/salmon/ctable.bin", + "references/GRCh38/gencode_v46/salmon/ctg_offsets.bin", + "references/GRCh38/gencode_v46/salmon/duplicate_clusters.tsv", + "references/GRCh38/gencode_v46/salmon/info.json", + "references/GRCh38/gencode_v46/salmon/mphf.bin", + "references/GRCh38/gencode_v46/salmon/pos.bin", + "references/GRCh38/gencode_v46/salmon/pre_indexing.log", + "references/GRCh38/gencode_v46/salmon/rank.bin", + "references/GRCh38/gencode_v46/salmon/refAccumLengths.bin", + "references/GRCh38/gencode_v46/salmon/ref_indexing.log", + "references/GRCh38/gencode_v46/salmon/reflengths.bin", + "references/GRCh38/gencode_v46/salmon/refseq.bin", + "references/GRCh38/gencode_v46/salmon/seq.bin", + "references/GRCh38/gencode_v46/salmon/versionInfo.json", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "references/GRCh38/hgnc", + "references/GRCh38/hgnc/HGNC-DB-timestamp.txt", + "references/GRCh38/hgnc/hgnc_complete_set.txt", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json", + "samtools", + "samtools/test.Aligned.sortedByCoord.bam", + "samtools/test.flagstat", + "samtools/test.idxstats", + "samtools/test.stats", + "star", + "star/test.Aligned.sortedByCoord.bam.bai", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "star/test.Aligned.unsort.out.bam", + "star/test.Chimeric.out.junction", + "star/test.Log.final.out", + "star/test.Log.out", + "star/test.Log.progress.out", + "star/test.ReadsPerGene.out.tab", + "star/test.SJ.out.tab", + "star/test.Signal.UniqueMultiple.str1.out.bg", + "star/test.Signal.UniqueMultiple.str1.out.wig", + "star/test.out.sam", + "star/test.sortedByCoord.out.bam", + "star/test.tab", + "star/test.toTranscriptome.out.bam", + "star/test.unmapped_1.fastq.gz", + "star/test.unmapped_2.fastq.gz", + "star/testXd.out.bam", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T15:53:38.903818" + } +} \ No newline at end of file From 9dddc255031e5e205af98cf2c1eede46792b41e0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 2 Sep 2025 17:07:49 +0200 Subject: [PATCH 839/887] udpate snap bam --- tests/test_stub_bam.nf.test.snap | 1739 ++++++++++++++++++++++++++++++ 1 file changed, 1739 insertions(+) create mode 100644 tests/test_stub_bam.nf.test.snap diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap new file mode 100644 index 000000000..f2baf94f9 --- /dev/null +++ b/tests/test_stub_bam.nf.test.snap @@ -0,0 +1,1739 @@ +{ + "stub test starfusion": { + "content": [ + 15, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:58:08.911034" + }, + "stub test stringtie": { + "content": [ + 16, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:59:44.881636" + }, + "stub test arriba": { + "content": [ + 14, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:53:13.922071" + }, + "stub test fusioninspector": { + "content": [ + 20, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FUSIONINSPECTOR": { + "FusionInspector": "2.10.0" + }, + "FUSIONREPORT_DETECT": { + "fusion_report": "4.0.1" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "4.0.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": "1.21.4" + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioninspector", + "fusioninspector/test", + "fusioninspector/test/FusionInspector.log", + "fusioninspector/test/IGV_inputs", + "fusioninspector/test/chckpts_dir", + "fusioninspector/test/fi_workdir", + "fusioninspector/test/fi_workdir/test.gtf", + "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test/test.FusionInspector.fusions.tsv", + "fusioninspector/test/test.fusion_inspector_web.html", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/fusion_report_db", + "references/GRCh38/fusion_report_db/DB-timestamp.txt", + "references/GRCh38/fusion_report_db/cosmic.db", + "references/GRCh38/fusion_report_db/fusion_report.log", + "references/GRCh38/fusion_report_db/fusiongdb2.db", + "references/GRCh38/fusion_report_db/mitelman.db", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "references/GRCh38/hgnc", + "references/GRCh38/hgnc/HGNC-DB-timestamp.txt", + "references/GRCh38/hgnc/hgnc_complete_set.txt", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T17:06:31.98408" + }, + "stub test salmon": { + "content": [ + 15, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/salmon", + "references/GRCh38/gencode_v46/salmon/complete_ref_lens.bin", + "references/GRCh38/gencode_v46/salmon/ctable.bin", + "references/GRCh38/gencode_v46/salmon/ctg_offsets.bin", + "references/GRCh38/gencode_v46/salmon/duplicate_clusters.tsv", + "references/GRCh38/gencode_v46/salmon/info.json", + "references/GRCh38/gencode_v46/salmon/mphf.bin", + "references/GRCh38/gencode_v46/salmon/pos.bin", + "references/GRCh38/gencode_v46/salmon/pre_indexing.log", + "references/GRCh38/gencode_v46/salmon/rank.bin", + "references/GRCh38/gencode_v46/salmon/refAccumLengths.bin", + "references/GRCh38/gencode_v46/salmon/ref_indexing.log", + "references/GRCh38/gencode_v46/salmon/reflengths.bin", + "references/GRCh38/gencode_v46/salmon/refseq.bin", + "references/GRCh38/gencode_v46/salmon/seq.bin", + "references/GRCh38/gencode_v46/salmon/versionInfo.json", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T17:04:40.402707" + }, + "stub test ctatsplicing": { + "content": [ + 17, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "CTATSPLICING_PREPGENOMELIB": { + "ctatsplicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "ctatsplicing", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:54:50.384883" + }, + "stub test fusionreport": { + "content": [ + 19, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_FUSIONCATCHER": { + "fusioncatcher": "1.33" + }, + "FUSIONREPORT_DETECT": { + "fusion_report": "4.0.1" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "4.0.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/fusion_report_db", + "references/GRCh38/fusion_report_db/DB-timestamp.txt", + "references/GRCh38/fusion_report_db/cosmic.db", + "references/GRCh38/fusion_report_db/fusion_report.log", + "references/GRCh38/fusion_report_db/fusiongdb2.db", + "references/GRCh38/fusion_report_db/mitelman.db", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T17:01:37.589889" + }, + "stub test fastp": { + "content": [ + 14, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTP": { + "fastp": "0.24.0" + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FASTQC_TRIM": { + "fastqc": "0.12.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T17:03:09.838745" + }, + "stub test fusioncatcher": { + "content": [ + 13, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_FUSIONCATCHER": { + "fusioncatcher": "1.33" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fusioncatcher", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:56:26.925856" + }, + "stub test all": { + "content": [ + 31, + { + "AGAT_CONVERTGFF2BED": { + "agat": "v1.5.1" + }, + "ARRIBA_ARRIBA": { + "arriba": "2.5.0" + }, + "BIOAWK": { + "bioawk": 1.0 + }, + "CTATSPLICING_PREPGENOMELIB": { + "ctatsplicing": "0.0.2" + }, + "CTATSPLICING_STARTOCANCERINTRONS": { + "ctat-splicing": "0.0.2" + }, + "FASTP": { + "fastp": "0.24.0" + }, + "FASTQC_RAW": { + "fastqc": "0.12.1" + }, + "FASTQC_TRIM": { + "fastqc": "0.12.1" + }, + "FUSIONCATCHER_FUSIONCATCHER": { + "fusioncatcher": "1.33" + }, + "FUSIONINSPECTOR": { + "FusionInspector": "2.10.0" + }, + "FUSIONREPORT_DETECT": { + "fusion_report": "4.0.1" + }, + "FUSIONREPORT_DOWNLOAD": { + "fusion_report": "4.0.1" + }, + "GATK4_BEDTOINTERVALLIST": { + "gatk4": "4.6.1.0" + }, + "GATK4_CREATESEQUENCEDICTIONARY": { + "gatk4": "4.6.1.0" + }, + "GATK4_MARKDUPLICATES": { + "gatk4": "4.6.1.0", + "samtools": 1.21 + }, + "GENCODE_DOWNLOAD": { + "wget": "1.21.4" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GTF_TO_REFFLAT": { + "gtfToGenePred": 377 + }, + "HGNC_DOWNLOAD": { + "wget": "1.21.4" + }, + "PICARD_COLLECTINSERTSIZEMETRICS": { + "picard": "3.3.0" + }, + "PICARD_COLLECTRNASEQMETRICS": { + "picard": "3.3.0" + }, + "SALMON_INDEX": { + "salmon": "1.10.3" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "STARFUSION_BUILD": { + "gunzip": 1.12, + "hmmer": 3.4, + "STAR-Fusion": "1.15.1" + }, + "STARFUSION_DETECT": { + "STAR-Fusion": "1.15.1" + }, + "STAR_GENOMEGENERATE": { + "star": "2.7.11b", + "samtools": 1.21, + "gawk": "5.1.0" + }, + "STRINGTIE_MERGE": { + "stringtie": "2.2.1" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "Workflow": { + "nf-core/rnafusion": "v4.0.0dev" + } + }, + [ + "agat", + "agat/Homo_sapiens.GRCh38.46.gtf.bed", + "arriba", + "arriba/test.arriba.fusions.discarded.tsv", + "arriba/test.arriba.fusions.tsv", + "bioawk", + "bioawk/Homo_sapiens.GRCh38.46.gtf_rrna.gtf.gz", + "ctatsplicing", + "ctatsplicing/test.cancer.introns", + "ctatsplicing/test.cancer.introns.prelim", + "ctatsplicing/test.cancer_intron_reads.sorted.bam", + "ctatsplicing/test.cancer_intron_reads.sorted.bam.bai", + "ctatsplicing/test.chckpts", + "ctatsplicing/test.ctat-splicing.igv.html", + "ctatsplicing/test.gene_reads.sorted.sifted.bam", + "ctatsplicing/test.gene_reads.sorted.sifted.bam.bai", + "ctatsplicing/test.igv.tracks", + "ctatsplicing/test.introns", + "ctatsplicing/test.introns.for_IGV.bed", + "fastp", + "fastp/test.fastp.html", + "fastp/test.fastp.json", + "fastp/test.fastp.log", + "fastp/test_1.fastp.fastq.gz", + "fastp/test_2.fastp.fastq.gz", + "fastqc", + "fastqc/test.html", + "fastqc/test.zip", + "fastqc_for_fastp", + "fastqc_for_fastp/test_trimmed.html", + "fastqc_for_fastp/test_trimmed.zip", + "fusioncatcher", + "fusioncatcher/test.fusion-genes.txt", + "fusioncatcher/test.log", + "fusioncatcher/test.summary.txt", + "fusioninspector", + "fusioninspector/test", + "fusioninspector/test/FusionInspector.log", + "fusioninspector/test/IGV_inputs", + "fusioninspector/test/chckpts_dir", + "fusioninspector/test/fi_workdir", + "fusioninspector/test/fi_workdir/test.gtf", + "fusioninspector/test/test.FusionInspector.fusions.abridged.tsv", + "fusioninspector/test/test.FusionInspector.fusions.tsv", + "fusioninspector/test/test.fusion_inspector_web.html", + "fusionreport", + "fusionreport/test", + "fusionreport/test/AAA_BBB.html", + "fusionreport/test/test.fusionreport.tsv", + "fusionreport/test/test.fusionreport_filtered.tsv", + "fusionreport/test/test.fusions.csv", + "fusionreport/test/test.fusions.json", + "fusionreport/test/test_fusionreport_index.html", + "gatk4", + "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html", + "picard", + "picard/test.bai", + "picard/test.bam", + "picard/test.bam.metrics", + "picard/test.cram", + "picard/test.cram.crai", + "picard/test.rna_metrics", + "picard/test_collectinsertsize.pdf", + "picard/test_collectinsertsize.txt", + "pipeline_info", + "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", + "references", + "references/GRCh38", + "references/GRCh38/fusion_report_db", + "references/GRCh38/fusion_report_db/DB-timestamp.txt", + "references/GRCh38/fusion_report_db/cosmic.db", + "references/GRCh38/fusion_report_db/fusion_report.log", + "references/GRCh38/fusion_report_db/fusiongdb2.db", + "references/GRCh38/fusion_report_db/mitelman.db", + "references/GRCh38/gencode_v46", + "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.fasta", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", + "references/GRCh38/gencode_v46/salmon", + "references/GRCh38/gencode_v46/salmon/complete_ref_lens.bin", + "references/GRCh38/gencode_v46/salmon/ctable.bin", + "references/GRCh38/gencode_v46/salmon/ctg_offsets.bin", + "references/GRCh38/gencode_v46/salmon/duplicate_clusters.tsv", + "references/GRCh38/gencode_v46/salmon/info.json", + "references/GRCh38/gencode_v46/salmon/mphf.bin", + "references/GRCh38/gencode_v46/salmon/pos.bin", + "references/GRCh38/gencode_v46/salmon/pre_indexing.log", + "references/GRCh38/gencode_v46/salmon/rank.bin", + "references/GRCh38/gencode_v46/salmon/refAccumLengths.bin", + "references/GRCh38/gencode_v46/salmon/ref_indexing.log", + "references/GRCh38/gencode_v46/salmon/reflengths.bin", + "references/GRCh38/gencode_v46/salmon/refseq.bin", + "references/GRCh38/gencode_v46/salmon/seq.bin", + "references/GRCh38/gencode_v46/salmon/versionInfo.json", + "references/GRCh38/gencode_v46/star", + "references/GRCh38/gencode_v46/star/Genome", + "references/GRCh38/gencode_v46/star/Log.out", + "references/GRCh38/gencode_v46/star/SA", + "references/GRCh38/gencode_v46/star/SAindex", + "references/GRCh38/gencode_v46/star/chrLength.txt", + "references/GRCh38/gencode_v46/star/chrName.txt", + "references/GRCh38/gencode_v46/star/chrNameLength.txt", + "references/GRCh38/gencode_v46/star/chrStart.txt", + "references/GRCh38/gencode_v46/star/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/star/exonInfo.tab", + "references/GRCh38/gencode_v46/star/geneInfo.tab", + "references/GRCh38/gencode_v46/star/genomeParameters.txt", + "references/GRCh38/gencode_v46/star/sjdbInfo.txt", + "references/GRCh38/gencode_v46/star/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/star/sjdbList.out.tab", + "references/GRCh38/gencode_v46/star/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/AnnotFilterRule.pm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/PFAM.domtblout.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_fusion_annot_lib.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/_prot_info_db.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/annotfiltrule_cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/blast_pairs.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_gene_blast_pairs.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_pfam_dat.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/cp_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/fusion_annot_lib.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_pfam_hits.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/index_ref_annot_cdna.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/makeblastdb.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2.splice_bed.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/mm2_genome_idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.cdsplus.dfam_masked.fa.idx.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.gene_spans.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.mini.sortu.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_annot.gtf.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome.fa.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/ref_genome_fai.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.cp.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/trans.blast.dat.index.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/__chkpts/validate_ctat_genome_lib.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.dat.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/blast_pairs.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/cancer_splicing_lib/cancer_splicing.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/fusion_annot_lib.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/pfam_domains.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/refGene.sort.bed.gz.tbi", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdna.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cds", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.cdsplus.fa.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.gtf.mm2.splice.bed", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.pep", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.fai", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.mm2", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ndb", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nhr", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nin", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.njs", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.not", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nsq", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.ntf", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.nto", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Log.out", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm", + "references/GRCh38/gencode_v46/starfusion/ctat_genome_lib_build_dir/trans.blast.dat.gz", + "references/GRCh38/hgnc", + "references/GRCh38/hgnc/HGNC-DB-timestamp.txt", + "references/GRCh38/hgnc/hgnc_complete_set.txt", + "salmon", + "salmon/test", + "salmon/test_lib_format_counts.json", + "salmon/test_meta_info.json", + "star", + "star/test.Aligned.sortedByCoord.out.bam", + "star/test.Aligned.sortedByCoord.out.bam.bai", + "starfusion", + "starfusion/test.starfusion.abridged.coding_effect.tsv", + "starfusion/test.starfusion.abridged.tsv", + "starfusion/test.starfusion.fusion_predictions.tsv", + "stringtie", + "stringtie/[:]", + "stringtie/[:]/stringtie.merged.gtf", + "stringtie/test.ballgown", + "stringtie/test.coverage.gtf", + "stringtie/test.gene.abundance.txt", + "stringtie/test.transcripts.gtf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-09-02T16:51:37.37908" + } +} \ No newline at end of file From e7c12b0529d1c2f65495bbb31680656bba3ac469 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 3 Sep 2025 09:41:43 +0200 Subject: [PATCH 840/887] change operator --- subworkflows/local/fusioninspector_workflow/main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index 8e1b3db2d..300840069 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -55,9 +55,9 @@ workflow FUSIONINSPECTOR_WORKFLOW { ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2TSV.out.versions) fusion_data = tsv_abridged_nonempty - .combine(AGAT_CONVERTSPGFF2TSV.out.tsv) - .combine(fusionreport_out) - .combine(fusionreport_csv) + .join(AGAT_CONVERTSPGFF2TSV.out.tsv) + .join(fusionreport_out) + .join(fusionreport_csv) VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) From 34d147ee01dd380bc240d6d7f1710cbf076f9965 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 3 Sep 2025 10:03:49 +0200 Subject: [PATCH 841/887] Update docs/usage.md --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 607a2d43d..8fd045fd7 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -16,7 +16,7 @@ The pipeline is divided into two parts: 2. Detecting fusions -- Supported tools: `Arriba`, `FusionCatcher`, `STAR-Fusion`, `StringTie` and `CTAT-SPLICING` (the last two are not supported by fusion-report and `StringTie` can be seen as more of an assembly tool, requires manual investigation). +- Supported tools: `Arriba`, `FusionCatcher`, `STAR-Fusion`, `StringTie` and `CTAT-SPLICING` (the last two are not supported by fusion-report and `StringTie` can be seen as more of an assembly tool that requires manual investigation). - QC: `Fastqc`, `MultiQC`, and `Picard CollectInsertSize`, `Picard CollectWgsMetrics`, `Picard Markduplicates` - Fusions visualization: `Arriba`, `fusion-report`, `FusionInspector`, and `vcf_collect` From 11303bfc64e1c2ec1b21927aa9f7c09a791aee72 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 3 Sep 2025 12:26:14 +0200 Subject: [PATCH 842/887] udpate modules --- modules.json | 48 +++---- modules/nf-core/agat/convertspgff2tsv/main.nf | 6 +- .../nf-core/agat/convertspgff2tsv/meta.yml | 26 ++-- modules/nf-core/arriba/arriba/meta.yml | 64 ++++++---- .../nf-core/arriba/arriba/tests/main.nf.test | 75 +++++++++++ .../arriba/arriba/tests/main.nf.test.snap | 20 +-- .../arriba/arriba/tests/nextflow.config | 3 +- modules/nf-core/cat/cat/meta.yml | 23 ++-- modules/nf-core/cat/fastq/meta.yml | 18 +-- modules/nf-core/fastp/main.nf | 6 +- modules/nf-core/fastp/meta.yml | 79 +++++++----- .../nf-core/gatk4/bedtointervallist/main.nf | 23 ++-- .../nf-core/gatk4/bedtointervallist/meta.yml | 24 ++-- .../gatk4/createsequencedictionary/main.nf | 25 ++-- .../gatk4/createsequencedictionary/meta.yml | 19 +-- modules/nf-core/gatk4/markduplicates/main.nf | 10 +- modules/nf-core/gatk4/markduplicates/meta.yml | 56 +++++---- modules/nf-core/gffread/meta.yml | 45 ++++--- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 20 +-- .../picard/collectinsertsizemetrics/meta.yml | 23 ++-- .../picard/collectrnaseqmetrics/meta.yml | 48 ++++--- .../nf-core/picard/collectwgsmetrics/meta.yml | 30 +++-- modules/nf-core/salmon/index/meta.yml | 36 +++--- modules/nf-core/salmon/quant/meta.yml | 76 +++++++----- modules/nf-core/samtools/convert/meta.yml | 36 ++++-- modules/nf-core/samtools/faidx/meta.yml | 52 ++++---- modules/nf-core/samtools/index/main.nf | 2 +- modules/nf-core/samtools/index/meta.yml | 28 +++-- modules/nf-core/star/align/meta.yml | 117 +++++++++++------- modules/nf-core/star/genomegenerate/meta.yml | 18 +-- .../starfusion/build/tests/main.nf.test | 46 +++---- modules/nf-core/stringtie/merge/meta.yml | 43 ++++--- modules/nf-core/stringtie/stringtie/meta.yml | 42 ++++--- modules/nf-core/ucsc/gtftogenepred/meta.yml | 23 ++-- .../local/fusioninspector_workflow/main.nf | 2 +- 37 files changed, 731 insertions(+), 487 deletions(-) diff --git a/modules.json b/modules.json index c3555ee44..fb18b3dc9 100644 --- a/modules.json +++ b/modules.json @@ -12,12 +12,12 @@ }, "agat/convertspgff2tsv": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", - "git_sha": "077818897bfe993e1ed91a0339bcbe53fe13edc7", + "git_sha": "025a6f75e1f72e4ab60abb4bd65b3f289d4ad910", "installed_by": ["modules"] }, "arriba/visualisation": { @@ -32,12 +32,12 @@ }, "cat/cat": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "ctatsplicing/prepgenomelib": { @@ -54,7 +54,7 @@ }, "fastp": { "branch": "master", - "git_sha": "d082103d7976a2804f21225446cc110cbd822f4c", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "fastqc": { @@ -84,62 +84,62 @@ }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", - "git_sha": "1ec937ab3edc307bc0d79a2200d784e9f0868359", + "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", "installed_by": ["modules"] }, "gffread": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "a4488d3d09244f29fb4606ba4eef85d59dcc6ad8", "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", - "git_sha": "980a4964be91da75fb3ccf576118a18e247f6d15", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "picard/collectrnaseqmetrics": { "branch": "master", - "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "salmon/index": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", - "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "samtools/convert": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "samtools/flagstat": { @@ -154,7 +154,7 @@ }, "samtools/index": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["bam_sort_stats_samtools", "modules"] }, "samtools/sort": { @@ -169,17 +169,17 @@ }, "star/align": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["fastq_align_star", "modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "starfusion/build": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "310a7a59c7f2362d25070e5928f3139f92377eaf", "installed_by": ["modules"] }, "starfusion/detect": { @@ -189,17 +189,17 @@ }, "stringtie/merge": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["bam_stringtie_merge", "modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["bam_stringtie_merge", "modules"] }, "ucsc/gtftogenepred": { "branch": "master", - "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, "umitools/extract": { diff --git a/modules/nf-core/agat/convertspgff2tsv/main.nf b/modules/nf-core/agat/convertspgff2tsv/main.nf index 772c7bd0b..d2b9b8608 100644 --- a/modules/nf-core/agat/convertspgff2tsv/main.nf +++ b/modules/nf-core/agat/convertspgff2tsv/main.nf @@ -18,13 +18,13 @@ process AGAT_CONVERTSPGFF2TSV { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ agat_convert_sp_gff2tsv.pl \\ - --gff $gff \\ + --gff ${gff} \\ --output ${prefix}.tsv \\ - $args + ${args} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/agat/convertspgff2tsv/meta.yml b/modules/nf-core/agat/convertspgff2tsv/meta.yml index 31f098683..4c80ee890 100644 --- a/modules/nf-core/agat/convertspgff2tsv/meta.yml +++ b/modules/nf-core/agat/convertspgff2tsv/meta.yml @@ -27,21 +27,27 @@ input: type: file description: Annotation file in GFF3/GTF format pattern: "*.{gff, gtf}" + ontologies: + - edam: "http://edamontology.org/format_1975" # GFF3 + - edam: "http://edamontology.org/format_2306" # GTF output: - - tsv: - - meta: - type: file - description: Annotation file in TSV format - pattern: "*.{gtf}" + tsv: + - - meta: + type: map + description: Groovy Map containing sample information - "*.tsv": type: file description: Annotation file in TSV format pattern: "*.{gtf}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_2306 # GTF + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: "http://edamontology.org/format_3750" # YAML authors: - "@rannick" maintainers: diff --git a/modules/nf-core/arriba/arriba/meta.yml b/modules/nf-core/arriba/arriba/meta.yml index 91ba21039..967f83756 100644 --- a/modules/nf-core/arriba/arriba/meta.yml +++ b/modules/nf-core/arriba/arriba/meta.yml @@ -25,6 +25,7 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + ontologies: [] - - meta2: type: map description: | @@ -34,6 +35,7 @@ input: type: file description: Assembly FASTA file pattern: "*.{fasta}" + ontologies: [] - - meta3: type: map description: | @@ -43,25 +45,33 @@ input: type: file description: Annotation GTF file pattern: "*.{gtf}" - - - blacklist: - type: file - description: Blacklist file - pattern: "*.{tsv}" - - - known_fusions: - type: file - description: Known fusions file - pattern: "*.{tsv}" - - - cytobands: - type: file - description: Cytobands file - pattern: "*.{tsv}" - - - protein_domains: - type: file - description: Protein domains file - pattern: "*.{gff3}" + ontologies: [] + - blacklist: + type: file + description: Blacklist file + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - known_fusions: + type: file + description: Known fusions file + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - cytobands: + type: file + description: Cytobands file + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - protein_domains: + type: file + description: Protein domains file + pattern: "*.{gff3}" + ontologies: [] output: - - fusions: - - meta: + fusions: + - - meta: type: map description: | Groovy Map containing sample information @@ -70,8 +80,9 @@ output: type: file description: File contains fusions which pass all of Arriba's filters. pattern: "*.{fusions.tsv}" - - fusions_fail: - - meta: + ontologies: [] + fusions_fail: + - - meta: type: map description: | Groovy Map containing sample information @@ -81,11 +92,14 @@ output: description: File contains fusions that Arriba classified as an artifact or that are also observed in healthy tissue. pattern: "*.{fusions.discarded.tsv}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@praveenraj2018" - "@rannick" diff --git a/modules/nf-core/arriba/arriba/tests/main.nf.test b/modules/nf-core/arriba/arriba/tests/main.nf.test index e76c06871..b5f404134 100644 --- a/modules/nf-core/arriba/arriba/tests/main.nf.test +++ b/modules/nf-core/arriba/arriba/tests/main.nf.test @@ -13,6 +13,81 @@ nextflow_process { tag "star/genomegenerate" tag "star/align" + test("arriba - homo_sapiens - paired_end") { + config "./nextflow.config" + + setup{ + run("STAR_GENOMEGENERATE") { + script '../../../star/genomegenerate/main.nf' + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + + run("STAR_ALIGN") { + script '../../../star/align/main.nf' + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + } + + when { + process { + """ + input[0] = STAR_ALIGN.out.bam + input[1] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = [] + + input[4] = [] + + input[5] = [] + + input[6] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("arriba - homo_sapiens - paired_end - stub") { options "-stub" diff --git a/modules/nf-core/arriba/arriba/tests/main.nf.test.snap b/modules/nf-core/arriba/arriba/tests/main.nf.test.snap index 7cf286a2f..ad3e7aa9c 100644 --- a/modules/nf-core/arriba/arriba/tests/main.nf.test.snap +++ b/modules/nf-core/arriba/arriba/tests/main.nf.test.snap @@ -52,7 +52,7 @@ }, "timestamp": "2025-07-04T12:35:18.703566" }, - "homo_sapiens - paired_end - stub": { + "arriba - homo_sapiens - paired_end": { "content": [ { "0": [ @@ -61,7 +61,7 @@ "id": "test", "single_end": false }, - "test.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + "test.fusions.tsv:md5,7c3383f7eb6d79b84b0bd30a7ef02d70" ] ], "1": [ @@ -70,11 +70,11 @@ "id": "test", "single_end": false }, - "test.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + "test.fusions.discarded.tsv:md5,445cb87a27f063e751f93498cf8d10b5" ] ], "2": [ - "versions.yml:md5,d323796555db4a58fe4c6bc08d1dec30" + "versions.yml:md5,d2eb9bb3bd4b21571a6aa2f39f1283af" ], "fusions": [ [ @@ -82,7 +82,7 @@ "id": "test", "single_end": false }, - "test.fusions.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + "test.fusions.tsv:md5,7c3383f7eb6d79b84b0bd30a7ef02d70" ] ], "fusions_fail": [ @@ -91,18 +91,18 @@ "id": "test", "single_end": false }, - "test.fusions.discarded.tsv:md5,f50b84b1db4b83ba62ec1deacc69c260" + "test.fusions.discarded.tsv:md5,445cb87a27f063e751f93498cf8d10b5" ] ], "versions": [ - "versions.yml:md5,d323796555db4a58fe4c6bc08d1dec30" + "versions.yml:md5,d2eb9bb3bd4b21571a6aa2f39f1283af" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-10-08T15:41:23.945072" + "timestamp": "2025-07-22T14:12:04.304647041" } } \ No newline at end of file diff --git a/modules/nf-core/arriba/arriba/tests/nextflow.config b/modules/nf-core/arriba/arriba/tests/nextflow.config index d3d5b00f6..60aac1728 100644 --- a/modules/nf-core/arriba/arriba/tests/nextflow.config +++ b/modules/nf-core/arriba/arriba/tests/nextflow.config @@ -1,7 +1,8 @@ process { withName: STAR_GENOMEGENERATE { - ext.args = '--genomeSAindexNbases 11' + ext.args = '--genomeSAindexNbases 9' } + withName: STAR_ALIGN { ext.args = '--readFilesCommand zcat --outSAMtype BAM Unsorted --outSAMunmapped Within --outBAMcompression 0 --outFilterMultimapNmax 50 --peOverlapNbasesMin 10 --alignSplicedMateMapLminOverLmate 0.5 --alignSJstitchMismatchNmax 5 -1 5 5 --chimSegmentMin 10 --chimOutType WithinBAM HardClip --chimJunctionOverhangMin 10 --chimScoreDropMax 30 --chimScoreJunctionNonGTAG 0 --chimScoreSeparation 1 --chimSegmentReadGapMax 3 --chimMultimapNmax 50' } diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml index 81778a067..2a9284d7f 100644 --- a/modules/nf-core/cat/cat/meta.yml +++ b/modules/nf-core/cat/cat/meta.yml @@ -20,21 +20,24 @@ input: type: file description: List of compressed / uncompressed files pattern: "*" + ontologies: [] output: - - file_out: - - meta: - type: file - description: Concatenated file. Will be gzipped if file_out ends with ".gz" - pattern: "${file_out}" + file_out: + - - meta: + type: map + description: Groovy Map containing sample information - ${prefix}: type: file description: Concatenated file. Will be gzipped if file_out ends with ".gz" pattern: "${file_out}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@erikrikarddaniel" - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml index 91ff2fb5f..40d2f627c 100644 --- a/modules/nf-core/cat/fastq/meta.yml +++ b/modules/nf-core/cat/fastq/meta.yml @@ -21,9 +21,10 @@ input: type: file description: | List of input FastQ files to be concatenated. + ontologies: [] output: - - reads: - - meta: + reads: + - - meta: type: map description: | Groovy Map containing sample information @@ -32,11 +33,14 @@ output: type: file description: Merged fastq file pattern: "*.{merged.fastq.gz}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 1342741d5..6e3e6c43a 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -48,7 +48,7 @@ process FASTP { $adapter_list \\ $fail_fastq \\ $args \\ - 2> >(tee ${prefix}.fastp.log >&2) \\ + 2>| >(tee ${prefix}.fastp.log >&2) \\ | gzip -c > ${prefix}.fastp.fastq.gz cat <<-END_VERSIONS > versions.yml @@ -69,7 +69,7 @@ process FASTP { $adapter_list \\ $fail_fastq \\ $args \\ - 2> >(tee ${prefix}.fastp.log >&2) + 2>| >(tee ${prefix}.fastp.log >&2) cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -94,7 +94,7 @@ process FASTP { --thread $task.cpus \\ --detect_adapter_for_pe \\ $args \\ - 2> >(tee ${prefix}.fastp.log >&2) + 2>| >(tee ${prefix}.fastp.log >&2) cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index 9c4b24584..b8673272a 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -24,25 +24,27 @@ input: 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}" - - - discard_trimmed_pass: - type: boolean - description: | - Specify true to not write any reads that pass trimming thresholds. - This can be used to use fastp for the output report only. - - - 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 a file ending in `*.merged.fastq.gz` + ontologies: [] + - adapter_fasta: + type: file + description: File in FASTA format containing possible adapters to remove. + pattern: "*.{fasta,fna,fas,fa}" + ontologies: [] + - discard_trimmed_pass: + type: boolean + description: | + Specify true to not write any reads that pass trimming thresholds. + This can be used to use fastp for the output report only. + - 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 a file ending in `*.merged.fastq.gz` output: - - reads: - - meta: + reads: + - - meta: type: map description: | Groovy Map containing sample information @@ -51,8 +53,10 @@ output: type: file description: The trimmed/modified/unmerged fastq reads pattern: "*fastp.fastq.gz" - - json: - - meta: + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + json: + - - meta: type: map description: | Groovy Map containing sample information @@ -61,8 +65,10 @@ output: type: file description: Results in JSON format pattern: "*.json" - - html: - - meta: + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + html: + - - meta: type: map description: | Groovy Map containing sample information @@ -71,8 +77,9 @@ output: type: file description: Results in HTML format pattern: "*.html" - - log: - - meta: + ontologies: [] + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -81,8 +88,9 @@ output: type: file description: fastq log file pattern: "*.log" - - reads_fail: - - meta: + ontologies: [] + reads_fail: + - - meta: type: map description: | Groovy Map containing sample information @@ -91,8 +99,10 @@ output: type: file description: Reads the failed the preprocessing pattern: "*fail.fastq.gz" - - reads_merged: - - meta: + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + reads_merged: + - - meta: type: map description: | Groovy Map containing sample information @@ -101,11 +111,14 @@ output: type: file description: Reads that were successfully merged pattern: "*.{merged.fastq.gz}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@drpatelh" - "@kevinmenden" diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 89960e04c..21e668c09 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -1,11 +1,11 @@ process GATK4_BEDTOINTERVALLIST { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b2/b28daf5d9bb2f0d129dcad1b7410e0dd8a9b087aaf3ec7ced929b1f57624ad98/data': - 'community.wave.seqera.io/library/gatk4_gcnvkernel:e48d414933d188cd' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b2/b28daf5d9bb2f0d129dcad1b7410e0dd8a9b087aaf3ec7ced929b1f57624ad98/data' + : 'community.wave.seqera.io/library/gatk4_gcnvkernel:e48d414933d188cd'}" input: tuple val(meta), path(bed) @@ -13,7 +13,7 @@ process GATK4_BEDTOINTERVALLIST { output: tuple val(meta), path('*.interval_list'), emit: interval_list - path "versions.yml" , emit: versions + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -24,18 +24,19 @@ process GATK4_BEDTOINTERVALLIST { def avail_mem = 3072 if (!task.memory) { - log.info '[GATK BedToIntervalList] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[GATK BedToIntervalList] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } """ gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ BedToIntervalList \\ - --INPUT $bed \\ + --INPUT ${bed} \\ --OUTPUT ${prefix}.interval_list \\ - --SEQUENCE_DICTIONARY $dict \\ + --SEQUENCE_DICTIONARY ${dict} \\ --TMP_DIR . \\ - $args + ${args} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/bedtointervallist/meta.yml b/modules/nf-core/gatk4/bedtointervallist/meta.yml index 25348e162..b186132d0 100644 --- a/modules/nf-core/gatk4/bedtointervallist/meta.yml +++ b/modules/nf-core/gatk4/bedtointervallist/meta.yml @@ -26,6 +26,7 @@ input: type: file description: Input bed file pattern: "*.bed" + ontologies: [] - - meta2: type: map description: | @@ -35,25 +36,26 @@ input: type: file description: Sequence dictionary pattern: "*.dict" + ontologies: [] output: - - interval_list: - - meta: + interval_list: + - - meta: type: file description: gatk interval list file pattern: "*.interval_list" + ontologies: [] - "*.interval_list": type: file description: gatk interval list file pattern: "*.interval_list" - - _list: - type: file - description: gatk interval list file - pattern: "*.interval_list" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@kevinmenden" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index 998622a06..872648a5e 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -1,18 +1,18 @@ process GATK4_CREATESEQUENCEDICTIONARY { - tag "$fasta" + tag "${fasta}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b2/b28daf5d9bb2f0d129dcad1b7410e0dd8a9b087aaf3ec7ced929b1f57624ad98/data': - 'community.wave.seqera.io/library/gatk4_gcnvkernel:e48d414933d188cd' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b2/b28daf5d9bb2f0d129dcad1b7410e0dd8a9b087aaf3ec7ced929b1f57624ad98/data' + : 'community.wave.seqera.io/library/gatk4_gcnvkernel:e48d414933d188cd'}" input: tuple val(meta), path(fasta) output: - tuple val(meta), path('*.dict') , emit: dict - path "versions.yml" , emit: versions + tuple val(meta), path('*.dict'), emit: dict + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -22,17 +22,18 @@ process GATK4_CREATESEQUENCEDICTIONARY { def avail_mem = 6144 if (!task.memory) { - log.info '[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } """ gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ CreateSequenceDictionary \\ - --REFERENCE $fasta \\ - --URI $fasta \\ + --REFERENCE ${fasta} \\ + --URI ${fasta} \\ --TMP_DIR . \\ - $args + ${args} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index 7b5156bb3..72dced28c 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -26,21 +26,26 @@ input: type: file description: Input fasta file pattern: "*.{fasta,fa}" + ontologies: [] output: - - dict: - - meta: + dict: + - - meta: type: file description: gatk dictionary file pattern: "*.{dict}" + ontologies: [] - "*.dict": type: file description: gatk dictionary file pattern: "*.{dict}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@maxulysse" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/markduplicates/main.nf b/modules/nf-core/gatk4/markduplicates/main.nf index f4bd896bf..5fb161b4f 100644 --- a/modules/nf-core/gatk4/markduplicates/main.nf +++ b/modules/nf-core/gatk4/markduplicates/main.nf @@ -13,12 +13,12 @@ process GATK4_MARKDUPLICATES { path fasta_fai output: - tuple val(meta), path("*cram"), emit: cram, optional: true - tuple val(meta), path("*bam"), emit: bam, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - tuple val(meta), path("*.bai"), emit: bai, optional: true + tuple val(meta), path("*cram"), emit: cram, optional: true + tuple val(meta), path("*bam"), emit: bam, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.bai"), emit: bai, optional: true tuple val(meta), path("*.metrics"), emit: metrics - path "versions.yml", emit: versions + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/gatk4/markduplicates/meta.yml b/modules/nf-core/gatk4/markduplicates/meta.yml index 4772c5f39..335c309a9 100644 --- a/modules/nf-core/gatk4/markduplicates/meta.yml +++ b/modules/nf-core/gatk4/markduplicates/meta.yml @@ -28,17 +28,20 @@ input: type: file description: Sorted BAM file pattern: "*.{bam}" - - - fasta: - type: file - description: Fasta file - pattern: "*.{fasta}" - - - fasta_fai: - type: file - description: Fasta index file - pattern: "*.{fai}" + ontologies: [] + - fasta: + type: file + description: Fasta file + pattern: "*.{fasta}" + ontologies: [] + - fasta_fai: + type: file + description: Fasta index file + pattern: "*.{fai}" + ontologies: [] output: - - cram: - - meta: + cram: + - - meta: type: map description: | Groovy Map containing sample information @@ -47,8 +50,9 @@ output: type: file description: Marked duplicates CRAM file pattern: "*.{cram}" - - bam: - - meta: + ontologies: [] + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -57,8 +61,9 @@ output: type: file description: Marked duplicates BAM file pattern: "*.{bam}" - - crai: - - meta: + ontologies: [] + crai: + - - meta: type: map description: | Groovy Map containing sample information @@ -67,8 +72,9 @@ output: type: file description: CRAM index file pattern: "*.{cram.crai}" - - bai: - - meta: + ontologies: [] + bai: + - - meta: type: map description: | Groovy Map containing sample information @@ -77,8 +83,9 @@ output: type: file description: BAM index file pattern: "*.{bam.bai}" - - metrics: - - meta: + ontologies: [] + metrics: + - - meta: type: map description: | Groovy Map containing sample information @@ -87,11 +94,14 @@ output: type: file description: Duplicate metrics file generated by GATK pattern: "*.{metrics.txt}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@ajodeh-juma" - "@FriederikeHanssen" diff --git a/modules/nf-core/gffread/meta.yml b/modules/nf-core/gffread/meta.yml index bebe7f575..715efec8e 100644 --- a/modules/nf-core/gffread/meta.yml +++ b/modules/nf-core/gffread/meta.yml @@ -25,35 +25,39 @@ input: type: file description: A reference file in either the GFF3, GFF2 or GTF format. pattern: "*.{gff, gtf}" - - - fasta: - type: file - description: A multi-fasta file with the genomic sequences - pattern: "*.{fasta,fa,faa,fas,fsa}" + ontologies: [] + - fasta: + type: file + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" + ontologies: [] output: - - gtf: - - meta: + gtf: + - - meta: type: map description: | Groovy Map containing meta data e.g. [ id:'test' ] - "*.gtf": type: file - description: GTF file resulting from the conversion of the GFF input file if - '-T' argument is present + description: GTF file resulting from the conversion of the GFF input file + if '-T' argument is present pattern: "*.{gtf}" - - gffread_gff: - - meta: + ontologies: [] + gffread_gff: + - - meta: type: map description: | Groovy Map containing meta data e.g. [ id:'test' ] - "*.gff3": type: file - description: GFF3 file resulting from the conversion of the GFF input file if - '-T' argument is absent + description: GFF3 file resulting from the conversion of the GFF input file + if '-T' argument is absent pattern: "*.gff3" - - gffread_fasta: - - meta: + ontologies: [] + gffread_fasta: + - - meta: type: map description: | Groovy Map containing meta data @@ -63,11 +67,14 @@ output: description: Fasta file produced when either of '-w', '-x', '-y' parameters is present pattern: "*.fasta" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@edmundmiller" maintainers: diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 812fc4c5e..f89370483 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.29 + - bioconda::multiqc=1.30 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 0ac3c3699..67460de9a 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.29--pyhdfd78af_0' : - 'biocontainers/multiqc:1.29--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.30--pyhdfd78af_1' : + 'biocontainers/multiqc:1.30--pyhdfd78af_1' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 88e90571c..0d3f288bd 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1" + "versions.yml:md5,e65ce731db2128b8e4dd43d6e880fc1c" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.3" }, - "timestamp": "2025-05-22T11:50:41.182332996" + "timestamp": "2025-07-10T08:06:23.563041241" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1" + "versions.yml:md5,e65ce731db2128b8e4dd43d6e880fc1c" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.3" }, - "timestamp": "2025-05-22T11:51:22.448739369" + "timestamp": "2025-07-10T08:06:48.96226832" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1" + "versions.yml:md5,e65ce731db2128b8e4dd43d6e880fc1c" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.3" }, - "timestamp": "2025-05-22T11:51:06.198928424" + "timestamp": "2025-07-10T08:06:40.627008706" } -} \ No newline at end of file +} diff --git a/modules/nf-core/picard/collectinsertsizemetrics/meta.yml b/modules/nf-core/picard/collectinsertsizemetrics/meta.yml index 0947048dc..1c4572c58 100644 --- a/modules/nf-core/picard/collectinsertsizemetrics/meta.yml +++ b/modules/nf-core/picard/collectinsertsizemetrics/meta.yml @@ -24,9 +24,10 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + ontologies: [] output: - - metrics: - - meta: + metrics: + - - meta: type: map description: | Groovy Map containing sample information @@ -35,8 +36,9 @@ output: type: file description: Values used by Picard to generate the insert size histograms pattern: "*.txt" - - histogram: - - meta: + ontologies: [] + histogram: + - - meta: type: map description: | Groovy Map containing sample information @@ -45,11 +47,14 @@ output: type: file description: Insert size histogram in PDF format pattern: "*.pdf" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@FerriolCalvet" maintainers: diff --git a/modules/nf-core/picard/collectrnaseqmetrics/meta.yml b/modules/nf-core/picard/collectrnaseqmetrics/meta.yml index 15d146baa..b8da63e9f 100644 --- a/modules/nf-core/picard/collectrnaseqmetrics/meta.yml +++ b/modules/nf-core/picard/collectrnaseqmetrics/meta.yml @@ -27,18 +27,22 @@ input: type: file description: BAM/SAM file pattern: "*.{bam,sam}" - - - ref_flat: - type: file - description: Genome ref_flat file - - - fasta: - type: file - description: Genome fasta file - - - rrna_intervals: - type: file - description: Interval file of ribosomal RNA regions + ontologies: [] + - ref_flat: + type: file + description: Genome ref_flat file + ontologies: [] + - fasta: + type: file + description: Genome fasta file + ontologies: [] + - rrna_intervals: + type: file + description: Interval file of ribosomal RNA regions + ontologies: [] output: - - metrics: - - meta: + metrics: + - - meta: type: map description: | Groovy Map containing sample information @@ -47,21 +51,25 @@ output: type: file description: RNA alignment metrics files generated by picard pattern: "*.rna_metrics" - - pdf: - - meta: + ontologies: [] + pdf: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - "*.pdf": type: file - description: Plot normalized position vs. coverage in a pdf file generated by - picard - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + description: Plot normalized position vs. coverage in a pdf file generated + by picard + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@anoronh4" maintainers: diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index bb7480809..a27e0a88c 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -26,10 +26,12 @@ input: type: file description: Aligned reads file pattern: "*.{bam, cram}" + ontologies: [] - bai: type: file description: (Optional) Aligned reads file index pattern: "*.{bai,crai}" + ontologies: [] - - meta2: type: map description: | @@ -39,6 +41,7 @@ input: type: file description: Genome fasta file pattern: "*.{fa,fasta,fna}" + ontologies: [] - - meta3: type: map description: | @@ -48,13 +51,15 @@ input: type: file description: Genome fasta file index pattern: "*.{fai}" - - - intervallist: - type: file - description: Picard Interval List. Defines which contigs to include. Can be - generated from a BED file with GATK BedToIntervalList. + ontologies: [] + - intervallist: + type: file + description: Picard Interval List. Defines which contigs to include. Can be generated + from a BED file with GATK BedToIntervalList. + ontologies: [] output: - - metrics: - - meta: + metrics: + - - meta: type: map description: | Groovy Map containing sample information @@ -63,11 +68,14 @@ output: type: file description: Alignment metrics files generated by picard pattern: "*_{metrics}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@drpatelh" - "@flowuenne" diff --git a/modules/nf-core/salmon/index/meta.yml b/modules/nf-core/salmon/index/meta.yml index 48486a2bb..4e0367b4a 100644 --- a/modules/nf-core/salmon/index/meta.yml +++ b/modules/nf-core/salmon/index/meta.yml @@ -15,23 +15,27 @@ tools: licence: ["GPL-3.0-or-later"] identifier: biotools:salmon input: - - - genome_fasta: - type: file - description: Fasta file of the reference genome - - - transcript_fasta: - type: file - description: Fasta file of the reference transcriptome + - genome_fasta: + type: file + description: Fasta file of the reference genome + ontologies: [] + - transcript_fasta: + type: file + description: Fasta file of the reference transcriptome + ontologies: [] output: - - index: - - salmon: - type: directory - description: Folder containing the star index files - pattern: "salmon" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + index: + - salmon: + type: directory + description: Folder containing the star index files + pattern: "salmon" + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/salmon/quant/meta.yml b/modules/nf-core/salmon/quant/meta.yml index 4cacde0f0..40e8eb965 100644 --- a/modules/nf-core/salmon/quant/meta.yml +++ b/modules/nf-core/salmon/quant/meta.yml @@ -26,25 +26,28 @@ input: List of input FastQ files for single-end or paired-end data. Multiple single-end fastqs or pairs of paired-end fastqs are handled. - - - index: - type: directory - description: Folder containing the star index files - - - gtf: - type: file - description: GTF of the reference transcriptome - - - transcript_fasta: - type: file - description: Fasta file of the reference transcriptome - - - alignment_mode: - type: boolean - description: whether to run salmon in alignment mode - - - lib_type: - type: string - description: | - Override library type inferred based on strandedness defined in meta object + ontologies: [] + - index: + type: directory + description: Folder containing the star index files + - gtf: + type: file + description: GTF of the reference transcriptome + ontologies: [] + - transcript_fasta: + type: file + description: Fasta file of the reference transcriptome + ontologies: [] + - alignment_mode: + type: boolean + description: whether to run salmon in alignment mode + - lib_type: + type: string + description: | + Override library type inferred based on strandedness defined in meta object output: - - results: - - meta: + results: + - - meta: type: directory description: Folder containing the quantification results for a specific sample pattern: "${prefix}" @@ -52,30 +55,35 @@ output: type: directory description: Folder containing the quantification results for a specific sample pattern: "${prefix}" - - json_info: - - meta: - type: file - description: File containing meta information from Salmon quant - pattern: "*info.json" + json_info: + - - meta: + type: directory + description: Folder containing the quantification results for a specific sample + pattern: "${prefix}" - "*info.json": type: file description: File containing meta information from Salmon quant pattern: "*info.json" - - lib_format_counts: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + lib_format_counts: + - - meta: + type: directory + description: Folder containing the quantification results for a specific sample + pattern: "${prefix}" - "*lib_format_counts.json": type: file description: File containing the library format counts pattern: "*lib_format_counts.json" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/samtools/convert/meta.yml b/modules/nf-core/samtools/convert/meta.yml index d5bfa161b..519812ab5 100644 --- a/modules/nf-core/samtools/convert/meta.yml +++ b/modules/nf-core/samtools/convert/meta.yml @@ -26,10 +26,12 @@ input: type: file description: BAM/CRAM file pattern: "*.{bam,cram}" + ontologies: [] - index: type: file description: BAM/CRAM index file pattern: "*.{bai,crai}" + ontologies: [] - - meta2: type: map description: | @@ -39,6 +41,7 @@ input: type: file description: Reference file to create the CRAM file pattern: "*.{fasta,fa}" + ontologies: [] - - meta3: type: map description: | @@ -48,9 +51,10 @@ input: type: file description: Reference index file to create the CRAM file pattern: "*.{fai}" + ontologies: [] output: - - bam: - - meta: + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -59,8 +63,9 @@ output: type: file description: filtered/converted BAM file pattern: "*{.bam}" - - cram: - - meta: + ontologies: [] + cram: + - - meta: type: map description: | Groovy Map containing sample information @@ -69,8 +74,9 @@ output: type: file description: filtered/converted CRAM file pattern: "*{cram}" - - bai: - - meta: + ontologies: [] + bai: + - - meta: type: map description: | Groovy Map containing sample information @@ -79,8 +85,9 @@ output: type: file description: filtered/converted BAM index pattern: "*{.bai}" - - crai: - - meta: + ontologies: [] + crai: + - - meta: type: map description: | Groovy Map containing sample information @@ -89,11 +96,14 @@ output: type: file description: filtered/converted CRAM index pattern: "*{.crai}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@FriederikeHanssen" - "@maxulysse" diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index 256a330a1..b7a2e0c1a 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -26,6 +26,7 @@ input: type: file description: FASTA file pattern: "*.{fa,fasta}" + ontologies: [] - - meta2: type: map description: | @@ -35,13 +36,14 @@ input: type: file description: FASTA index file pattern: "*.{fai}" - - - get_sizes: - type: boolean - description: use cut to get the sizes of the index (true) or not (false) + ontologies: [] + - get_sizes: + type: boolean + description: use cut to get the sizes of the index (true) or not (false) output: - - fa: - - meta: + fa: + - - meta: type: map description: | Groovy Map containing sample information @@ -50,28 +52,31 @@ output: type: file description: FASTA file pattern: "*.{fa}" - - fai: - - meta: + ontologies: [] + sizes: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.fai": + - "*.sizes": type: file - description: FASTA index file - pattern: "*.{fai}" - - sizes: - - meta: + description: File containing chromosome lengths + pattern: "*.{sizes}" + ontologies: [] + fai: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.sizes": + - "*.fai": type: file - description: File containing chromosome lengths - pattern: "*.{sizes}" - - gzi: - - meta: + description: FASTA index file + pattern: "*.{fai}" + ontologies: [] + gzi: + - - meta: type: map description: | Groovy Map containing sample information @@ -80,11 +85,14 @@ output: type: file description: Optional gzip index file for compressed inputs pattern: "*.gzi" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 311756102..7019a72e4 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -24,7 +24,7 @@ process SAMTOOLS_INDEX { """ samtools \\ index \\ - -@ ${task.cpus-1} \\ + -@ ${task.cpus} \\ $args \\ $input diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index db8df0d50..1bed6bca6 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -25,9 +25,10 @@ input: - input: type: file description: input file + ontologies: [] output: - - bai: - - meta: + bai: + - - meta: type: map description: | Groovy Map containing sample information @@ -36,8 +37,9 @@ output: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" - - csi: - - meta: + ontologies: [] + csi: + - - meta: type: map description: | Groovy Map containing sample information @@ -46,8 +48,9 @@ output: type: file description: CSI index file pattern: "*.{csi}" - - crai: - - meta: + ontologies: [] + crai: + - - meta: type: map description: | Groovy Map containing sample information @@ -56,11 +59,14 @@ output: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml index 5cfe763e3..1ee469052 100644 --- a/modules/nf-core/star/align/meta.yml +++ b/modules/nf-core/star/align/meta.yml @@ -26,6 +26,7 @@ input: description: | List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + ontologies: [] - - meta2: type: map description: | @@ -44,18 +45,19 @@ input: type: file description: Annotation GTF file pattern: "*.{gtf}" - - - star_ignore_sjdbgtf: - type: boolean - description: Ignore annotation GTF file - - - seq_platform: - type: string - description: Sequencing platform - - - seq_center: - type: string - description: Sequencing center + ontologies: [] + - star_ignore_sjdbgtf: + type: boolean + description: Ignore annotation GTF file + - seq_platform: + type: string + description: Sequencing platform + - seq_center: + type: string + description: Sequencing center output: - - log_final: - - meta: + log_final: + - - meta: type: map description: | Groovy Map containing sample information @@ -64,8 +66,9 @@ output: type: file description: STAR final log file pattern: "*Log.final.out" - - log_out: - - meta: + ontologies: [] + log_out: + - - meta: type: map description: | Groovy Map containing sample information @@ -74,8 +77,9 @@ output: type: file description: STAR lot out file pattern: "*Log.out" - - log_progress: - - meta: + ontologies: [] + log_progress: + - - meta: type: map description: | Groovy Map containing sample information @@ -84,13 +88,16 @@ output: type: file description: STAR log progress file pattern: "*Log.progress.out" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - - bam: - - meta: + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -99,8 +106,9 @@ output: type: file description: Output BAM file containing read alignments pattern: "*.{bam}" - - bam_sorted: - - meta: + ontologies: [] + bam_sorted: + - - meta: type: map description: | Groovy Map containing sample information @@ -109,8 +117,9 @@ output: type: file description: Sorted BAM file of read alignments (optional) pattern: "*sortedByCoord.out.bam" - - bam_sorted_aligned: - - meta: + ontologies: [] + bam_sorted_aligned: + - - meta: type: map description: | Groovy Map containing sample information @@ -119,8 +128,9 @@ output: type: file description: Sorted BAM file of read alignments (optional) pattern: "*.Aligned.sortedByCoord.out.bam" - - bam_transcript: - - meta: + ontologies: [] + bam_transcript: + - - meta: type: map description: | Groovy Map containing sample information @@ -129,8 +139,9 @@ output: type: file description: Output BAM file of transcriptome alignment (optional) pattern: "*toTranscriptome.out.bam" - - bam_unsorted: - - meta: + ontologies: [] + bam_unsorted: + - - meta: type: map description: | Groovy Map containing sample information @@ -139,8 +150,9 @@ output: type: file description: Unsorted BAM file of read alignments (optional) pattern: "*Aligned.unsort.out.bam" - - fastq: - - meta: + ontologies: [] + fastq: + - - meta: type: map description: | Groovy Map containing sample information @@ -149,8 +161,10 @@ output: type: file description: Unmapped FastQ files (optional) pattern: "*fastq.gz" - - tab: - - meta: + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + tab: + - - meta: type: map description: | Groovy Map containing sample information @@ -159,8 +173,10 @@ output: type: file description: STAR output tab file(s) (optional) pattern: "*.tab" - - spl_junc_tab: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + spl_junc_tab: + - - meta: type: map description: | Groovy Map containing sample information @@ -169,8 +185,10 @@ output: type: file description: STAR output splice junction tab file pattern: "*.SJ.out.tab" - - read_per_gene_tab: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + read_per_gene_tab: + - - meta: type: map description: | Groovy Map containing sample information @@ -179,8 +197,10 @@ output: type: file description: STAR output read per gene tab file pattern: "*.ReadsPerGene.out.tab" - - junction: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + junction: + - - meta: type: map description: | Groovy Map containing sample information @@ -189,19 +209,20 @@ output: type: file description: STAR chimeric junction output file (optional) pattern: "*.out.junction" - - sam: - - meta: + ontologies: [] + sam: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*.out.sam" - "*.out.sam": type: file description: STAR output SAM file(s) (optional) pattern: "*.out.sam" - - wig: - - meta: + ontologies: [] + wig: + - - meta: type: map description: | Groovy Map containing sample information @@ -210,8 +231,9 @@ output: type: file description: STAR output wiggle format file(s) (optional) pattern: "*.wig" - - bedgraph: - - meta: + ontologies: [] + bedgraph: + - - meta: type: map description: | Groovy Map containing sample information @@ -220,6 +242,7 @@ output: type: file description: STAR output bedGraph format file(s) (optional) pattern: "*.bg" + ontologies: [] authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/star/genomegenerate/meta.yml b/modules/nf-core/star/genomegenerate/meta.yml index 33c1f65f3..39ed3cbde 100644 --- a/modules/nf-core/star/genomegenerate/meta.yml +++ b/modules/nf-core/star/genomegenerate/meta.yml @@ -24,6 +24,7 @@ input: - fasta: type: file description: Fasta file of the reference genome + ontologies: [] - - meta2: type: map description: | @@ -32,9 +33,10 @@ input: - gtf: type: file description: GTF file of the reference genome + ontologies: [] output: - - index: - - meta: + index: + - - meta: type: map description: | Groovy Map containing sample information @@ -43,11 +45,13 @@ output: type: directory description: Folder containing the star index files pattern: "star" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/starfusion/build/tests/main.nf.test b/modules/nf-core/starfusion/build/tests/main.nf.test index ae18299e2..2fa9f044c 100644 --- a/modules/nf-core/starfusion/build/tests/main.nf.test +++ b/modules/nf-core/starfusion/build/tests/main.nf.test @@ -23,13 +23,13 @@ nextflow_process { input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/CTAT_HumanFusionLib.mini.dat.gz') input[3] = "homo_sapiens" - input[4] = "http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam37.4/Pfam-A.hmm.gz" + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/Pfam-A.hmm.gz') input[5] = [ - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3f", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3i", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3p" + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3f'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3i'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3m'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3p') ] input[6] = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm" """ @@ -125,22 +125,22 @@ nextflow_process { """ input[0] = [ [ id:'minigenome_fasta' ], - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/minigenome.fa') ] input[1] = [ [ id:'minigenome_gtf' ], - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/minigenome.gtf') ] - input[2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/CTAT_HumanFusionLib.mini.dat.gz') input[3] = "homo_sapiens" - input[4] = "http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam37.4/Pfam-A.hmm.gz" + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/Pfam-A.hmm.gz') input[5] = [ - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3f", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3i", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3p" + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3f'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3i'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3m'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3p') ] input[6] = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm" """ @@ -160,21 +160,21 @@ nextflow_process { """ input[0] = [ [ id:'minigenome_fasta' ], - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa") + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/minigenome.fa') ] input[1] = [ [ id:'minigenome_gtf' ], - file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf") + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/minigenome.gtf') ] - input[2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz") + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/CTAT_HumanFusionLib.mini.dat.gz') input[3] = "homo_sapiens" - input[4] = "http://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam37.4/Pfam-A.hmm.gz" + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/Pfam-A.hmm.gz') input[5] = [ - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3f", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3i", - "https://www.dfam.org/releases/Dfam_3.8/infrastructure/dfamscan/homo_sapiens_dfam.hmm.h3m" + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3f'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3i'), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_dfam.hmm.h3m') ] input[6] = "https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/AnnotFilterRule.pm" """ diff --git a/modules/nf-core/stringtie/merge/meta.yml b/modules/nf-core/stringtie/merge/meta.yml index cf6902b32..3201746c2 100644 --- a/modules/nf-core/stringtie/merge/meta.yml +++ b/modules/nf-core/stringtie/merge/meta.yml @@ -13,27 +13,32 @@ tools: licence: ["MIT"] identifier: biotools:stringtie input: - - - stringtie_gtf: + - stringtie_gtf: + type: file + description: | + Stringtie transcript gtf output(s). + pattern: "*.gtf" + ontologies: [] + - annotation_gtf: + type: file + description: | + Annotation gtf file (optional). + pattern: "*.gtf" + ontologies: [] +output: + gtf: + - stringtie.merged.gtf: type: file - description: | - Stringtie transcript gtf output(s). - pattern: "*.gtf" - - - annotation_gtf: + description: Merged gtf file + pattern: "stringtie.merged.gtf" + ontologies: [] + versions: + - versions.yml: type: file - description: | - Annotation gtf file (optional). - pattern: "*.gtf" -output: - - gtf: - - stringtie.merged.gtf: - type: file - description: Merged gtf file - pattern: "stringtie.merged.gtf" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@yuukiiwa" maintainers: diff --git a/modules/nf-core/stringtie/stringtie/meta.yml b/modules/nf-core/stringtie/stringtie/meta.yml index e55b2abfc..9cdd14004 100644 --- a/modules/nf-core/stringtie/stringtie/meta.yml +++ b/modules/nf-core/stringtie/stringtie/meta.yml @@ -23,13 +23,15 @@ input: type: file description: | Stringtie transcript gtf output(s). - - - annotation_gtf: - type: file - description: | - Annotation gtf file (optional). + ontologies: [] + - annotation_gtf: + type: file + description: | + Annotation gtf file (optional). + ontologies: [] output: - - transcript_gtf: - - meta: + transcript_gtf: + - - meta: type: map description: | Groovy Map containing sample information @@ -38,8 +40,9 @@ output: type: file description: transcript gtf pattern: "*.{transcripts.gtf}" - - abundance: - - meta: + ontologies: [] + abundance: + - - meta: type: map description: | Groovy Map containing sample information @@ -48,8 +51,9 @@ output: type: file description: abundance pattern: "*.{abundance.txt}" - - coverage_gtf: - - meta: + ontologies: [] + coverage_gtf: + - - meta: type: map description: | Groovy Map containing sample information @@ -58,8 +62,9 @@ output: type: file description: coverage gtf pattern: "*.{coverage.gtf}" - - ballgown: - - meta: + ontologies: [] + ballgown: + - - meta: type: map description: | Groovy Map containing sample information @@ -68,11 +73,14 @@ output: type: file description: for running ballgown pattern: "*.{ballgown}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/ucsc/gtftogenepred/meta.yml b/modules/nf-core/ucsc/gtftogenepred/meta.yml index cf04154d4..5939538df 100644 --- a/modules/nf-core/ucsc/gtftogenepred/meta.yml +++ b/modules/nf-core/ucsc/gtftogenepred/meta.yml @@ -22,9 +22,10 @@ input: type: file description: GTF file pattern: "*.{gtf}" + ontologies: [] output: - - genepred: - - meta: + genepred: + - - meta: type: map description: | Groovy Map containing sample information @@ -33,8 +34,9 @@ output: type: file description: genepred file pattern: "*.{genepred}" - - refflat: - - meta: + ontologies: [] + refflat: + - - meta: type: map description: | Groovy Map containing sample information @@ -43,11 +45,14 @@ output: type: file description: refflat file pattern: "*.{refflat}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@BarryDigby" - "@anoronh4" diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index 40257fa61..7324d8323 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -31,7 +31,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { if (whitelist) { ch_whitelist = ch_fusion_list.combine(Channel.value(file(whitelist, checkIfExists:true))) - .map { meta, fusions, whitelist -> [ meta, [fusions, whitelist] ] } + .map { meta, fusions, whitelist_file -> [ meta, [fusions, whitelist_file] ] } CAT_CAT(ch_whitelist) // fusioninspector takes care of possible duplicates ch_versions = ch_versions.mix(CAT_CAT.out.versions) From 920313ac21a1db80e1d269644d25471a0776ead7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 3 Sep 2025 13:51:37 +0200 Subject: [PATCH 843/887] update subwfs, solve linting issues --- README.md | 2 +- modules.json | 6 +-- nextflow.config | 37 +++++++++++++++---- nextflow_schema.json | 11 ++++-- ro-crate-metadata.json | 2 +- subworkflows/local/build_references/main.nf | 1 - .../utils_nextflow_pipeline/tests/tags.yml | 2 - .../utils_nfcore_pipeline/tests/tags.yml | 2 - .../tests/nextflow.config | 2 +- 9 files changed, 44 insertions(+), 21 deletions(-) delete mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml delete mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml diff --git a/README.md b/README.md index 6da8f3b1a..6f1a9fd19 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml) -[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) +[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.2565517-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.2565517) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) [![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) diff --git a/modules.json b/modules.json index fb18b3dc9..9505147f7 100644 --- a/modules.json +++ b/modules.json @@ -238,17 +238,17 @@ }, "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", + "git_sha": "dcd088f483cede0c3df4034d405126f05a764cc7", "installed_by": ["subworkflows"] } } diff --git a/nextflow.config b/nextflow.config index ef54ad4e6..bf0f24ca1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -301,23 +301,46 @@ dag { manifest { name = 'nf-core/rnafusion' contributors = [ - // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 [ name: 'Martin Proks', affiliation: '', email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + github: '@matq007', + contribution: ['author'], orcid: '' ], [ - name: ' Annick Renevey', - affiliation: '', + name: 'Annick Renevey', + affiliation: 'SciLifeLab, Karolinska Institutet', + email: 'annick.renevey@scilifelab.se', + github: '@rannick', + contribution: ['author', 'maintainer'], + orcid: '0000-0001-7411-6063' + ], + [ + name: 'Maxime U Garcia', + affiliation: 'Seqera', + email: 'maxime.garcia@seqera.io', + github: '@maxulysse', + contribution: ['author'], + orcid: '0000-0003-2827-9261' + ], + [ + name: 'Anabella Trigila', + affiliation: 'ZS Associates', email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + github: '@atrigila', + contribution: ['contributor', 'maintainer'], orcid: '' ], + [ + name: 'Nicolas Vannieuwkerke', + affiliation: 'Center for Medical Genetics Ghent', + email: '', + github: '@nvnieuwk', + contribution: ['contributor', 'maintainer'], + orcid: '' + ] ] homePage = 'https://github.com/nf-core/rnafusion' description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" diff --git a/nextflow_schema.json b/nextflow_schema.json index 5b15693b1..478c27b40 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -39,6 +39,7 @@ "input": { "type": "string", "format": "file-path", + "mimetype": "text/csv", "schema": "assets/schema_input.json", "exists": true, "pattern": "^\\S+\\.(csv|yaml|yml|json)$", @@ -335,16 +336,20 @@ }, "save_trimmed_fail": { "type": "boolean", - "fa_icon": "far fa-times-circle" + "fa_icon": "far fa-times-circle", + "description": "FASTP: Specify true to save files that failed to pass trimming thresholds" }, "min_trimmed_reads": { "type": "integer", "default": 1, - "fa_icon": "fas fa-search-minus" + "fa_icon": "fas fa-search-minus", + "description": "FASTP: Inputs with fewer than this reads will be filtered out of the \"reads\" output channel" + }, "save_merged": { "type": "boolean", - "fa_icon": "fas fa-download" + "fa_icon": "fas fa-download", + "description": "FASTP: Specify true to save merged reads" } } }, diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 3925e8228..bcd77eb1e 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "InProgress", "datePublished": "2025-07-08T11:39:11+00:00", - "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 3 fusion callers tools are created, and are also aggregated, most notably in a pdf visualisation document, a vcf data collection file, and html and tsv reports.\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results).\n\nIn rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human).\n\n## Pipeline summary\n\n![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png)\n\n### References\n\nThe references for the pipeline can be downloaded from the nf-core AWS megatests S3 bucket using the following command for the [AWS CLI tool](https://github.com/aws/aws-cli):\n\n```bash\naws --no-sign-request s3 sync s3://nf-core-awsmegatests/rnafusion/references/ \n```\n\nThe path to the downloaded references can then be provided to the pipeline with the `--genomes_base` parameter.\n\n\u26a0\ufe0f **Please note that the references are large and can take a long time to download, so it is recommended to download them once and use them for all future runs of the pipeline.**\n\nThe pipeline is also able to build the references in case files from a specific gencode version are missing (Note: only gencode 46 is available for fusioncatcher). This is done automatically when the expected references are not found and these files will be automatically published in the directory specified by the `--genomes_base` parameter. Use the `--references_only` parameter to trigger the reference building workflow only, without running the rest of the pipeline.\n\n1. Download gencode fasta and gtf files\n2. Download the HGNC nomenclature file\n3. Create files needed for QC (Sequence Dictionary and RRNA intervals)\n4. Convert the gtf file to a refflat file\n5. Create the [Salmon](https://salmon.readthedocs.io/en/latest/) index\n6. Create [STAR](https://github.com/alexdobin/STAR) index\n7. Build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) and [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) references\n8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs\n\n> [!WARNING]\n> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. See the [References](#references) section for more information.\n\n#### Main workflow\n\n1. Input samplesheet check\n2. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n3. Optional trimming with [fastp](https://github.com/OpenGene/fastp)\n4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR)\n5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba)\n6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion)\n 7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected)\n 7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher)\n7. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/)\n8. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING)\n9. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report)\n10. Post-processing and analysis of data\n - [FusionInspector](https://github.com/FusionInspector/FusionInspector)\n - Summarize information into a VCF file\n - [Arriba](https://github.com/suhrig/arriba) visualisation\n - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-))\n11. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n12. Compress bam files to cram with [samtools view](http://www.htslib.org/)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nAs the reference building is computationally heavy (> 24h on HPC), we had to use dummy reference files in the test profile. Therefore, it is recommended to run the test profile with the `-stub` option.\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile test, \\\n --outdir \\\n -stub\n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n> **Notes:**\n>\n> - Conda is not currently supported; run with singularity or docker.\n> - Paths need to be absolute.\n> - GRCh38 is the only supported reference.\n> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp.\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick))\n\n## We thank the following people for their help in the development of this pipeline\n\n- [Phil Ewels](https://github.com/ewels)\n- [Rickard Hammar\u00e9n](https://github.com/Hammarn)\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Praveen Raj](https://github.com/praveenraj2018)\n- [Anabella Trigila](https://github.com/atrigila)\n- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnafusion for your analysis, please cite it using the following doi: [10.5281/zenodo.3946477](https://doi.org/10.5281/zenodo.3946477)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.2565517-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.2565517)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 3 fusion callers tools are created, and are also aggregated, most notably in a pdf visualisation document, a vcf data collection file, and html and tsv reports.\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results).\n\nIn rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human).\n\n## Pipeline summary\n\n![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png)\n\n### References\n\nThe references for the pipeline can be downloaded from the nf-core AWS megatests S3 bucket using the following command for the [AWS CLI tool](https://github.com/aws/aws-cli):\n\n```bash\naws --no-sign-request s3 sync s3://nf-core-awsmegatests/rnafusion/references/ \n```\n\nThe path to the downloaded references can then be provided to the pipeline with the `--genomes_base` parameter.\n\n\u26a0\ufe0f **Please note that the references are large and can take a long time to download, so it is recommended to download them once and use them for all future runs of the pipeline.**\n\nThe pipeline is also able to build the references in case files from a specific gencode version are missing (Note: only gencode 46 is available for fusioncatcher). This is done automatically when the expected references are not found and these files will be automatically published in the directory specified by the `--genomes_base` parameter. Use the `--references_only` parameter to trigger the reference building workflow only, without running the rest of the pipeline.\n\n1. Download gencode fasta and gtf files\n2. Download the HGNC nomenclature file\n3. Create files needed for QC (Sequence Dictionary and RRNA intervals)\n4. Convert the gtf file to a refflat file\n5. Create the [Salmon](https://salmon.readthedocs.io/en/latest/) index\n6. Create [STAR](https://github.com/alexdobin/STAR) index\n7. Build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) and [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) references\n8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs\n\n> [!WARNING]\n> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. See the [References](#references) section for more information.\n\n#### Main workflow\n\n1. Input samplesheet check\n2. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n3. Optional trimming with [fastp](https://github.com/OpenGene/fastp)\n4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR)\n5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba)\n6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion)\n 7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected)\n 7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher)\n7. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/)\n8. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING)\n9. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report)\n10. Post-processing and analysis of data\n - [FusionInspector](https://github.com/FusionInspector/FusionInspector)\n - Summarize information into a VCF file\n - [Arriba](https://github.com/suhrig/arriba) visualisation\n - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-))\n11. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n12. Compress bam files to cram with [samtools view](http://www.htslib.org/)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nAs the reference building is computationally heavy (> 24h on HPC), we had to use dummy reference files in the test profile. Therefore, it is recommended to run the test profile with the `-stub` option.\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile test, \\\n --outdir \\\n -stub\n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n> **Notes:**\n>\n> - Conda is not currently supported; run with singularity or docker.\n> - Paths need to be absolute.\n> - GRCh38 is the only supported reference.\n> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp.\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick))\n\n## We thank the following people for their help in the development of this pipeline\n\n- [Phil Ewels](https://github.com/ewels)\n- [Rickard Hammar\u00e9n](https://github.com/Hammarn)\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Praveen Raj](https://github.com/praveenraj2018)\n- [Anabella Trigila](https://github.com/atrigila)\n- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnafusion for your analysis, please cite it using the following doi: [10.5281/zenodo.3946477](https://doi.org/10.5281/zenodo.3946477)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" diff --git a/subworkflows/local/build_references/main.nf b/subworkflows/local/build_references/main.nf index 7ac3285a2..78d413709 100644 --- a/subworkflows/local/build_references/main.nf +++ b/subworkflows/local/build_references/main.nf @@ -24,7 +24,6 @@ include { SALMON_INDEX } from '../../../modules/nf-core/salmo include { FUSIONREPORT_DOWNLOAD } from '../../../modules/nf-core/fusionreport/download/main' include { STARFUSION_BUILD } from '../../../modules/nf-core/starfusion/build/main' include { GFFREAD } from '../../../modules/nf-core/gffread/main' -include { getFileSuffix } from '../../../modules/nf-core/cat/cat/main.nf' /* ======================================================================================== diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml deleted file mode 100644 index f84761125..000000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nextflow_pipeline: - - subworkflows/nf-core/utils_nextflow_pipeline/** diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml deleted file mode 100644 index ac8523c9a..000000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfcore_pipeline: - - subworkflows/nf-core/utils_nfcore_pipeline/** diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config index 09ef842ae..443e828cf 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -5,4 +5,4 @@ plugins { validation { parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" monochromeLogs = true -} \ No newline at end of file +} From 5276450cbe785eb57d21bd12511a18ef8bc819a6 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 3 Sep 2025 13:53:12 +0200 Subject: [PATCH 844/887] prettier --- docs/output.md | 1 + nextflow_schema.json | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 9937f7fb4..e2a5c4391 100644 --- a/docs/output.md +++ b/docs/output.md @@ -283,6 +283,7 @@ The weights for databases are as follows: The Fusion Indication Index FII is calculated using two components: 1. Tool Detection (50% of total FII) + - Calculated as: (number of tools detecting the fusion) / (number of tools actually used) - This reflects how many of the active tools found the fusion diff --git a/nextflow_schema.json b/nextflow_schema.json index 478c27b40..b6ce64d69 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -344,7 +344,6 @@ "default": 1, "fa_icon": "fas fa-search-minus", "description": "FASTP: Inputs with fewer than this reads will be filtered out of the \"reads\" output channel" - }, "save_merged": { "type": "boolean", From 99314904b2ca0be0efeb7bf30ff0e85105c9d922 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 3 Sep 2025 15:22:09 +0200 Subject: [PATCH 845/887] update snaps --- tests/test_stub.nf.test.snap | 55 +++++++++++++------------------- tests/test_stub_bam.nf.test.snap | 50 ++++++++++++----------------- 2 files changed, 42 insertions(+), 63 deletions(-) diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index aa25d1c31..344aaf4c6 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -82,8 +82,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -107,6 +105,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -237,7 +236,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:22:03.749618742" + "timestamp": "2025-09-03T14:26:01.049466" }, "stub test stringtie": { "content": [ @@ -320,8 +319,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -345,6 +342,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -402,7 +400,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:22:39.560551811" + "timestamp": "2025-09-03T14:27:50.733492" }, "stub test arriba": { "content": [ @@ -485,8 +483,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -510,6 +506,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -560,7 +557,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:19:38.026180355" + "timestamp": "2025-09-03T14:20:11.549426" }, "stub test fusioninspector": { "content": [ @@ -678,8 +675,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -709,6 +704,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -838,7 +834,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:45:07.811039" + "timestamp": "2025-09-03T14:34:09.933192" }, "stub test salmon": { "content": [ @@ -889,8 +885,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -906,6 +900,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -934,7 +929,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:43:03.790312" + "timestamp": "2025-09-03T14:32:07.557489" }, "stub test ctatsplicing": { "content": [ @@ -1034,8 +1029,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1059,6 +1052,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -1190,7 +1184,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T15:57:11.157812" + "timestamp": "2025-09-03T14:21:57.973003" }, "stub test fusionreport": { "content": [ @@ -1302,8 +1296,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1333,6 +1325,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -1463,7 +1456,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:40:47.748229" + "timestamp": "2025-09-03T14:29:47.966689" }, "stub test fastp": { "content": [ @@ -1520,8 +1513,6 @@ "fastqc_for_fastp", "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1536,6 +1527,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1544,7 +1536,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:41:54.637163" + "timestamp": "2025-09-03T14:30:56.64966" }, "stub test fusioncatcher": { "content": [ @@ -1593,8 +1585,6 @@ "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", "fusioncatcher/test.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1609,6 +1599,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1617,7 +1608,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T15:58:18.715882" + "timestamp": "2025-09-03T14:23:05.549559" }, "stub test fusioncatcher trim": { "content": [ @@ -1675,8 +1666,6 @@ "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", "fusioncatcher/test.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1691,6 +1680,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1699,7 +1689,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T15:59:24.345391" + "timestamp": "2025-09-03T14:24:14.169033" }, "stub test all": { "content": [ @@ -1875,8 +1865,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1907,6 +1895,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -2072,6 +2061,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T15:53:38.903818" + "timestamp": "2025-09-03T14:18:24.876773" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index 8021399a8..90240c794 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -62,8 +62,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -87,6 +85,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -192,7 +191,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:58:08.911034" + "timestamp": "2025-09-03T15:03:29.812853" }, "stub test stringtie": { "content": [ @@ -255,8 +254,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -280,6 +277,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -315,7 +313,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:59:44.881636" + "timestamp": "2025-09-03T15:05:06.630556" }, "stub test arriba": { "content": [ @@ -378,8 +376,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -403,6 +399,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -428,7 +425,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:53:13.922071" + "timestamp": "2025-09-03T14:58:37.480648" }, "stub test fusioninspector": { "content": [ @@ -526,8 +523,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -557,6 +552,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -664,7 +660,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T17:06:31.98408" + "timestamp": "2025-09-03T15:11:58.199402" }, "stub test salmon": { "content": [ @@ -725,8 +721,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -751,6 +745,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -779,7 +774,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T17:04:40.402707" + "timestamp": "2025-09-03T15:10:03.376978" }, "stub test ctatsplicing": { "content": [ @@ -859,8 +854,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -884,6 +877,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -993,7 +987,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:54:50.384883" + "timestamp": "2025-09-03T15:00:17.678361" }, "stub test fusionreport": { "content": [ @@ -1085,8 +1079,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1116,6 +1108,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -1221,7 +1214,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T17:01:37.589889" + "timestamp": "2025-09-03T15:06:51.996134" }, "stub test fastp": { "content": [ @@ -1288,8 +1281,6 @@ "fastqc_for_fastp", "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1313,6 +1304,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1321,7 +1313,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T17:03:09.838745" + "timestamp": "2025-09-03T15:08:28.85535" }, "stub test fusioncatcher": { "content": [ @@ -1380,8 +1372,6 @@ "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", "fusioncatcher/test.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1405,6 +1395,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1413,7 +1404,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:56:26.925856" + "timestamp": "2025-09-03T15:01:52.523177" }, "stub test all": { "content": [ @@ -1569,8 +1560,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1601,6 +1590,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -1744,6 +1734,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T16:51:37.37908" + "timestamp": "2025-09-03T14:56:57.734145" } } \ No newline at end of file From 0fdf38a2003a1757de92981ea376c21de96690ce Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 4 Sep 2025 21:13:40 +0200 Subject: [PATCH 846/887] update snap --- .../tests/main.nf.test | 2 +- tests/test_stub.nf.test.snap | 55 ++++++++----------- tests/test_stub_bam.nf.test.snap | 50 +++++++---------- 3 files changed, 43 insertions(+), 64 deletions(-) diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test index e02352e94..746763ee7 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test @@ -110,7 +110,7 @@ nextflow_workflow { input[12] = false input[13] = true input[14] = 1 - input[15] = params.whitelist + input[15] = [] """ } } diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index 5a3a1bc32..e54f807af 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -82,8 +82,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -107,6 +105,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -237,7 +236,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:22:03.749618742" + "timestamp": "2025-09-04T17:13:34.296716" }, "stub test stringtie": { "content": [ @@ -320,8 +319,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -345,6 +342,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -402,7 +400,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:22:39.560551811" + "timestamp": "2025-09-04T17:15:18.001786" }, "stub test arriba": { "content": [ @@ -485,8 +483,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -510,6 +506,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -560,7 +557,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:19:38.026180355" + "timestamp": "2025-09-04T17:07:39.086364" }, "stub test fusioninspector": { "content": [ @@ -691,8 +688,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -722,6 +717,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -853,7 +849,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:25:11.604461904" + "timestamp": "2025-09-04T17:21:42.479016" }, "stub test salmon": { "content": [ @@ -904,8 +900,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -921,6 +915,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -949,7 +944,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:24:28.067668122" + "timestamp": "2025-09-04T17:19:36.873298" }, "stub test ctatsplicing": { "content": [ @@ -1049,8 +1044,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1074,6 +1067,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -1205,7 +1199,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:20:13.319176919" + "timestamp": "2025-09-04T17:09:29.991365" }, "stub test fusionreport": { "content": [ @@ -1317,8 +1311,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1348,6 +1340,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -1478,7 +1471,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:23:24.792491035" + "timestamp": "2025-09-04T17:17:14.759248" }, "stub test fastp": { "content": [ @@ -1535,8 +1528,6 @@ "fastqc_for_fastp", "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1551,6 +1542,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1559,7 +1551,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:23:56.858216733" + "timestamp": "2025-09-04T17:18:27.651568" }, "stub test fusioncatcher": { "content": [ @@ -1608,8 +1600,6 @@ "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", "fusioncatcher/test.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1624,6 +1614,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1632,7 +1623,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:20:49.030393254" + "timestamp": "2025-09-04T17:10:40.658609" }, "stub test fusioncatcher trim": { "content": [ @@ -1690,8 +1681,6 @@ "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", "fusioncatcher/test.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1706,6 +1695,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1714,7 +1704,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:21:15.319414382" + "timestamp": "2025-09-04T17:11:47.659941" }, "stub test all": { "content": [ @@ -1903,8 +1893,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1935,6 +1923,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -2102,6 +2091,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:19:03.489568486" + "timestamp": "2025-09-04T17:05:39.966652" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index af94c528c..5efbe384f 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -62,8 +62,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -87,6 +85,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -192,7 +191,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:29:13.77559568" + "timestamp": "2025-09-04T17:45:42.13657" }, "stub test stringtie": { "content": [ @@ -255,8 +254,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -280,6 +277,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -315,7 +313,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:29:53.58622226" + "timestamp": "2025-09-04T17:47:52.517978" }, "stub test arriba": { "content": [ @@ -378,8 +376,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -403,6 +399,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -428,7 +425,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:26:49.642086755" + "timestamp": "2025-09-04T17:40:41.686721" }, "stub test fusioninspector": { "content": [ @@ -539,8 +536,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -570,6 +565,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -679,7 +675,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:32:46.154112416" + "timestamp": "2025-09-04T17:56:24.707034" }, "stub test salmon": { "content": [ @@ -740,8 +736,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -766,6 +760,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -794,7 +789,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:31:56.747683511" + "timestamp": "2025-09-04T17:54:08.811545" }, "stub test ctatsplicing": { "content": [ @@ -874,8 +869,6 @@ "fastqc", "fastqc/test.html", "fastqc/test.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -899,6 +892,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -1008,7 +1002,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:27:33.646044212" + "timestamp": "2025-09-04T17:42:17.062793" }, "stub test fusionreport": { "content": [ @@ -1100,8 +1094,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1131,6 +1123,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/star", @@ -1236,7 +1229,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:30:34.704355039" + "timestamp": "2025-09-04T17:50:22.553497" }, "stub test fastp": { "content": [ @@ -1303,8 +1296,6 @@ "fastqc_for_fastp", "fastqc_for_fastp/test_trimmed.html", "fastqc_for_fastp/test_trimmed.zip", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1328,6 +1319,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1336,7 +1328,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:31:12.481382473" + "timestamp": "2025-09-04T17:52:24.935928" }, "stub test fusioncatcher": { "content": [ @@ -1395,8 +1387,6 @@ "fusioncatcher/test.fusion-genes.txt", "fusioncatcher/test.log", "fusioncatcher/test.summary.txt", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1420,6 +1410,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai" ] @@ -1428,7 +1419,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:28:10.779582543" + "timestamp": "2025-09-04T17:43:49.673677" }, "stub test all": { "content": [ @@ -1597,8 +1588,6 @@ "fusionreport/test/test.fusions.csv", "fusionreport/test/test.fusions.json", "fusionreport/test/test_fusionreport_index.html", - "gatk4", - "gatk4/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_plots", @@ -1629,6 +1618,7 @@ "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.genepred", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.interval_list", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46.gtf.refflat", + "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.dict", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa", "references/GRCh38/gencode_v46/gencode/Homo_sapiens.GRCh38.46_dna_primary_assembly.fa.fai", "references/GRCh38/gencode_v46/salmon", @@ -1774,6 +1764,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:26:08.667543202" + "timestamp": "2025-09-04T17:39:00.417725" } } \ No newline at end of file From 261d8d87f35faa476d71871fda60541e02dc5821 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 5 Sep 2025 12:49:34 +0200 Subject: [PATCH 847/887] update qc workflow test --- subworkflows/local/qc_workflow/main.nf | 6 ++--- .../local/qc_workflow/test/main.nf.test | 24 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/subworkflows/local/qc_workflow/main.nf b/subworkflows/local/qc_workflow/main.nf index a423471db..d83fea35c 100644 --- a/subworkflows/local/qc_workflow/main.nf +++ b/subworkflows/local/qc_workflow/main.nf @@ -19,9 +19,9 @@ workflow QC_WORKFLOW { PICARD_COLLECTRNASEQMETRICS( ch_bam_sorted, - ch_refflat.map{ _meta, refflat -> [ refflat ] }, - ch_fasta.map{ _meta, fasta -> [ fasta ] }, - ch_rrna_interval.map{ _meta, intervals -> [ intervals ] }.ifEmpty([]) + ch_refflat.map{ _meta, refflat -> refflat }, + ch_fasta.map{ _meta, fasta -> fasta }, + ch_rrna_interval.map{ _meta, intervals -> intervals } ) // Some chromosome or annotation may not have rRNA genes ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = PICARD_COLLECTRNASEQMETRICS.out.metrics diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index 2abb710e1..ba3053e95 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -13,8 +13,8 @@ nextflow_workflow { setup { // Create refflat reference - run("GTF_TO_REFFLAT") { - script "../../../../modules/local/uscs/custom_gtftogenepred/main.nf" + run("UCSC_GTFTOGENEPRED") { + script "../../../../modules/nf-core/ucsc/gtftogenepred/main.nf" process { """ input[0] =Channel.of( @@ -34,8 +34,8 @@ nextflow_workflow { """ input[0] = Channel.of( [ - [id: 'fasta'], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", checkIfExist: true) + [id: 'gtf'], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.gtf", checkIfExists: true) ] ) """ @@ -60,8 +60,8 @@ nextflow_workflow { input[0] = AGAT_CONVERTGFF2BED.out.bed input[1] = Channel.of( [ - [id: 'chr22_dic'], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.dict", checkIfExist: true) + [id: 'chr22_dict'], + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.dict", checkIfExists: true) ] ) """ @@ -75,8 +75,9 @@ nextflow_workflow { params { skip_qc = false fusioninspector_only = false - starfusion = true - all = true + tools = "starfusion" + outdir = "test" + } workflow { @@ -89,12 +90,12 @@ nextflow_workflow { ]) // ch_refflat - input[1] = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } + input[1] = UCSC_GTFTOGENEPRED.out.refflat // ch_fasta input[2] = Channel.of( [ [ id: "test_ref" ], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta", checkIfExist: true) + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta", checkIfExists: true) ] ) @@ -102,12 +103,13 @@ nextflow_workflow { input[3] = Channel.of( [ [ id: "test_ref" ], - file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta.fai", checkIfExist: true) + file("https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta.fai", checkIfExists: true) ] ) // ch rRNA interval list input[4] = GATK4_BEDTOINTERVALLIST.out.interval_list """ + } } From 3901adb69e81399209598d74b7679cefddb3df21 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 5 Sep 2025 12:01:55 +0100 Subject: [PATCH 848/887] feat: add missing PDF and HTML report patterns to tower.yml - Add FastQC HTML reports for both original and trimmed reads - Add FusionInspector web HTML report pattern - Add individual fusion report HTML files from fusionreport - Add MultiQC HTML report and PDF plots patterns - Add pipeline execution and DAG HTML reports - Update Picard PDF pattern to be more general - Fix VCF pattern to match actual file extensions These changes ensure all PDF and HTML files generated by the pipeline are properly captured in Tower's report visualization system. --- tower.yml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tower.yml b/tower.yml index 2edf5a7fe..73348eb4b 100644 --- a/tower.yml +++ b/tower.yml @@ -7,25 +7,41 @@ reports: display: "PDF visualisation of the transcripts involved in predicted fusions" "**/fastp/*fastp.html": display: "Post fastp trimming HTML report" + "**/fastqc/*_fastqc.html": + display: "FastQC HTML report" + "**/fastqc_for_fastp/*_fastqc.html": + display: "FastQC HTML report for trimmed reads" "**/fusioncatcher/*.fusioncatcher.fusion-genes.txt": display: "FusionCatcher identified fusion TXT report" + "**/fusioninspector/*.fusion_inspector_web.html": + display: "FusionInspector web HTML report" "**/fusioninspector/*.FusionInspector.fusions.abridged.tsv": display: "FusionInspector TSV report" "**/fusionreport/*/*_fusionreport_index.html": display: "Fusion-report HTML report" - "**/vcf/*_fusion_data.vcf.gz": - display: "Collected statistics on each fusion fed to FusionInspector in VCF format" + "**/fusionreport/*/*.html": + display: "Individual fusion report HTML files" + "**/multiqc/multiqc_report.html": + display: "MultiQC HTML report" + "**/multiqc/multiqc_plots/pdf/*.pdf": + display: "MultiQC PDF plots" + "**/pipeline_info/execution_report_*.html": + display: "Pipeline execution report HTML" + "**/pipeline_info/pipeline_dag_*.html": + display: "Pipeline DAG HTML" "**/picard/*.MarkDuplicates.metrics.txt": display: "Picard: Metrics from CollectRnaMetrics" "**/picard/*_rna_metrics.txt": display: "GATK4: Metrics from MarkDuplicates" "**/picard/*insert*size*metrics.txt": display: "GATK4: Metrics from InsertSizeMetrics" - "**/picard/*pdf": - display: "GATK4: InsertSizeMetrics histogram" + "**/picard/*.pdf": + display: "Picard PDF reports" "**/star_for_starfusion/*ReadsPerGene.out.tab": display: "Number of reads per gene" "**/starfusion/*.starfusion.fusion_predictions.tsv": display: "STAR-Fusion identified fusion TSV report" "**/stringtie/*/*stringtie.merged.gtf": display: "Merged GTFs from StringTie with annotations" + "**/vcf/*_fusion_data.vcf": + display: "Collected statistics on each fusion fed to FusionInspector in VCF format" From a8262a814f6eeae208784fb5453113a0e0a547d4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 5 Sep 2025 13:02:24 +0200 Subject: [PATCH 849/887] update build snap --- tests/test_build.nf.test.snap | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 7e0e54ae2..722144ae1 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -55,8 +55,6 @@ "agat/minigenome.gtf.bed", "bioawk", "bioawk/minigenome.gtf_rrna.gtf.gz", - "gatk4", - "gatk4/minigenome.dict", "pipeline_info", "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", @@ -68,6 +66,7 @@ "references/GRCh38/fusion_report_db/mitelman.db", "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/minigenome.dict", "references/GRCh38/gencode_v46/gencode/minigenome.fa.fai", "references/GRCh38/gencode_v46/gencode/minigenome.gtf.fasta", "references/GRCh38/gencode_v46/gencode/minigenome.gtf.genepred", @@ -194,8 +193,8 @@ [ "minigenome.gtf.bed:md5,4c881266e0a1b1a41815d05a8055aa40", "minigenome.gtf_rrna.gtf.gz:md5,fb03ec66f68bc4becc71c299ed38b62d", - "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", "minigenome.gtf.genepred:md5,c5b0d2118efd89f7a2831e2dc486b999", @@ -287,6 +286,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:18:01.248835367" + "timestamp": "2025-09-05T12:58:07.878931" } } \ No newline at end of file From 49c42310a005fddb8be16a0cc3d8180fd327a226 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 5 Sep 2025 12:05:18 +0100 Subject: [PATCH 850/887] Remove MultiQC PDF plots pattern Individual PDF plots are not useful as standalone reports in Tower. --- tower.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/tower.yml b/tower.yml index 73348eb4b..fed63f3ad 100644 --- a/tower.yml +++ b/tower.yml @@ -23,8 +23,6 @@ reports: display: "Individual fusion report HTML files" "**/multiqc/multiqc_report.html": display: "MultiQC HTML report" - "**/multiqc/multiqc_plots/pdf/*.pdf": - display: "MultiQC PDF plots" "**/pipeline_info/execution_report_*.html": display: "Pipeline execution report HTML" "**/pipeline_info/pipeline_dag_*.html": From 7dfe4ebcf7085ad9db90611588d15bb193edfd4b Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 5 Sep 2025 12:11:39 +0100 Subject: [PATCH 851/887] Remove duplicate MultiQC report pattern The original multiqc_report.html pattern already covers this file. --- tower.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/tower.yml b/tower.yml index fed63f3ad..5f4896145 100644 --- a/tower.yml +++ b/tower.yml @@ -21,8 +21,6 @@ reports: display: "Fusion-report HTML report" "**/fusionreport/*/*.html": display: "Individual fusion report HTML files" - "**/multiqc/multiqc_report.html": - display: "MultiQC HTML report" "**/pipeline_info/execution_report_*.html": display: "Pipeline execution report HTML" "**/pipeline_info/pipeline_dag_*.html": From 44e9277ac4b3db7acf39bd08afc50ebeeb2b4c37 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 5 Sep 2025 12:13:07 +0100 Subject: [PATCH 852/887] Remove redundant fusionreport index pattern The broader fusionreport/*/*.html pattern already covers the index file. --- tower.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tower.yml b/tower.yml index 5f4896145..d8351c979 100644 --- a/tower.yml +++ b/tower.yml @@ -17,10 +17,8 @@ reports: display: "FusionInspector web HTML report" "**/fusioninspector/*.FusionInspector.fusions.abridged.tsv": display: "FusionInspector TSV report" - "**/fusionreport/*/*_fusionreport_index.html": - display: "Fusion-report HTML report" "**/fusionreport/*/*.html": - display: "Individual fusion report HTML files" + display: "Fusion-report HTML files" "**/pipeline_info/execution_report_*.html": display: "Pipeline execution report HTML" "**/pipeline_info/pipeline_dag_*.html": From fc01d42489f6f542fbaf37a79643853b4bee5c61 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 5 Sep 2025 12:15:19 +0100 Subject: [PATCH 853/887] Add missing PDF and HTML report patterns to tower.yml - Add FastQC HTML reports for original and trimmed reads - Add FusionInspector web HTML report - Add individual fusion report HTML files - Add pipeline execution and DAG HTML reports - Update Picard PDF pattern to be more general - Fix VCF pattern to match actual file extensions --- tower.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tower.yml b/tower.yml index d8351c979..e47a82250 100644 --- a/tower.yml +++ b/tower.yml @@ -17,12 +17,16 @@ reports: display: "FusionInspector web HTML report" "**/fusioninspector/*.FusionInspector.fusions.abridged.tsv": display: "FusionInspector TSV report" + "**/fusionreport/*/*_fusionreport_index.html": + display: "Fusion-report HTML report" "**/fusionreport/*/*.html": - display: "Fusion-report HTML files" + display: "Individual fusion report HTML files" "**/pipeline_info/execution_report_*.html": display: "Pipeline execution report HTML" "**/pipeline_info/pipeline_dag_*.html": display: "Pipeline DAG HTML" + "**/vcf/*_fusion_data.vcf": + display: "Collected statistics on each fusion fed to FusionInspector in VCF format" "**/picard/*.MarkDuplicates.metrics.txt": display: "Picard: Metrics from CollectRnaMetrics" "**/picard/*_rna_metrics.txt": @@ -37,5 +41,3 @@ reports: display: "STAR-Fusion identified fusion TSV report" "**/stringtie/*/*stringtie.merged.gtf": display: "Merged GTFs from StringTie with annotations" - "**/vcf/*_fusion_data.vcf": - display: "Collected statistics on each fusion fed to FusionInspector in VCF format" From 38f5832b5735eb9ec8f188f20c5f3e80e066190f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 5 Sep 2025 13:15:50 +0200 Subject: [PATCH 854/887] prettier --- docs/output.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index e2a5c4391..9937f7fb4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -283,7 +283,6 @@ The weights for databases are as follows: The Fusion Indication Index FII is calculated using two components: 1. Tool Detection (50% of total FII) - - Calculated as: (number of tools detecting the fusion) / (number of tools actually used) - This reflects how many of the active tools found the fusion From b1c98ff2abd962389a90d3ca56b03d44dcc9c05d Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 5 Sep 2025 12:16:22 +0100 Subject: [PATCH 855/887] Revert Picard PDF display name change Keep original display name for existing pattern. --- tower.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tower.yml b/tower.yml index e47a82250..acb6daff4 100644 --- a/tower.yml +++ b/tower.yml @@ -34,7 +34,7 @@ reports: "**/picard/*insert*size*metrics.txt": display: "GATK4: Metrics from InsertSizeMetrics" "**/picard/*.pdf": - display: "Picard PDF reports" + display: "GATK4: InsertSizeMetrics histogram" "**/star_for_starfusion/*ReadsPerGene.out.tab": display: "Number of reads per gene" "**/starfusion/*.starfusion.fusion_predictions.tsv": From 126c07ee453712e663afd156cf997eca523b9b24 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 5 Sep 2025 12:17:29 +0100 Subject: [PATCH 856/887] Revert unnecessary Picard PDF pattern change The original *pdf pattern already works fine for matching .pdf files. --- tower.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tower.yml b/tower.yml index acb6daff4..be938b3cb 100644 --- a/tower.yml +++ b/tower.yml @@ -33,7 +33,7 @@ reports: display: "GATK4: Metrics from MarkDuplicates" "**/picard/*insert*size*metrics.txt": display: "GATK4: Metrics from InsertSizeMetrics" - "**/picard/*.pdf": + "**/picard/*pdf": display: "GATK4: InsertSizeMetrics histogram" "**/star_for_starfusion/*ReadsPerGene.out.tab": display: "Number of reads per gene" From 73113eb715ef60019887d966f871822fa3e71a99 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 9 Sep 2025 09:59:08 +0200 Subject: [PATCH 857/887] fix fusioninspector workflow --- modules/local/vcf_collect/main.nf | 1 - .../local/fusioninspector_workflow/main.nf | 13 ++++--- .../tests/main.nf.test | 35 +++++++++---------- .../tests/main.nf.test.snap | 25 ++++--------- .../tests/nextflow.config | 8 ----- 5 files changed, 30 insertions(+), 52 deletions(-) diff --git a/modules/local/vcf_collect/main.nf b/modules/local/vcf_collect/main.nf index 2968c67b3..e43a11711 100644 --- a/modules/local/vcf_collect/main.nf +++ b/modules/local/vcf_collect/main.nf @@ -21,7 +21,6 @@ process VCF_COLLECT { script: def prefix = task.ext.prefix ?: "${meta.id}" - // TODO use BGZIP to compress the VCF file instead of GZIP """ vcf_collect.py --fusioninspector $fusioninspector_tsv --fusionreport $fusionreport_report --fusioninspector_gtf $fusioninspector_gtf_tsv --fusionreport_csv $fusionreport_csv --hgnc $hgnc_ref --sample ${prefix} --out ${prefix}_fusion_data.vcf diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index 300840069..de07933d2 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -31,7 +31,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { if (whitelist) { ch_whitelist = ch_fusion_list.combine(Channel.value(file(whitelist, checkIfExists:true))) - .map { meta, fusions, whitelist -> [ meta, [fusions, whitelist] ] } + .map { meta, fusions, whitelist_file -> [ meta, [fusions, whitelist_file] ] } CAT_CAT(ch_whitelist) // fusioninspector takes care of possible duplicates ch_versions = ch_versions.mix(CAT_CAT.out.versions) @@ -47,7 +47,9 @@ workflow FUSIONINSPECTOR_WORKFLOW { def tsv_nonempty = FUSIONINSPECTOR.out.tsv.filter { _meta, file -> file.exists() && file.size() > 0 } def tsv_abridged_nonempty = FUSIONINSPECTOR.out.abridged_tsv.filter { _meta, file -> file.exists() && file.size() > 0 } def gtf_nonempty = FUSIONINSPECTOR.out.out_gtf.filter { _meta, file -> file.exists() && file.size() > 0 } - + if (!tsv_nonempty) { + log.warn("FUSIONINSPECTOR confirmed no fusions, skipping VCF and visualisation steps.") + } if ( !skip_vcf ) { @@ -61,7 +63,10 @@ workflow FUSIONINSPECTOR_WORKFLOW { VCF_COLLECT(fusion_data, ch_hgnc_ref, ch_hgnc_date) ch_versions = ch_versions.mix(VCF_COLLECT.out.versions) - + } + if ( + !skip_vis + ){ ch_bam_sorted_indexed_fusions = bam_sorted_indexed.join(tsv_nonempty) ARRIBA_VISUALISATION( ch_bam_sorted_indexed_fusions, @@ -71,8 +76,6 @@ workflow FUSIONINSPECTOR_WORKFLOW { ) ch_versions = ch_versions.mix(ARRIBA_VISUALISATION.out.versions) ch_arriba_visualisation = ARRIBA_VISUALISATION.out.pdf - } else { - log.warn("FUSIONINSPECTOR confirmed no fusions, skipping VCF and visualisation steps.") } emit: diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test index e02352e94..37034d577 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test @@ -74,11 +74,11 @@ nextflow_workflow { when { params { no_cosmic = true - whitelist = [] + whitelist = "" outdir = "test" genomes_base = "test" fusionreport_download_args = '--no-cosmic' - fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : "" + fusionreport_detect_args = "--no-cosmic" fusionreport_detect_args2 = "--export csv" } workflow { @@ -94,23 +94,22 @@ nextflow_workflow { input[2] = Channel.of([ [id:'test_sample'], file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")]) input[3] = FUSIONREPORT_DETECT.out.report input[4] = FUSIONREPORT_DETECT.out.csv - input[5] = Channel.of([ - [id:'test_sample'], - [], - [] + input[5] = Channel.of([[ id:'test', single_end:false ], // meta map + file("https://github.com/nf-core/test-datasets/raw/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam.bai", checkIfExists: true) ]) input[6] = Channel.of( [ [ id:'test_gtf' ], file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.gtf')]) - input[7] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3")) - input[8] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv")) + input[7] = Channel.fromPath("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3") + input[8] = Channel.fromPath("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv") input[9] = Channel.of([[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] ) input[10] = Channel.of([[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] ) input[11] = STARFUSION_BUILD.out.reference input[12] = false input[13] = true input[14] = 1 - input[15] = params.whitelist + input[15] = null """ } } @@ -118,7 +117,6 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot(file(workflow.out.ch_arriba_visualisation[0][1]).length()) }, { assert snapshot(workflow.out.versions).match() } ) } @@ -183,11 +181,11 @@ nextflow_workflow { when { params { no_cosmic = true - whitelist = [] + whitelist = "" outdir = "test" genomes_base = "test" fusionreport_download_args = '--no-cosmic' - fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : "" + fusionreport_detect_args = "--no-cosmic" fusionreport_detect_args2 = "--export csv" } workflow { @@ -203,23 +201,22 @@ nextflow_workflow { input[2] = Channel.of([ [id:'test_sample'], file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")]) input[3] = FUSIONREPORT_DETECT.out.report input[4] = FUSIONREPORT_DETECT.out.csv - input[5] = Channel.of([ - [id:'test_sample'], - [], - [] + input[5] = Channel.of([[ id:'test', single_end:false ], // meta map + file("https://github.com/nf-core/test-datasets/raw/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/modules/data/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam.bai", checkIfExists: true) ]) input[6] = Channel.of( [ [ id:'test_gtf' ], file('https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/minigenome.gtf')]) - input[7] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3")) - input[8] = Channel.of(file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv")) + input[7] = Channel.fromPath("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/protein_domains_hg38_GRCh38_v2.5.0.gff3") + input[8] = Channel.fromPath("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/arriba/cytobands_hg38_GRCh38_v2.5.0.tsv") input[9] = Channel.of([[ id:'hgnc' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/hgnc_complete_set.txt")] ) input[10] = Channel.of([[ id:'hgnc_timestamp' ], file("https://github.com/nf-core/test-datasets/raw/refs/heads/rnafusion/testdata/reference/hgnc/HGNC-DB-timestamp.txt")] ) input[11] = STARFUSION_BUILD.out.reference input[12] = false input[13] = true input[14] = 1 - input[15] = params.whitelist + input[15] = null """ } } diff --git a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap index 8c2578116..f156b0d2e 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/fusioninspector_workflow/tests/main.nf.test.snap @@ -3,48 +3,35 @@ "content": [ { "0": [ - [ - { - "id": "test_sample" - }, - "test_sample_combined_fusions_arriba_visualisation.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + ], "1": [ - "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" ], "ch_arriba_visualisation": [ - [ - { - "id": "test_sample" - }, - "test_sample_combined_fusions_arriba_visualisation.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + ], "versions": [ - "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T20:11:13.798144726" + "timestamp": "2025-09-08T17:38:59.895142" }, "FUSIONINSPECTOR_WORKFLOW - human": { "content": [ [ - "versions.yml:md5,01dce7699931b293311f2e5436b88a3a", "versions.yml:md5,3be8e23309ed0bacebcad3d2fb30642a" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-08-28T21:54:05.453749443" + "timestamp": "2025-09-08T17:14:05.797063" } } \ No newline at end of file diff --git a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config index e00f3ced2..5dad203b1 100644 --- a/subworkflows/local/fusioninspector_workflow/tests/nextflow.config +++ b/subworkflows/local/fusioninspector_workflow/tests/nextflow.config @@ -3,14 +3,6 @@ process { ext.args = [] } - withName: 'FUSIONREPORT_DOWNLOAD' { - ext.args = params.fusionreport_download_args - } - - withName: 'FUSIONREPORT_DETECT' { - ext.args = params.fusionreport_detect_args - ext.args2 = params.fusionreport_detect_args2 - } withName: 'FUSIONINSPECTOR' { ext.args = '--annotate --examine_coding_effect' From bd3fddcb454a54f6e13806fe3ab893cc16e73f60 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 9 Sep 2025 13:08:34 +0200 Subject: [PATCH 858/887] update build snap --- subworkflows/local/qc_workflow/test/main.nf.test | 4 +--- tests/test_build.nf.test.snap | 7 +++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index ca6657aa0..a68416482 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -71,12 +71,10 @@ nextflow_workflow { } when { - // Params to activate modules ext.when condition params { skip_qc = false fusioninspector_only = false - starfusion = true - all = true + tools = "all" } workflow { diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 7e0e54ae2..55d1df2b5 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -55,8 +55,6 @@ "agat/minigenome.gtf.bed", "bioawk", "bioawk/minigenome.gtf_rrna.gtf.gz", - "gatk4", - "gatk4/minigenome.dict", "pipeline_info", "pipeline_info/nf_core_rnafusion_software_mqc_versions.yml", "references", @@ -68,6 +66,7 @@ "references/GRCh38/fusion_report_db/mitelman.db", "references/GRCh38/gencode_v46", "references/GRCh38/gencode_v46/gencode", + "references/GRCh38/gencode_v46/gencode/minigenome.dict", "references/GRCh38/gencode_v46/gencode/minigenome.fa.fai", "references/GRCh38/gencode_v46/gencode/minigenome.gtf.fasta", "references/GRCh38/gencode_v46/gencode/minigenome.gtf.genepred", @@ -194,8 +193,8 @@ [ "minigenome.gtf.bed:md5,4c881266e0a1b1a41815d05a8055aa40", "minigenome.gtf_rrna.gtf.gz:md5,fb03ec66f68bc4becc71c299ed38b62d", - "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", + "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", "minigenome.gtf.genepred:md5,c5b0d2118efd89f7a2831e2dc486b999", @@ -287,6 +286,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-09-02T08:18:01.248835367" + "timestamp": "2025-09-09T11:45:13.886497" } } \ No newline at end of file From 82608dd0633b694822632c4c881faf6f367f37ed Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 9 Sep 2025 13:41:04 +0200 Subject: [PATCH 859/887] qc test fixes --- subworkflows/local/qc_workflow/test/main.nf.test | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/qc_workflow/test/main.nf.test b/subworkflows/local/qc_workflow/test/main.nf.test index a68416482..0a8eadf95 100644 --- a/subworkflows/local/qc_workflow/test/main.nf.test +++ b/subworkflows/local/qc_workflow/test/main.nf.test @@ -13,8 +13,8 @@ nextflow_workflow { setup { // Create refflat reference - run("GTF_TO_REFFLAT") { - script "../../../../modules/local/uscs/custom_gtftogenepred/main.nf" + run("UCSC_GTFTOGENEPRED") { + script "../../../../modules/nf-core/ucsc/gtftogenepred/main.nf" process { """ input[0] =Channel.of( @@ -87,7 +87,7 @@ nextflow_workflow { ]) // ch_refflat - input[1] = GTF_TO_REFFLAT.out.refflat.map { that -> [[id:that.Name], that] } + input[1] = UCSC_GTFTOGENEPRED.out.refflat // ch_fasta input[2] = Channel.of( [ From 3656a7265a26afce557d4c7207d2a5f32ac6dfc7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 9 Sep 2025 13:43:01 +0200 Subject: [PATCH 860/887] update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15da8cb59..33b18a92c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,7 +96,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changed local `ARRIBA_VISUALIZATION`, `CTATSPLICING_STARTOCANCERINTRONS`, `CTATSPLICING_PREPGENOMELIB`, `FUSIONINSPECTOR`, `STARFUSION_DETECT` for its nf-core module versions [#740](https://github.com/nf-core/rnafusion/pull/740) - Replaced local subworkflow `TRIM_WORKFLOW` for its nf-core subworkflow equivalent `FASTQ_FASTQC_UMITOOLS_FASTP` [#752](https://github.com/nf-core/rnafusion/pull/752) - Changed local `FASTQ_ALIGN_STAR` for subworkflow from nf-core [#756](https://github.com/nf-core/rnafusion/pull/756) -- Replaced local subworkflow `STRINGTIE_WORKFLOW` for its nf-core version `BAM_STRINGTIE_MERGE` and the local module module `GTF_TO_REFFLAT` for nf-core's `UCSC_GTFTOGENEPRED` [#758](https://github.com/nf-core/rnafusion/pull/758) +- Replaced local subworkflow `STRINGTIE_WORKFLOW` for its nf-core version `BAM_STRINGTIE_MERGE` and the local module module `GTF_TO_REFFLAT` for nf-core's `UCSC_GTFTOGENEPRED` [#758](https://github.com/nf-core/rnafusion/pull/758 +- Update modules and close todos as preparation for release [#759](https://github.com/nf-core/rnafusion/pull/759) ### Fixed From 94a3ef26b7df498353b6b26186fea54765f9dfcb Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:28:45 +0200 Subject: [PATCH 861/887] fix bed format --- conf/modules.config | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 69bfa6947..e588e2b9a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,6 +18,11 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + + withName: 'AGAT_CONVERTGFF2BED' { + ext.args = '--nc filter' + } + withName: 'ARRIBA_ARRIBA' { publishDir = [ path: { "${params.outdir}/arriba" }, From 4d6ff580845985f6ba9422fac73d8fb2ac4b55e8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:30:32 +0200 Subject: [PATCH 862/887] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebac98c5f..23134fcff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -124,6 +124,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix rRNA detection and make it more customizable with nf-core modules [#736](https://github.com/nf-core/rnafusion/pull/736) - Fix rRNA detection in GTF using `transcript_type` [#749](https://github.com/nf-core/rnafusion/pull/749) - Fixed nf-test for `QC_WORKFLOW` subworkflow [#756](https://github.com/nf-core/rnafusion/pull/756) +- Fixed issue with bed format, modifying AGAT arguments for non-coding CDS [#763](https://github.com/nf-core/rnafusion/pull/763) ### Removed From a81c9bbd5cc06c52d531e72af68663f112e3b7db Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:39:40 +0200 Subject: [PATCH 863/887] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23134fcff..77777376f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -124,7 +124,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix rRNA detection and make it more customizable with nf-core modules [#736](https://github.com/nf-core/rnafusion/pull/736) - Fix rRNA detection in GTF using `transcript_type` [#749](https://github.com/nf-core/rnafusion/pull/749) - Fixed nf-test for `QC_WORKFLOW` subworkflow [#756](https://github.com/nf-core/rnafusion/pull/756) -- Fixed issue with bed format, modifying AGAT arguments for non-coding CDS [#763](https://github.com/nf-core/rnafusion/pull/763) +- Fixed issue with bed creation, modifying AGAT arguments for non-coding CDS [#763](https://github.com/nf-core/rnafusion/pull/763) ### Removed From 33978a80d5dce45dbcb6eb2f88998619752f50cc Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 10 Sep 2025 09:17:11 +0200 Subject: [PATCH 864/887] fix fusioncatcher hardlinks --- CHANGELOG.md | 1 + modules.json | 202 +++++++++++++----- .../fusioncatcher/environment.yml | 2 +- .../fusioncatcher-fusioncatcher.diff | 30 +++ .../fusioncatcher/fusioncatcher/main.nf | 4 +- 5 files changed, 187 insertions(+), 52 deletions(-) create mode 100644 modules/nf-core/fusioncatcher/fusioncatcher/fusioncatcher-fusioncatcher.diff diff --git a/CHANGELOG.md b/CHANGELOG.md index 77777376f..3eaa3c160 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -125,6 +125,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix rRNA detection in GTF using `transcript_type` [#749](https://github.com/nf-core/rnafusion/pull/749) - Fixed nf-test for `QC_WORKFLOW` subworkflow [#756](https://github.com/nf-core/rnafusion/pull/756) - Fixed issue with bed creation, modifying AGAT arguments for non-coding CDS [#763](https://github.com/nf-core/rnafusion/pull/763) +- Fixed fusioncatcher hardlink issues in filesystems that don't allow hardlinks [#]() ### Removed diff --git a/modules.json b/modules.json index 9505147f7..fdce13a32 100644 --- a/modules.json +++ b/modules.json @@ -8,204 +8,292 @@ "agat/convertgff2bed": { "branch": "master", "git_sha": "b785bb0b56bb518ab40c41f41d0e8749fb638257", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "agat/convertspgff2tsv": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba/arriba": { "branch": "master", "git_sha": "025a6f75e1f72e4ab60abb4bd65b3f289d4ad910", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "arriba/visualisation": { "branch": "master", "git_sha": "025a6f75e1f72e4ab60abb4bd65b3f289d4ad910", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bioawk": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/fastq": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ctatsplicing/prepgenomelib": { "branch": "master", "git_sha": "8476d6a2adf7fb2e2f23229344aeabcd94a14b0b", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/ctatsplicing/prepgenomelib/ctatsplicing-prepgenomelib.diff" }, "ctatsplicing/startocancerintrons": { "branch": "master", "git_sha": "8476d6a2adf7fb2e2f23229344aeabcd94a14b0b", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/ctatsplicing/startocancerintrons/ctatsplicing-startocancerintrons.diff" }, "fastp": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] + "installed_by": [ + "fastq_fastqc_umitools_fastp", + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] + "installed_by": [ + "fastq_fastqc_umitools_fastp", + "modules" + ] }, "fusioncatcher/fusioncatcher": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/fusioncatcher/fusioncatcher/fusioncatcher-fusioncatcher.diff" }, "fusioninspector": { "branch": "master", "git_sha": "310a7a59c7f2362d25070e5928f3139f92377eaf", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fusionreport/detect": { "branch": "master", "git_sha": "2737fcc61a0379e6f130de9069cadf77bc8e97ff", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fusionreport/download": { "branch": "master", "git_sha": "df4b662dae05afb695a4326fc172178b5a7a48ce", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gffread": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "a4488d3d09244f29fb4606ba4eef85d59dcc6ad8", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectrnaseqmetrics": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/index": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "salmon/quant": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/convert": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/flagstat": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stats_samtools"] + "installed_by": [ + "bam_stats_samtools" + ] }, "samtools/idxstats": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stats_samtools"] + "installed_by": [ + "bam_stats_samtools" + ] }, "samtools/index": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_sort_stats_samtools", "modules"] + "installed_by": [ + "bam_sort_stats_samtools", + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "e89ff68a46b848c4d8aabb8569767516d46db319", - "installed_by": ["bam_sort_stats_samtools", "modules"] + "installed_by": [ + "bam_sort_stats_samtools", + "modules" + ] }, "samtools/stats": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stats_samtools"] + "installed_by": [ + "bam_stats_samtools" + ] }, "star/align": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["fastq_align_star", "modules"] + "installed_by": [ + "fastq_align_star", + "modules" + ] }, "star/genomegenerate": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "starfusion/build": { "branch": "master", "git_sha": "310a7a59c7f2362d25070e5928f3139f92377eaf", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "starfusion/detect": { "branch": "master", "git_sha": "b0f38d0ea7515484442edc96046858924fc477dc", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stringtie/merge": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stringtie_merge", "modules"] + "installed_by": [ + "bam_stringtie_merge", + "modules" + ] }, "stringtie/stringtie": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stringtie_merge", "modules"] + "installed_by": [ + "bam_stringtie_merge", + "modules" + ] }, "ucsc/gtftogenepred": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "umitools/extract": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["fastq_fastqc_umitools_fastp"] + "installed_by": [ + "fastq_fastqc_umitools_fastp" + ] } } }, @@ -214,45 +302,61 @@ "bam_sort_stats_samtools": { "branch": "master", "git_sha": "e89ff68a46b848c4d8aabb8569767516d46db319", - "installed_by": ["fastq_align_star"] + "installed_by": [ + "fastq_align_star" + ] }, "bam_stats_samtools": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["bam_sort_stats_samtools"] + "installed_by": [ + "bam_sort_stats_samtools" + ] }, "bam_stringtie_merge": { "branch": "master", "git_sha": "5ce6cef7d4a100409aa30bca79b5020b6738767c", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "fastq_align_star": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "fastq_fastqc_umitools_fastp": { "branch": "master", "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nextflow_pipeline": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "dcd088f483cede0c3df4034d405126f05a764cc7", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/environment.yml b/modules/nf-core/fusioncatcher/fusioncatcher/environment.yml index 25f7417c5..8651e2af4 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/environment.yml +++ b/modules/nf-core/fusioncatcher/fusioncatcher/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::fusioncatcher=1.33" + - "bioconda::fusioncatcher=1.33b" diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/fusioncatcher-fusioncatcher.diff b/modules/nf-core/fusioncatcher/fusioncatcher/fusioncatcher-fusioncatcher.diff new file mode 100644 index 000000000..49b2daf36 --- /dev/null +++ b/modules/nf-core/fusioncatcher/fusioncatcher/fusioncatcher-fusioncatcher.diff @@ -0,0 +1,30 @@ +Changes in component 'nf-core/fusioncatcher/fusioncatcher' +Changes in 'fusioncatcher/fusioncatcher/main.nf': +--- modules/nf-core/fusioncatcher/fusioncatcher/main.nf ++++ modules/nf-core/fusioncatcher/fusioncatcher/main.nf +@@ -4,8 +4,8 @@ + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/fusioncatcher:1.33--hdfd78af_5': +- 'biocontainers/fusioncatcher:1.33--hdfd78af_5' }" ++ 'https://depot.galaxyproject.org/singularity/fusioncatcher:1.33b--hdfd78af_0': ++ 'biocontainers/fusioncatcher:1.33b--hdfd78af_0' }" + + input: + tuple val(meta), path(fastqs) + +Changes in 'fusioncatcher/fusioncatcher/environment.yml': +--- modules/nf-core/fusioncatcher/fusioncatcher/environment.yml ++++ modules/nf-core/fusioncatcher/fusioncatcher/environment.yml +@@ -4,4 +4,4 @@ + - conda-forge + - bioconda + dependencies: +- - "bioconda::fusioncatcher=1.33" ++ - "bioconda::fusioncatcher=1.33b" + +'modules/nf-core/fusioncatcher/fusioncatcher/meta.yml' is unchanged +'modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test' is unchanged +'modules/nf-core/fusioncatcher/fusioncatcher/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf index 3abd90d70..ae44e6864 100644 --- a/modules/nf-core/fusioncatcher/fusioncatcher/main.nf +++ b/modules/nf-core/fusioncatcher/fusioncatcher/main.nf @@ -4,8 +4,8 @@ process FUSIONCATCHER_FUSIONCATCHER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fusioncatcher:1.33--hdfd78af_5': - 'biocontainers/fusioncatcher:1.33--hdfd78af_5' }" + 'https://depot.galaxyproject.org/singularity/fusioncatcher:1.33b--hdfd78af_0': + 'biocontainers/fusioncatcher:1.33b--hdfd78af_0' }" input: tuple val(meta), path(fastqs) From 317c1a75012741c29546becc7b5401fb37c7d8fa Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 10 Sep 2025 09:18:29 +0200 Subject: [PATCH 865/887] add pr number --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eaa3c160..15afbfdd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -125,7 +125,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix rRNA detection in GTF using `transcript_type` [#749](https://github.com/nf-core/rnafusion/pull/749) - Fixed nf-test for `QC_WORKFLOW` subworkflow [#756](https://github.com/nf-core/rnafusion/pull/756) - Fixed issue with bed creation, modifying AGAT arguments for non-coding CDS [#763](https://github.com/nf-core/rnafusion/pull/763) -- Fixed fusioncatcher hardlink issues in filesystems that don't allow hardlinks [#]() +- Fixed fusioncatcher hardlink issues in filesystems that don't allow hardlinks [#764](https://github.com/nf-core/rnafusion/pull/764) ### Removed From 6fe4a50e5cbfb8385ba91287b32b8d661ce5174f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 10 Sep 2025 09:21:11 +0200 Subject: [PATCH 866/887] pre-commit --- modules.json | 201 +++++++++++++-------------------------------------- 1 file changed, 49 insertions(+), 152 deletions(-) diff --git a/modules.json b/modules.json index fdce13a32..b1ddae700 100644 --- a/modules.json +++ b/modules.json @@ -8,292 +8,205 @@ "agat/convertgff2bed": { "branch": "master", "git_sha": "b785bb0b56bb518ab40c41f41d0e8749fb638257", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "agat/convertspgff2tsv": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/arriba": { "branch": "master", "git_sha": "025a6f75e1f72e4ab60abb4bd65b3f289d4ad910", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "arriba/visualisation": { "branch": "master", "git_sha": "025a6f75e1f72e4ab60abb4bd65b3f289d4ad910", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bioawk": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ctatsplicing/prepgenomelib": { "branch": "master", "git_sha": "8476d6a2adf7fb2e2f23229344aeabcd94a14b0b", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/ctatsplicing/prepgenomelib/ctatsplicing-prepgenomelib.diff" }, "ctatsplicing/startocancerintrons": { "branch": "master", "git_sha": "8476d6a2adf7fb2e2f23229344aeabcd94a14b0b", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/ctatsplicing/startocancerintrons/ctatsplicing-startocancerintrons.diff" }, "fastp": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "fastq_fastqc_umitools_fastp", - "modules" - ] + "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "fastqc": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "fastq_fastqc_umitools_fastp", - "modules" - ] + "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "fusioncatcher/fusioncatcher": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/fusioncatcher/fusioncatcher/fusioncatcher-fusioncatcher.diff" }, "fusioninspector": { "branch": "master", "git_sha": "310a7a59c7f2362d25070e5928f3139f92377eaf", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fusionreport/detect": { "branch": "master", "git_sha": "2737fcc61a0379e6f130de9069cadf77bc8e97ff", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fusionreport/download": { "branch": "master", "git_sha": "df4b662dae05afb695a4326fc172178b5a7a48ce", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", "git_sha": "a57253204b8f4022edfeaa3ae2f5e2abecd8858b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gffread": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "a4488d3d09244f29fb4606ba4eef85d59dcc6ad8", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectinsertsizemetrics": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectrnaseqmetrics": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/index": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "salmon/quant": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/convert": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/flagstat": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "bam_stats_samtools" - ] + "installed_by": ["bam_stats_samtools"] }, "samtools/idxstats": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "bam_stats_samtools" - ] + "installed_by": ["bam_stats_samtools"] }, "samtools/index": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "bam_sort_stats_samtools", - "modules" - ] + "installed_by": ["bam_sort_stats_samtools", "modules"] }, "samtools/sort": { "branch": "master", "git_sha": "e89ff68a46b848c4d8aabb8569767516d46db319", - "installed_by": [ - "bam_sort_stats_samtools", - "modules" - ] + "installed_by": ["bam_sort_stats_samtools", "modules"] }, "samtools/stats": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "bam_stats_samtools" - ] + "installed_by": ["bam_stats_samtools"] }, "star/align": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "fastq_align_star", - "modules" - ] + "installed_by": ["fastq_align_star", "modules"] }, "star/genomegenerate": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "starfusion/build": { "branch": "master", "git_sha": "310a7a59c7f2362d25070e5928f3139f92377eaf", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "starfusion/detect": { "branch": "master", "git_sha": "b0f38d0ea7515484442edc96046858924fc477dc", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "bam_stringtie_merge", - "modules" - ] + "installed_by": ["bam_stringtie_merge", "modules"] }, "stringtie/stringtie": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "bam_stringtie_merge", - "modules" - ] + "installed_by": ["bam_stringtie_merge", "modules"] }, "ucsc/gtftogenepred": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "umitools/extract": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": [ - "fastq_fastqc_umitools_fastp" - ] + "installed_by": ["fastq_fastqc_umitools_fastp"] } } }, @@ -302,61 +215,45 @@ "bam_sort_stats_samtools": { "branch": "master", "git_sha": "e89ff68a46b848c4d8aabb8569767516d46db319", - "installed_by": [ - "fastq_align_star" - ] + "installed_by": ["fastq_align_star"] }, "bam_stats_samtools": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "bam_sort_stats_samtools" - ] + "installed_by": ["bam_sort_stats_samtools"] }, "bam_stringtie_merge": { "branch": "master", "git_sha": "5ce6cef7d4a100409aa30bca79b5020b6738767c", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "fastq_align_star": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "fastq_fastqc_umitools_fastp": { "branch": "master", "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nextflow_pipeline": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "dcd088f483cede0c3df4034d405126f05a764cc7", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} From 51170b69b7d5008d99e24fe2a8b3cba38e02b740 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 10 Sep 2025 09:35:31 +0200 Subject: [PATCH 867/887] update snap --- .../local/fusioncatcher_workflow/tests/main.nf.test.snap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap index 2e9553a99..ec8b6cd3d 100644 --- a/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap +++ b/subworkflows/local/fusioncatcher_workflow/tests/main.nf.test.snap @@ -3,13 +3,13 @@ "content": [ [ "versions.yml:md5,24a191a82bb19899f88f6493ad4f1b8c", - "versions.yml:md5,aeee6dd3b4dcf4cb11af80dfa0a7bf72" + "versions.yml:md5,ec8d5c08a6f0c436e14c29931cc92379" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-13T16:36:48.833043" + "timestamp": "2025-09-10T09:33:14.158266322" } } \ No newline at end of file From 00819649e2298e632a5a3e2a84908385d6988382 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:06:25 +0200 Subject: [PATCH 868/887] version bumped to 4.0.0 --- .nf-core.yml | 12 +++--- assets/multiqc_config.yml | 43 +++++++++---------- nextflow.config | 2 +- ro-crate-metadata.json | 88 +++++++++++++++++++++++++++++++-------- 4 files changed, 100 insertions(+), 45 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 5f86f8416..2c51645d6 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,11 +1,11 @@ lint: files_unchanged: - - .github/CONTRIBUTING.md - - .github/PULL_REQUEST_TEMPLATE.md - - conf/igenomes.config - - conf/igenomes_ignored.config + - .github/CONTRIBUTING.md + - .github/PULL_REQUEST_TEMPLATE.md + - conf/igenomes.config + - conf/igenomes_ignored.config files_exist: - - tests/default.nf.test + - tests/default.nf.test nf_core_version: 3.3.2 repository_type: pipeline template: @@ -16,4 +16,4 @@ template: name: rnafusion org: nf-core outdir: . - version: 4.0.0dev + version: 4.0.0 diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 963555cf6..80bf4ed6e 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,8 @@ report_comment: > - This report has been generated by the
    nf-core/rnafusion - analysis pipeline. For information about how to interpret these results, please see the - documentation. + This report has been generated by the nf-core/rnafusion analysis pipeline. For information about how + to interpret these results, please see the documentation. report_section_order: nf-core-rnafusion-methods-description: @@ -16,23 +17,23 @@ disable_version_detection: true # Run only these modules run_modules: - - custom_content - - fastqc - - fastp - - star - - samtools - - picard - - arriba +- custom_content +- fastqc +- fastp +- star +- samtools +- picard +- arriba module_order: - - fastp - - fastqc: - name: "FastQC (raw)" - info: "This section of the report shows FastQC results before adapter trimming." - path_filters: - - "*.zip" - - fastqc: - name: "FastQC (trimmed)" - info: "This section of the report shows FastQC results after adapter trimming." - path_filters: - - "*_trimmed*.zip" +- fastp +- fastqc: + name: "FastQC (raw)" + info: "This section of the report shows FastQC results before adapter trimming." + path_filters: + - "*.zip" +- fastqc: + name: "FastQC (trimmed)" + info: "This section of the report shows FastQC results after adapter trimming." + path_filters: + - "*_trimmed*.zip" diff --git a/nextflow.config b/nextflow.config index bf0f24ca1..42a41c98a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -347,7 +347,7 @@ manifest { mainScript = 'main.nf' defaultBranch = 'master' nextflowVersion = '!>=24.10.5' - version = '4.0.0dev' + version = '4.0.0' doi = '' } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index bcd77eb1e..3183bf61a 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -21,16 +21,22 @@ { "@id": "./", "@type": "Dataset", - "creativeWorkStatus": "InProgress", - "datePublished": "2025-07-08T11:39:11+00:00", + "creativeWorkStatus": "Stable", + "datePublished": "2025-09-10T11:04:42+00:00", "description": "

    \n \n \n \"nf-core/rnafusion\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnafusion/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.2565517-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.2565517)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rnafusion)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 3 fusion callers tools are created, and are also aggregated, most notably in a pdf visualisation document, a vcf data collection file, and html and tsv reports.\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results).\n\nIn rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human).\n\n## Pipeline summary\n\n![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png)\n\n### References\n\nThe references for the pipeline can be downloaded from the nf-core AWS megatests S3 bucket using the following command for the [AWS CLI tool](https://github.com/aws/aws-cli):\n\n```bash\naws --no-sign-request s3 sync s3://nf-core-awsmegatests/rnafusion/references/ \n```\n\nThe path to the downloaded references can then be provided to the pipeline with the `--genomes_base` parameter.\n\n\u26a0\ufe0f **Please note that the references are large and can take a long time to download, so it is recommended to download them once and use them for all future runs of the pipeline.**\n\nThe pipeline is also able to build the references in case files from a specific gencode version are missing (Note: only gencode 46 is available for fusioncatcher). This is done automatically when the expected references are not found and these files will be automatically published in the directory specified by the `--genomes_base` parameter. Use the `--references_only` parameter to trigger the reference building workflow only, without running the rest of the pipeline.\n\n1. Download gencode fasta and gtf files\n2. Download the HGNC nomenclature file\n3. Create files needed for QC (Sequence Dictionary and RRNA intervals)\n4. Convert the gtf file to a refflat file\n5. Create the [Salmon](https://salmon.readthedocs.io/en/latest/) index\n6. Create [STAR](https://github.com/alexdobin/STAR) index\n7. Build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) and [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING) references\n8. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs\n\n> [!WARNING]\n> References for Fusioncatcher and Arriba cannot be automatically created by the pipeline and should be downloaded from the S3 bucket or another source. See the [References](#references) section for more information.\n\n#### Main workflow\n\n1. Input samplesheet check\n2. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n3. Optional trimming with [fastp](https://github.com/OpenGene/fastp)\n4. Align FASTQs to BAM with [STAR](https://github.com/alexdobin/STAR)\n5. Run fusion detection with [Arriba](https://github.com/suhrig/arriba)\n6. Run fusion detection with [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion)\n 7a. Optional trimming of 3' end with [fastp](https://github.com/OpenGene/fastp) to feed into fusioncatcher (other tools not affected)\n 7b. Run fusion detection with [FusionCatcher](https://github.com/ndaniel/fusioncatcher)\n7. Run transcript assembly and quantification with [StringTie](https://ccb.jhu.edu/software/stringtie/)\n8. Run cancer splicing aberrations detection with [CTAT-SPLICING](https://github.com/TrinityCTAT/CTAT-SPLICING)\n9. Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report)\n10. Post-processing and analysis of data\n - [FusionInspector](https://github.com/FusionInspector/FusionInspector)\n - Summarize information into a VCF file\n - [Arriba](https://github.com/suhrig/arriba) visualisation\n - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-)), [`picard CollectInsertSizeMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037055772-CollectInsertSizeMetrics-Picard-) and ([`GATK MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-))\n11. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n12. Compress bam files to cram with [samtools view](http://www.htslib.org/)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nAs the reference building is computationally heavy (> 24h on HPC), we had to use dummy reference files in the test profile. Therefore, it is recommended to run the test profile with the `-stub` option.\n\n```bash\nnextflow run nf-core/rnafusion \\\n -profile test, \\\n --outdir \\\n -stub\n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n> **Notes:**\n>\n> - Conda is not currently supported; run with singularity or docker.\n> - Paths need to be absolute.\n> - GRCh38 is the only supported reference.\n> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp.\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnafusion/output).\n\n## Credits\n\nnf-core/rnafusion was written by Martin Proks ([@matq007](https://github.com/matq007)), Maxime Garcia ([@maxulysse](https://github.com/maxulysse)) and Annick Renevey ([@rannick](https://github.com/rannick))\n\n## We thank the following people for their help in the development of this pipeline\n\n- [Phil Ewels](https://github.com/ewels)\n- [Rickard Hammar\u00e9n](https://github.com/Hammarn)\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Praveen Raj](https://github.com/praveenraj2018)\n- [Anabella Trigila](https://github.com/atrigila)\n- [Nicolas Vannieuwkerke](https://github.com/nvnieuwk)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnafusion` channel](https://nfcore.slack.com/channels/rnafusion) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnafusion for your analysis, please cite it using the following doi: [10.5281/zenodo.3946477](https://doi.org/10.5281/zenodo.3946477)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" }, + { + "@id": "docs/images/nf-core-rnafusion_metro_map.png" + }, { "@id": "assets/" }, + { + "@id": "bin/" + }, { "@id": "conf/" }, @@ -43,6 +49,9 @@ { "@id": "modules/" }, + { + "@id": "modules/local/" + }, { "@id": "modules/nf-core/" }, @@ -99,7 +108,7 @@ }, "mentions": [ { - "@id": "#cfd4e34a-0799-4d73-95ca-6b4c84af3e73" + "@id": "#22caf67a-5268-45f3-acca-9cff28a06eda" } ], "name": "nf-core/rnafusion" @@ -128,21 +137,30 @@ ], "creator": [ { - "@id": "#phil.ewels@scilifelab.se" + "@id": "#max.u.garcia@gmail.com" }, { - "@id": "#max.u.garcia@gmail.com" + "@id": "https://orcid.org/0000-0001-7411-6063" }, { "@id": "https://orcid.org/0000-0002-8178-3128" }, + { + "@id": "#phil.ewels@scilifelab.se" + }, + { + "@id": "https://orcid.org/0009-0003-5619-1555" + }, { "@id": "https://orcid.org/0000-0001-9017-591X" } ], "dateCreated": "", - "dateModified": "2025-07-08T11:39:11Z", + "dateModified": "2025-09-10T13:04:42Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", + "image": { + "@id": "docs/images/nf-core-rnafusion_metro_map.png" + }, "keywords": [ "nf-core", "nextflow", @@ -156,8 +174,14 @@ "MIT" ], "maintainer": [ + { + "@id": "https://orcid.org/0000-0001-7411-6063" + }, { "@id": "https://orcid.org/0000-0002-8178-3128" + }, + { + "@id": "https://orcid.org/0009-0003-5619-1555" } ], "name": [ @@ -171,10 +195,10 @@ }, "url": [ "https://github.com/nf-core/rnafusion", - "https://nf-co.re/rnafusion/dev/" + "https://nf-co.re/rnafusion/4.0.0/" ], "version": [ - "4.0.0dev" + "4.0.0" ] }, { @@ -190,11 +214,19 @@ "version": "!>=24.10.5" }, { - "@id": "#cfd4e34a-0799-4d73-95ca-6b4c84af3e73", + "@id": "docs/images/nf-core-rnafusion_metro_map.png", + "@type": [ + "File", + "ImageObject" + ], + "name": "Workflow diagram" + }, + { + "@id": "#22caf67a-5268-45f3-acca-9cff28a06eda", "@type": "TestSuite", "instance": [ { - "@id": "#1076262d-a75d-4b99-bdd5-326b8f957f0e" + "@id": "#ee1eeb2c-e0a3-45fc-8770-0e80c9d1489b" } ], "mainEntity": { @@ -203,7 +235,7 @@ "name": "Test suite for nf-core/rnafusion" }, { - "@id": "#1076262d-a75d-4b99-bdd5-326b8f957f0e", + "@id": "#ee1eeb2c-e0a3-45fc-8770-0e80c9d1489b", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/rnafusion", "resource": "repos/nf-core/rnafusion/actions/workflows/nf-test.yml", @@ -225,6 +257,11 @@ "@type": "Dataset", "description": "Additional files" }, + { + "@id": "bin/", + "@type": "Dataset", + "description": "Scripts that must be callable from a pipeline process" + }, { "@id": "conf/", "@type": "Dataset", @@ -245,6 +282,11 @@ "@type": "Dataset", "description": "Modules used by the pipeline" }, + { + "@id": "modules/local/", + "@type": "Dataset", + "description": "Pipeline-specific modules" + }, { "@id": "modules/nf-core/", "@type": "Dataset", @@ -331,24 +373,36 @@ "name": "nf-core", "url": "https://nf-co.re/" }, - { - "@id": "#phil.ewels@scilifelab.se", - "@type": "Person", - "email": "phil.ewels@scilifelab.se", - "name": "Phil Ewels" - }, { "@id": "#max.u.garcia@gmail.com", "@type": "Person", "email": "max.u.garcia@gmail.com", "name": "Maxime Garcia" }, + { + "@id": "https://orcid.org/0000-0001-7411-6063", + "@type": "Person", + "email": "47788523+rannick@users.noreply.github.com", + "name": "Annick Renevey" + }, { "@id": "https://orcid.org/0000-0002-8178-3128", "@type": "Person", "email": "mproksik@gmail.com", "name": "Martin Proks" }, + { + "@id": "#phil.ewels@scilifelab.se", + "@type": "Person", + "email": "phil.ewels@scilifelab.se", + "name": "Phil Ewels" + }, + { + "@id": "https://orcid.org/0009-0003-5619-1555", + "@type": "Person", + "email": "101190534+nvnieuwk@users.noreply.github.com", + "name": "Nicolas Vannieuwkerke" + }, { "@id": "https://orcid.org/0000-0001-9017-591X", "@type": "Person", From 559c8c603da9c3478482f35edbd479b93c6d109e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Sep 2025 14:14:20 +0200 Subject: [PATCH 869/887] prettier --- .nf-core.yml | 10 +++++----- CHANGELOG.md | 2 +- assets/multiqc_config.yml | 36 ++++++++++++++++++------------------ 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 2c51645d6..4f80b3e13 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,11 +1,11 @@ lint: files_unchanged: - - .github/CONTRIBUTING.md - - .github/PULL_REQUEST_TEMPLATE.md - - conf/igenomes.config - - conf/igenomes_ignored.config + - .github/CONTRIBUTING.md + - .github/PULL_REQUEST_TEMPLATE.md + - conf/igenomes.config + - conf/igenomes_ignored.config files_exist: - - tests/default.nf.test + - tests/default.nf.test nf_core_version: 3.3.2 repository_type: pipeline template: diff --git a/CHANGELOG.md b/CHANGELOG.md index 15afbfdd8..2e1eb9277 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v4.0.0dev - [date] +## v4.0.0 - [2025-09-10] ### Added diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 80bf4ed6e..73d0edd30 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -17,23 +17,23 @@ disable_version_detection: true # Run only these modules run_modules: -- custom_content -- fastqc -- fastp -- star -- samtools -- picard -- arriba + - custom_content + - fastqc + - fastp + - star + - samtools + - picard + - arriba module_order: -- fastp -- fastqc: - name: "FastQC (raw)" - info: "This section of the report shows FastQC results before adapter trimming." - path_filters: - - "*.zip" -- fastqc: - name: "FastQC (trimmed)" - info: "This section of the report shows FastQC results after adapter trimming." - path_filters: - - "*_trimmed*.zip" + - fastp + - fastqc: + name: "FastQC (raw)" + info: "This section of the report shows FastQC results before adapter trimming." + path_filters: + - "*.zip" + - fastqc: + name: "FastQC (trimmed)" + info: "This section of the report shows FastQC results after adapter trimming." + path_filters: + - "*_trimmed*.zip" From f932e4aff153242a8f44f82052e846618e9e2da5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:20:21 +0200 Subject: [PATCH 870/887] update version in snap --- tests/test_build.nf.test.snap | 10 ++--- tests/test_stub.nf.test.snap | 74 ++++++++++++++++---------------- tests/test_stub_bam.nf.test.snap | 66 ++++++++++++++-------------- 3 files changed, 75 insertions(+), 75 deletions(-) diff --git a/tests/test_build.nf.test.snap b/tests/test_build.nf.test.snap index 55d1df2b5..8eb7bdc62 100644 --- a/tests/test_build.nf.test.snap +++ b/tests/test_build.nf.test.snap @@ -47,7 +47,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -191,14 +191,14 @@ "references/GRCh38/hgnc/hgnc_complete_set.txt" ], [ - "minigenome.gtf.bed:md5,4c881266e0a1b1a41815d05a8055aa40", + "minigenome.gtf.bed:md5,d41d8cd98f00b204e9800998ecf8427e", "minigenome.gtf_rrna.gtf.gz:md5,fb03ec66f68bc4becc71c299ed38b62d", "fusion_report.log:md5,d41d8cd98f00b204e9800998ecf8427e", "minigenome.dict:md5,f2dfb8df1d1f860050fc0dba1399fd9e", "minigenome.fa.fai:md5,e3f74a27219b33ae80fd5de5cbeaf32b", "minigenome.gtf.fasta:md5,349d42b5dbd73e163cdbad3453d8cd3a", "minigenome.gtf.genepred:md5,c5b0d2118efd89f7a2831e2dc486b999", - "minigenome.gtf.interval_list:md5,6496748a0994cb8a9764761ae74f8004", + "minigenome.gtf.interval_list:md5,9111fe876b17e5c18314206e9f985b8c", "minigenome.gtf.refflat:md5,ed76bc063c98087f1100a928923758c7", "complete_ref_lens.bin:md5,3b6d71ddb3eb8239be6623ab350a636d", "ctg_offsets.bin:md5,174ead59c00c5264300d3ff1de673074", @@ -284,8 +284,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-09T11:45:13.886497" + "timestamp": "2025-09-10T15:15:36.32959" } } \ No newline at end of file diff --git a/tests/test_stub.nf.test.snap b/tests/test_stub.nf.test.snap index df001725e..65d5a3c2d 100644 --- a/tests/test_stub.nf.test.snap +++ b/tests/test_stub.nf.test.snap @@ -71,7 +71,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -234,9 +234,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:13:34.296716" + "timestamp": "2025-09-10T15:26:56.896294" }, "stub test stringtie": { "content": [ @@ -308,7 +308,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -398,9 +398,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:15:18.001786" + "timestamp": "2025-09-10T15:28:41.962459" }, "stub test arriba": { "content": [ @@ -469,7 +469,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -555,9 +555,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:07:39.086364" + "timestamp": "2025-09-10T15:21:05.508972" }, "stub test fusioninspector": { "content": [ @@ -643,7 +643,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -832,9 +832,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:21:42.479016" + "timestamp": "2025-09-10T15:35:06.932469" }, "stub test salmon": { "content": [ @@ -874,7 +874,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -927,9 +927,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:19:36.873298" + "timestamp": "2025-09-10T15:32:56.766056" }, "stub test ctatsplicing": { "content": [ @@ -1006,7 +1006,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1182,9 +1182,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:09:29.991365" + "timestamp": "2025-09-10T15:22:53.217808" }, "stub test fusionreport": { "content": [ @@ -1203,7 +1203,7 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" + "fusioncatcher": "1.35" }, "FUSIONREPORT_DETECT": { "fusion_report": "4.0.1" @@ -1270,7 +1270,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1454,9 +1454,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:17:14.759248" + "timestamp": "2025-09-10T15:30:41.638938" }, "stub test fastp": { "content": [ @@ -1493,7 +1493,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1534,9 +1534,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:18:27.651568" + "timestamp": "2025-09-10T15:31:48.594211" }, "stub test fusioncatcher": { "content": [ @@ -1552,7 +1552,7 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" + "fusioncatcher": "1.35" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1570,7 +1570,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1606,9 +1606,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:10:40.658609" + "timestamp": "2025-09-10T15:24:00.433475" }, "stub test fusioncatcher trim": { "content": [ @@ -1627,7 +1627,7 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" + "fusioncatcher": "1.35" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1645,7 +1645,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1687,9 +1687,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:11:47.659941" + "timestamp": "2025-09-10T15:25:10.408652" }, "stub test all": { "content": [ @@ -1720,7 +1720,7 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" + "fusioncatcher": "1.35" }, "FUSIONINSPECTOR": { "FusionInspector": "2.10.0" @@ -1808,7 +1808,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -2059,8 +2059,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:05:39.966652" + "timestamp": "2025-09-10T15:19:22.837273" } } \ No newline at end of file diff --git a/tests/test_stub_bam.nf.test.snap b/tests/test_stub_bam.nf.test.snap index c40bcb577..c895d618b 100644 --- a/tests/test_stub_bam.nf.test.snap +++ b/tests/test_stub_bam.nf.test.snap @@ -51,7 +51,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -189,9 +189,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:45:42.13657" + "timestamp": "2025-09-10T15:43:47.567472" }, "stub test stringtie": { "content": [ @@ -243,7 +243,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -311,9 +311,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:47:52.517978" + "timestamp": "2025-09-10T15:45:23.291041" }, "stub test arriba": { "content": [ @@ -362,7 +362,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -423,9 +423,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:40:41.686721" + "timestamp": "2025-09-10T15:38:57.291156" }, "stub test fusioninspector": { "content": [ @@ -491,7 +491,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -658,9 +658,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:56:24.707034" + "timestamp": "2025-09-10T15:52:15.87533" }, "stub test salmon": { "content": [ @@ -710,7 +710,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -772,9 +772,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:54:08.811545" + "timestamp": "2025-09-10T15:50:21.195099" }, "stub test ctatsplicing": { "content": [ @@ -831,7 +831,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -985,9 +985,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:42:17.062793" + "timestamp": "2025-09-10T15:40:36.520194" }, "stub test fusionreport": { "content": [ @@ -1006,7 +1006,7 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" + "fusioncatcher": "1.35" }, "FUSIONREPORT_DETECT": { "fusion_report": "4.0.1" @@ -1053,7 +1053,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1212,9 +1212,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:50:22.553497" + "timestamp": "2025-09-10T15:47:10.448091" }, "stub test fastp": { "content": [ @@ -1261,7 +1261,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1311,9 +1311,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:52:24.935928" + "timestamp": "2025-09-10T15:48:46.423679" }, "stub test fusioncatcher": { "content": [ @@ -1329,7 +1329,7 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" + "fusioncatcher": "1.35" }, "GATK4_BEDTOINTERVALLIST": { "gatk4": "4.6.1.0" @@ -1357,7 +1357,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1402,9 +1402,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:43:49.673677" + "timestamp": "2025-09-10T15:42:09.411678" }, "stub test all": { "content": [ @@ -1435,7 +1435,7 @@ "fastqc": "0.12.1" }, "FUSIONCATCHER_FUSIONCATCHER": { - "fusioncatcher": "1.33" + "fusioncatcher": "1.35" }, "FUSIONINSPECTOR": { "FusionInspector": "2.10.0" @@ -1503,7 +1503,7 @@ "ucsc": 447 }, "Workflow": { - "nf-core/rnafusion": "v4.0.0dev" + "nf-core/rnafusion": "v4.0.0" } }, [ @@ -1732,8 +1732,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.04.7" }, - "timestamp": "2025-09-04T17:39:00.417725" + "timestamp": "2025-09-10T15:37:20.367608" } } \ No newline at end of file From e0ca5e7a1c00ab3fe06310bc0990d8df5c364b35 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 11 Sep 2025 14:26:49 +0200 Subject: [PATCH 871/887] remove conda from test on master --- .github/workflows/nf-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index 8021852c8..e796a814c 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -69,7 +69,7 @@ jobs: fail-fast: false matrix: shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} - profile: [conda, docker, singularity] + profile: [docker, singularity] isMain: - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} # Exclude conda and singularity on dev From eefca66757b61650d3f73d2ff6f54fc770be4188 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 15 Sep 2025 12:48:20 +0200 Subject: [PATCH 872/887] update download action: remove non-stub run --- .github/workflows/download_pipeline.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 999bcc382..11f0d0cbe 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -96,13 +96,6 @@ jobs: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - - name: Run the downloaded pipeline (stub run not supported) - id: run_pipeline - if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} - env: - NXF_SINGULARITY_CACHEDIR: ./singularity_container_images - NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results - name: Count the downloaded number of container images id: count_afterwards From 135cd0f521930ea42376f701ba19dbde2c4aaedd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 16:38:20 +0200 Subject: [PATCH 873/887] Update subworkflows/local/fusioninspector_workflow/main.nf Co-authored-by: Niklas Schandry --- subworkflows/local/fusioninspector_workflow/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/fusioninspector_workflow/main.nf b/subworkflows/local/fusioninspector_workflow/main.nf index de07933d2..6fb7e86d2 100644 --- a/subworkflows/local/fusioninspector_workflow/main.nf +++ b/subworkflows/local/fusioninspector_workflow/main.nf @@ -66,7 +66,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { } if ( !skip_vis - ){ + ) { ch_bam_sorted_indexed_fusions = bam_sorted_indexed.join(tsv_nonempty) ARRIBA_VISUALISATION( ch_bam_sorted_indexed_fusions, From a7f86b7bfb29dce0bded13ba4d3ee147869cf281 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 16:38:33 +0200 Subject: [PATCH 874/887] Update workflows/rnafusion.nf Co-authored-by: Niklas Schandry --- workflows/rnafusion.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index eb792032a..678dfad7c 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -188,8 +188,8 @@ workflow RNAFUSION { .filter { meta, _fastqs -> meta.align } // Add the alignment files to the correct channel if their fastqs aren't aligned - def ch_aligned_reads = ch_aligned_inputs - def ch_star_junctions = ch_input.junctions.filter { meta, file -> file && !meta.align } + def ch_aligned_reads = ch_aligned_inputs + def ch_star_junctions = ch_input.junctions.filter { meta, file -> file && !meta.align } def ch_star_splice_junctions = ch_input.splice_junctions.filter { meta, file -> file && !meta.align } if(tools.intersect(["ctatsplicing", "arriba", "starfusion", "stringtie"])) { FASTQ_ALIGN_STAR( From 64e255e5dc7786cddb6c1a2113d3f4ed7c5d5776 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 16:38:57 +0200 Subject: [PATCH 875/887] Update docs/usage.md Co-authored-by: Niklas Schandry --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 0b0220c5d..d8c1903d6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -280,7 +280,7 @@ nextflow run nf-core/rnafusion \ --adapter_fasta (optional) ``` -The additional `--trim_tail_fusioncatcher` flag will toggle an additional `fastp` process, especially useful is reads are above 100 bp, which is not handled well by FusionCatcher. The parameter `--trim_tail_fusioncatcher` needs to be provided with the number of bases to remove from the tail end. +The additional `--trim_tail_fusioncatcher` flag will toggle an additional `fastp` process, especially useful if reads are above 100 bp, which is not handled well by FusionCatcher. The parameter `--trim_tail_fusioncatcher` needs to be provided with the number of bases to remove from the tail end. #### Filter fusions detected by 2 or more tools From 154f59243ed39e69e2d147eed6409c58cd09a078 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:23:51 +0200 Subject: [PATCH 876/887] remove duplicat multiqc --- CITATIONS.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 95bc5d98c..5d2845541 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -26,8 +26,6 @@ > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. -- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - - [FusionCatcher](https://github.com/ndaniel/fusioncatcher) > Nicorici D, Satalan M, Edgren H, Kangaspeska S, Murumagi A, Kallioniemi O, Virtanen S, Kilkku O. FusionCatcher – a tool for finding somatic fusion genes in paired-end RNA-sequencing data. BioRxiv, 2014 Nov. doi: 10.1101/011650. From e413486e3f8d02ef4ac4b6b2d05975581a149bbc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:24:20 +0200 Subject: [PATCH 877/887] add author and licence information --- bin/vcf_collect.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bin/vcf_collect.py b/bin/vcf_collect.py index bb5401c8c..292c052fd 100755 --- a/bin/vcf_collect.py +++ b/bin/vcf_collect.py @@ -1,5 +1,12 @@ #!/usr/bin/env python3 +# Author: Annick Renevey, annick.renevey@scilifelab.se +# License: MIT +# +# This script is part of the rnafusion pipeline. +# For full license and authorship information, see the repository README. +# + import argparse import logging import sys From 648b5a33f3e9e0f7982948581dd7038cabcf98cf Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:32:18 +0200 Subject: [PATCH 878/887] remove unnecessary map --- workflows/rnafusion.nf | 3 --- 1 file changed, 3 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index eb792032a..e3cf64412 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -221,9 +221,6 @@ workflow RNAFUSION { def ch_ctatsplicing_input = ch_star_splice_junctions .join(ch_star_junctions, failOnMismatch:true, failOnDuplicate:true) .join(ch_aligned_reads, failOnMismatch:true, failOnDuplicate:true) - .map { meta, split_junction, junction, bam, bai -> - [ meta, split_junction, junction, bam, bai ] - } CTATSPLICING_STARTOCANCERINTRONS( ch_ctatsplicing_input, From a601b360ab13605e73206ab47fb4262c639d8dd1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:36:47 +0200 Subject: [PATCH 879/887] apply suggestion from code review --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 0b0220c5d..30da2bb5f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -282,7 +282,7 @@ nextflow run nf-core/rnafusion \ The additional `--trim_tail_fusioncatcher` flag will toggle an additional `fastp` process, especially useful is reads are above 100 bp, which is not handled well by FusionCatcher. The parameter `--trim_tail_fusioncatcher` needs to be provided with the number of bases to remove from the tail end. -#### Filter fusions detected by 2 or more tools +#### Filter for fusions detected by several tools ```bash nextflow run nf-core/rnafusion \ From dfe57813543d3f9136a939efe218ea84566246e7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:38:35 +0200 Subject: [PATCH 880/887] add warning about conda --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 30da2bb5f..24cbdedf3 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -427,7 +427,7 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. > [!IMPORTANT] -> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. +> We highly recommend the use of Docker or Singularity containers, ctatsplicing is not supported by Conda and Conda was not specifically tested for the rest of the pipeline. The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). From 91a372eb90694d2b78e64d9f2e66b1d812acf462 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:39:19 +0200 Subject: [PATCH 881/887] replace by agat --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 9937f7fb4..87b3717a7 100644 --- a/docs/output.md +++ b/docs/output.md @@ -104,7 +104,7 @@ If no parameters are specified, the default is applied.
    Output files -- `arriba/` +- `agat/` - `.tsv`
    From 440c67381ae8af98980e7ee2e231584b9d68c2d1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:50:27 +0200 Subject: [PATCH 882/887] remove mentions of conda --- .vscode/settings.json | 4 ---- docs/usage.md | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index af2d783fa..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "markdown.styles": ["public/vscode_markdown.css"], - "nextflow.telemetry.enabled": false -} diff --git a/docs/usage.md b/docs/usage.md index 24cbdedf3..1cade0243 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -480,9 +480,9 @@ To change the resource requests, please see the [max resources](https://nf-co.re ### Custom Containers -In some cases, you may wish to change the container or conda environment used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However, in some cases the pipeline specified version maybe out of date. +In some cases, you may wish to change the container used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects (via wave for docker and singularity). -To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. +To use a different container from the default container specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. ### Custom Tool Arguments From 1ce3aaa115356f13db919258eda307697d901542 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 17 Sep 2025 09:33:50 +0200 Subject: [PATCH 883/887] add Delfina Terradas to the contributor list --- nextflow.config | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/nextflow.config b/nextflow.config index 42a41c98a..8f5370a58 100644 --- a/nextflow.config +++ b/nextflow.config @@ -340,7 +340,16 @@ manifest { github: '@nvnieuwk', contribution: ['contributor', 'maintainer'], orcid: '' + ], + [ + name: 'Delfina Terradas', + affiliation: 'ZS Associates', + email: '', + github: '@delfiterradas', + contribution: ['contributor'], + orcid: '' ] + ] homePage = 'https://github.com/nf-core/rnafusion' description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" From cea3630a2acf52541090b39bbd4a25952efa0fc1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 17 Sep 2025 09:36:27 +0200 Subject: [PATCH 884/887] update description of fastqc and multiqc outputs (from template) --- docs/output.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/output.md b/docs/output.md index 87b3717a7..3e3171e27 100644 --- a/docs/output.md +++ b/docs/output.md @@ -200,8 +200,8 @@ If `trim_tail_fusioncatcher` has any value other than 0, [fastp](https://github. Output files - `fastqc/` - - `*.html`: FastQC report containing quality metrics. - - `*.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + - `*_fastqc.html`: FastQC report containing quality metrics. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images.
    @@ -294,15 +294,19 @@ Final score = (0.5 × Tool Detection Score) + (0.5 × Database Hits Score) ### MultiQC -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) +
    +Output files + +- `multiqc/` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) +
    -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -:::note -The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -::: +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . ### Picard From 28742bcf60bec866ec842ec18163170df6e340c7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 18 Sep 2025 15:48:44 +0200 Subject: [PATCH 885/887] Update docs/output.md Co-authored-by: Alexander Peltzer --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 9937f7fb4..87b3717a7 100644 --- a/docs/output.md +++ b/docs/output.md @@ -104,7 +104,7 @@ If no parameters are specified, the default is applied.
    Output files -- `arriba/` +- `agat/` - `.tsv`
    From 3d69168df6ea2e61d5f36afcb23dbdf10caf3308 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 18 Sep 2025 15:50:11 +0200 Subject: [PATCH 886/887] remove commented out outdated comment --- docs/usage.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 530fc59dc..0ce3485be 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -83,10 +83,6 @@ nextflow run nf-core/rnafusion \ --outdir --qiagen ``` - - #### Issues with building references If process `FUSIONREPORT_DOWNLOAD` times out, it could be due to network restriction (for example if trying to run on HPC). As this process is lightweight in cpu, memory and time, running on local machines with the following options might solve the issue: From bbcb3bd5d1b7ef8e4715aaeb03b5652c29cb7b40 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 18 Sep 2025 16:13:26 +0200 Subject: [PATCH 887/887] add info on seq_center and seq_platform --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index b6ce64d69..ee0a623e2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -594,13 +594,13 @@ }, "seq_center": { "type": "string", - "description": "Sequencing center", + "description": "Sequencing center, used to fill in read group CN tag in the BAM header", "fa_icon": "fas fa-toolbox", "help_text": "This will reported in the BAM header as CN" }, "seq_platform": { "type": "string", - "description": "Sequencing platform", + "description": "Sequencing platform, used to fill in read group PL tag in the BAM header", "fa_icon": "fas fa-toolbox", "help_text": "This will reported in the BAM header as PL." },