diff --git a/CHANGELOG.md b/CHANGELOG.md
index 21b5367..1a3a9f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,26 @@
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).
-## [[1.0.0]](https://github.com/nf-core/fastquorum/releases/tag/1.0.0)] -- 2024-05-20
+## [[1.0.1]](https://github.com/nf-core/fastquorum/releases/tag/1.0.1) -- 2024-09-10
+
+### Credits
+
+Special thanks to the following for their contributions to the release:
+
+- [Nils Homer](https://github.com/nh13)
+- [Simon Pearce](https://github.com/SPPearce)
+- [Zach Norgaard](https://github.com/znorgaard)
+
+### Enhancements & fixes
+
+- [PR #51](https://github.com/nf-core/fastquorum/pull/51) - Fixes a bug where alignment and filtering where swapped in the phase 2 high-throughput diagrams (@jfy133).
+- [PR #58](https://github.com/nf-core/fastquorum/pull/58) - Prepare genome steps now run only if the corresponding parameters are not passed.
+- [PR #60](https://github.com/nf-core/fastquorum/pull/60) - Enable automatic escalation of memory for FilterConsensusReads.
+- [PR #67](https://github.com/nf-core/fastquorum/pull/67) - Fix setting the parameters from igenomes.
+- [PR #68](https://github.com/nf-core/fastquorum/pull/68) - Temporary fix to merging BAMs across lanes in template-coordinate order. Using `fgbio SortBam` after `samtools merge`. Related to [samtools#2062](https://github.com/samtools/samtools/pull/2062).
+- [PR #71](https://github.com/nf-core/fastquorum/pull/71) - Add stubs to all local modules.
+
+## [[1.0.0]](https://github.com/nf-core/fastquorum/releases/tag/1.0.0) -- 2024-05-20
Initial release of nf-core/fastquorum, created with the [nf-core](https://nf-co.re/) template.
diff --git a/README.md b/README.md
index 96178d7..a90dfc2 100644
--- a/README.md
+++ b/README.md
@@ -6,9 +6,8 @@
[![GitHub Actions CI Status](https://github.com/nf-core/fastquorum/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/fastquorum/actions/workflows/ci.yml)
-[![GitHub Actions Linting Status](https://github.com/nf-core/fastquorum/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/fastquorum/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/fastquorum/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/fastquorum/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/fastquorum/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/fastquorum/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.11267672-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.11267672)
[![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/)
[![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/)
@@ -152,10 +151,7 @@ For further information or help, don't hesitate to get in touch on the [Slack `#
## Citations
-If you use nf-core/fastquorum for your analysis, please cite for this pipeline and [![DOI](https://zenodo.org/badge/53011104.svg)](https://zenodo.org/doi/10.5281/zenodo.10456900) for [`fgbio`](https://github.com/fulcrumgenomics/fgbio).
-
-
-
+If you use nf-core/fastquorum for your analysis, please cite [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11267672.svg)](https://doi.org/10.5281/zenodo.11267672) for this pipeline and [![DOI](https://zenodo.org/badge/53011104.svg)](https://zenodo.org/doi/10.5281/zenodo.10456900) for [`fgbio`](https://github.com/fulcrumgenomics/fgbio).
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/assets/multiqc_config.yml b/assets/multiqc_config.yml
index 57fb11b..dcb8b27 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/fastquorum
+ This report has been generated by the nf-core/fastquorum
analysis pipeline. For information about how to interpret these results, please see the
- documentation.
+ documentation.
report_section_order:
"nf-core-fastquorum-methods-description":
order: -1000
diff --git a/conf/base.config b/conf/base.config
index b517b57..621a236 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -21,11 +21,6 @@ process {
maxErrors = '-1'
// Process-specific resource requirements
- // NOTE - Please try and re-use 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.
- // 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' ) }
@@ -59,12 +54,4 @@ process {
errorStrategy = 'retry'
maxRetries = 2
}
- withName:'FASTQC'{
- cpus = { check_max( 4 * task.attempt, 'cpus' ) }
- memory = { check_max( 4.GB * task.attempt, 'memory' ) }
- }
- withName:'MULTIQC' {
- cpus = { check_max( 4 * task.attempt, 'cpus' ) }
- memory = { check_max( 12.GB * task.attempt, 'memory' ) }
- }
}
diff --git a/conf/igenomes.config b/conf/igenomes.config
index 3f11437..cd3a6d3 100644
--- a/conf/igenomes.config
+++ b/conf/igenomes.config
@@ -13,6 +13,8 @@ params {
genomes {
'GRCh37' {
fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa"
+ fasta_fai = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa.fai"
+ dict = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.dict"
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/"
@@ -26,6 +28,8 @@ params {
}
'GRCh38' {
fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa"
+ fasta_fai = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa.fai"
+ dict = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.dict"
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/"
diff --git a/conf/modules.config b/conf/modules.config
index 6e53bc8..68b7b8d 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -18,7 +18,26 @@ process {
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
]
- withName: 'BWA_INDEX|SAMTOOLS_FAIDX|SAMTOOLS_DICT' {
+ withName: 'BWA_INDEX' {
+ ext.when = { !params.bwa }
+ publishDir = [
+ path: { params.save_reference ? "${params.outdir}/genome" : params.outdir },
+ mode: params.publish_dir_mode,
+ saveAs: { filename -> (filename != 'versions.yml' && params.save_reference) ? filename : null }
+ ]
+ }
+
+ withName: 'SAMTOOLS_FAIDX' {
+ ext.when = { !params.fasta_fai }
+ publishDir = [
+ path: { params.save_reference ? "${params.outdir}/genome" : params.outdir },
+ mode: params.publish_dir_mode,
+ saveAs: { filename -> (filename != 'versions.yml' && params.save_reference) ? filename : null }
+ ]
+ }
+
+ withName: 'SAMTOOLS_DICT' {
+ ext.when = { !params.dict }
publishDir = [
path: { params.save_reference ? "${params.outdir}/genome" : params.outdir },
mode: params.publish_dir_mode,
@@ -27,6 +46,8 @@ process {
}
withName: 'FASTQC' {
+ cpus = { check_max( 4 * task.attempt, 'cpus' ) }
+ memory = { check_max( 4.GB * task.attempt, 'memory' ) }
ext.args = '--quiet'
publishDir = [
path: { "${params.outdir}/preprocessing/fastqc/${meta.id}" },
@@ -67,6 +88,17 @@ process {
]
}
+ /* This can be removed when https://github.com/samtools/samtools/pull/2062 is merged */
+ withName: '.*SORTBAM' {
+ ext.args = '--sort-order TemplateCoordinate'
+ ext.prefix = { "${meta.id}.sorted" }
+ publishDir = [
+ path: { "${params.outdir}/preprocessing/merged/${meta.id}" },
+ mode: params.publish_dir_mode,
+ pattern: '*.bam'
+ ]
+ }
+
withName: '.*GROUPREADSBYUMI' {
publishDir = [
[
@@ -107,10 +139,6 @@ process {
]
}
- withName: '.*FILTERCONSENSUSREADS' {
- memory = { check_max( 8.GB * task.attempt, 'memory' ) }
- }
-
withName: '.*CALLANDFILTERDUPLEXCONSENSUSREADS|.*CALLANDFILTERMOLECULARCONSENSUSREADS|.*FILTERCONSENSUSREADS' {
publishDir = [
[
@@ -126,6 +154,10 @@ process {
]
}
+ withName:'FILTERCONSENSUSREADS' {
+ memory = { check_max( 12.GB * task.attempt, 'memory' ) }
+ }
+
withName: '.*ALIGN_CONSENSUS_BAM' {
publishDir = [
path: { "${params.outdir}/filtering/align_consensus_bam/${meta.id}" },
@@ -135,6 +167,8 @@ process {
}
withName: 'MULTIQC' {
+ cpus = { check_max( 4 * task.attempt, 'cpus' ) }
+ memory = { check_max( 12.GB * task.attempt, 'memory' ) }
ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' }
publishDir = [
path: { "${params.outdir}/multiqc" },
@@ -143,5 +177,4 @@ process {
]
}
-
}
diff --git a/docs/images/fastquorum_subway.desc.png b/docs/images/fastquorum_subway.desc.png
index f0562b9..3e3dc78 100644
Binary files a/docs/images/fastquorum_subway.desc.png and b/docs/images/fastquorum_subway.desc.png differ
diff --git a/docs/images/fastquorum_subway.desc.svg b/docs/images/fastquorum_subway.desc.svg
index cf34ffa..5ed8f4b 100644
--- a/docs/images/fastquorum_subway.desc.svg
+++ b/docs/images/fastquorum_subway.desc.svg
@@ -10,7 +10,7 @@
xml:space="preserve"
inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)"
sodipodi:docname="fastquorum_subway_desc_alt.svg"
- inkscape:export-filename="../nf-fastquorum_subway_alt.png"
+ inkscape:export-filename="../nf-fastquorum_subway_desc_alt.png"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
@@ -26,11 +26,11 @@
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
- showgrid="false"
- inkscape:zoom="1.0971269"
- inkscape:cx="251.56616"
- inkscape:cy="337.24449"
- inkscape:current-layer="g86">PHASE 3(HIGHTHROUGH-PUT)PHASE 2 (R&D)bamCall single-stranded consensus readsCollect duplex metricsFilter consensus readsAlign consensus readsbamCall duplex consensus readsPHASE 3(HIGHTHROUGH-PUT)PHASE 2 (R&D)bamCall single-stranded consensus readsCollect duplex metricsFilter consensus readsAlign consensus readsbamCall duplex consensus readsmetricsAlign consensus readsPHASE 3(HIGHTHROUGH-PUT)PHASE 2 (R&D)bamPHASE 3(HIGHfgbio CallMolecularConsensusReadsTHROUGH-fgbioPUT)FilterConsensusReadsPHASE 2 (R&D)fgbio FilterDuplexSeqMetricsbamfgbio CallMolecularConsensusReadsfgbioFilterConsensusReadsfgbio FilterDuplexSeqMetricssamtools fastqbwa memfgbio ZipperBamsbambamfgbioCallDuplexConsensusReadsfgbioCallDuplexConsensusReadssamtools fastqbwa memfgbio ZipperBamsCollectDuplexSeqMetricssamtools fastqbwa memfgbio ZipperBamsCollectDuplexSeqMetricsfgbio FilterConsensusReads
+ id="tspan91">fgbio FilterConsensusReadssamtools fastqbwa memfgbio ZipperBams
diff --git a/docs/output.md b/docs/output.md
index d596f9d..a519d84 100644
--- a/docs/output.md
+++ b/docs/output.md
@@ -6,8 +6,6 @@ This document describes the output produced by the pipeline. Most of the plots a
The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory.
-
-
## Pipeline overview
The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps:
diff --git a/main.nf b/main.nf
index 42cdbd9..ae79a22 100644
--- a/main.nf
+++ b/main.nf
@@ -13,27 +13,26 @@ nextflow.enable.dsl = 2
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS
+ GENOME PARAMETER VALUES
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
-
-include { FASTQUORUM } from './workflows/fastquorum'
-include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_fastquorum_pipeline'
-include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_fastquorum_pipeline'
include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_fastquorum_pipeline'
-include { PREPARE_GENOME } from './subworkflows/local/prepare_genome'
+params.fasta = getGenomeAttribute('fasta')
+params.fasta_fai = getGenomeAttribute('fasta_fai')
+params.dict = getGenomeAttribute('dict')
+params.bwa = getGenomeAttribute('bwa')
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- GENOME PARAMETER VALUES
+ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
-params.fasta = getGenomeAttribute('fasta')
-params.fasta_fai = getGenomeAttribute('fasta_fai')
-params.dict = getGenomeAttribute('dict')
-params.bwa = getGenomeAttribute('bwa')
+include { FASTQUORUM } from './workflows/fastquorum'
+include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_fastquorum_pipeline'
+include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_fastquorum_pipeline'
+include { PREPARE_GENOME } from './subworkflows/local/prepare_genome'
// Initialize fasta file with meta map:
fasta = params.fasta ? Channel.fromPath(params.fasta).map{ it -> [ [id:it.baseName], it ] }.collect() : Channel.empty()
diff --git a/modules.json b/modules.json
index 521214e..7851eca 100644
--- a/modules.json
+++ b/modules.json
@@ -7,32 +7,37 @@
"nf-core": {
"bwa/index": {
"branch": "master",
- "git_sha": "086fa66260595e123b0ea47a6512539b72a9afa3",
+ "git_sha": "e0ff65e1fb313677de09f5f477ae3da30ce19b7b",
"installed_by": ["modules"]
},
"fastqc": {
"branch": "master",
- "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd",
+ "git_sha": "b49b8992e5271ce427f3a7cdb29628fc58400eb5",
+ "installed_by": ["modules"]
+ },
+ "fgbio/sortbam": {
+ "branch": "master",
+ "git_sha": "2fc7438d5dd0a4305fd68afcb8a36acd70234614",
"installed_by": ["modules"]
},
"multiqc": {
"branch": "master",
- "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a",
+ "git_sha": "fe9614c5d1d9820dae56a5e30a07ba336db45835",
"installed_by": ["modules"]
},
"samtools/dict": {
"branch": "master",
- "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62",
+ "git_sha": "3c8fd07ea8d86daaed24fddfa76cd8ba2cd37c9b",
"installed_by": ["modules"]
},
"samtools/faidx": {
"branch": "master",
- "git_sha": "f153f1f10e1083c49935565844cccb7453021682",
+ "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519",
"installed_by": ["modules"]
},
"samtools/merge": {
"branch": "master",
- "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62",
+ "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519",
"installed_by": ["modules"]
}
}
@@ -41,7 +46,7 @@
"nf-core": {
"utils_nextflow_pipeline": {
"branch": "master",
- "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa",
+ "git_sha": "20c03aede5a80ff520a905cea1f8ca121b5bb661",
"installed_by": ["subworkflows"]
},
"utils_nfcore_pipeline": {
diff --git a/modules/local/align_bam/main.nf b/modules/local/align_bam/main.nf
index 6a298f5..f4cfb0f 100644
--- a/modules/local/align_bam/main.nf
+++ b/modules/local/align_bam/main.nf
@@ -89,4 +89,20 @@ process ALIGN_BAM {
samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ def index_command = (sort_type != "template-coordinate") ? "touch ${prefix}.mapped.bam.bai" : ""
+ """
+ touch ${prefix}.mapped.bam
+ $index_command
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//')
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
+ END_VERSIONS
+ """
+
}
diff --git a/modules/local/fgbio/callandfilterduplexconsensusreads/main.nf b/modules/local/fgbio/callandfilterduplexconsensusreads/main.nf
index 8a78bc6..32d9be1 100644
--- a/modules/local/fgbio/callandfilterduplexconsensusreads/main.nf
+++ b/modules/local/fgbio/callandfilterduplexconsensusreads/main.nf
@@ -68,4 +68,15 @@ process FGBIO_CALLANDFILTERDUPLEXCONSENSUSREADS {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.cons.filtered.bam
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/local/fgbio/callandfiltermolecularconsensusreads/main.nf b/modules/local/fgbio/callandfiltermolecularconsensusreads/main.nf
index 899fcf3..9fedadb 100644
--- a/modules/local/fgbio/callandfiltermolecularconsensusreads/main.nf
+++ b/modules/local/fgbio/callandfiltermolecularconsensusreads/main.nf
@@ -68,4 +68,15 @@ process FGBIO_CALLANDFILTERMOLECULARCONSENSUSREADS {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.cons.filtered.bam
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/local/fgbio/callduplexconsensusreads/main.nf b/modules/local/fgbio/callduplexconsensusreads/main.nf
index 73a234c..939065d 100644
--- a/modules/local/fgbio/callduplexconsensusreads/main.nf
+++ b/modules/local/fgbio/callduplexconsensusreads/main.nf
@@ -45,4 +45,15 @@ process FGBIO_CALLDDUPLEXCONSENSUSREADS {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.cons.unmapped.bam
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/local/fgbio/callmolecularconsensusreads/main.nf b/modules/local/fgbio/callmolecularconsensusreads/main.nf
index 3c00c47..6bf303d 100644
--- a/modules/local/fgbio/callmolecularconsensusreads/main.nf
+++ b/modules/local/fgbio/callmolecularconsensusreads/main.nf
@@ -45,4 +45,15 @@ process FGBIO_CALLMOLECULARCONSENSUSREADS {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.cons.unmapped.bam
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/local/fgbio/collectduplexseqmetrics/main.nf b/modules/local/fgbio/collectduplexseqmetrics/main.nf
index d479366..4675898 100644
--- a/modules/local/fgbio/collectduplexseqmetrics/main.nf
+++ b/modules/local/fgbio/collectduplexseqmetrics/main.nf
@@ -42,4 +42,20 @@ process FGBIO_COLLECTDUPLEXSEQMETRICS {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.duplex_seq_metrics.duplex_family_sizes.txt
+ touch ${prefix}.duplex_seq_metrics.duplex_umi_counts.txt
+ touch ${prefix}.duplex_seq_metrics.duplex_yield_metrics.txt
+ touch ${prefix}.duplex_seq_metrics.family_sizes.txt
+ touch ${prefix}.duplex_seq_metrics.umi_counts.txt
+ touch ${prefix}.duplex_seq_metrics.duplex_qc.pdf
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/local/fgbio/fastqtobam/main.nf b/modules/local/fgbio/fastqtobam/main.nf
index 346de71..543b97f 100644
--- a/modules/local/fgbio/fastqtobam/main.nf
+++ b/modules/local/fgbio/fastqtobam/main.nf
@@ -47,4 +47,15 @@ process FGBIO_FASTQTOBAM {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.unmapped.bam
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/local/fgbio/filterconsensusreads/main.nf b/modules/local/fgbio/filterconsensusreads/main.nf
index 118fab6..6943765 100644
--- a/modules/local/fgbio/filterconsensusreads/main.nf
+++ b/modules/local/fgbio/filterconsensusreads/main.nf
@@ -16,7 +16,7 @@ process FGBIO_FILTERCONSENSUSREADS {
output:
tuple val(meta), path("*.cons.filtered.bam") , emit: bam
- tuple val(meta), path("*.cons.filtered.bam.bai") , emit: bai
+ tuple val(meta), path("*.cons.filtered.bam.bai") , emit: bai
path "versions.yml" , emit: versions
script:
@@ -54,4 +54,16 @@ process FGBIO_FILTERCONSENSUSREADS {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.cons.filtered.bam
+ touch ${prefix}.cons.filtered.bam.bai
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/local/fgbio/groupreadsbyumi/main.nf b/modules/local/fgbio/groupreadsbyumi/main.nf
index 8eaa544..e650599 100644
--- a/modules/local/fgbio/groupreadsbyumi/main.nf
+++ b/modules/local/fgbio/groupreadsbyumi/main.nf
@@ -46,4 +46,16 @@ process FGBIO_GROUPREADSBYUMI {
fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.grouped.bam
+ touch ${prefix}.grouped-family-sizes.txt
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml
index 4c7d30f..6bbc87a 100644
--- a/modules/nf-core/bwa/index/meta.yml
+++ b/modules/nf-core/bwa/index/meta.yml
@@ -11,7 +11,7 @@ tools:
BWA is a software package for mapping DNA sequences against
a large reference genome, such as the human genome.
homepage: http://bio-bwa.sourceforge.net/
- documentation: http://www.htslib.org/doc/samtools.html
+ documentation: https://bio-bwa.sourceforge.net/bwa.shtml
arxiv: arXiv:1303.3997
licence: ["GPL-3.0-or-later"]
input:
diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
index d79f1c8..d8989f4 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 70edae4..e9d79a0 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:
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039
-
- { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("File type | Conventional base calls |
") },
-
- { assert snapshot(process.out.versions).match("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:
+ // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039
+ { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
+ { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
+ { assert path(process.out.html[0][1]).text.contains("File type | Conventional base calls |
") },
+ { assert snapshot(process.out.versions).match() }
)
}
}
@@ -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 type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][1]).text.contains("File type | Conventional base calls |
") },
-
- { assert snapshot(process.out.versions).match("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 type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][1]).text.contains("File type | Conventional base calls |
") },
+ { assert snapshot(process.out.versions).match() }
)
}
}
@@ -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 type | Conventional 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 type | Conventional 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 type | Conventional 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 type | Conventional 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 type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][1]).text.contains("File type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][2]).text.contains("File type | Conventional base calls |
") },
- { assert path(process.out.html[0][1][3]).text.contains("File type | Conventional base calls |
") },
-
- { assert snapshot(process.out.versions).match("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 type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][1]).text.contains("File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][2]).text.contains("File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][3]).text.contains("File type | Conventional base calls |
") },
+ { assert snapshot(process.out.versions).match() }
)
}
}
@@ -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 type | Conventional 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 type | Conventional 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 86f7c31..8067d2b 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.4"
+ },
+ "timestamp": "2024-08-23T11:21:58.323262"
+ },
+ "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.4"
+ },
+ "timestamp": "2024-08-23T11:21:51.69768"
+ },
+ "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/fgbio/sortbam/environment.yml b/modules/nf-core/fgbio/sortbam/environment.yml
new file mode 100644
index 0000000..452613a
--- /dev/null
+++ b/modules/nf-core/fgbio/sortbam/environment.yml
@@ -0,0 +1,7 @@
+name: fgbio_sortbam
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::fgbio=2.2.1
diff --git a/modules/nf-core/fgbio/sortbam/main.nf b/modules/nf-core/fgbio/sortbam/main.nf
new file mode 100644
index 0000000..e061f7c
--- /dev/null
+++ b/modules/nf-core/fgbio/sortbam/main.nf
@@ -0,0 +1,61 @@
+process FGBIO_SORTBAM {
+ 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/fgbio:2.2.1--hdfd78af_0' :
+ 'biocontainers/fgbio:2.2.1--hdfd78af_0' }"
+
+ input:
+ tuple val(meta), path(bam)
+
+ output:
+ tuple val(meta), path("*.bam"), emit: bam
+ 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}_sorted"
+ def mem_gb = 8
+ if (!task.memory) {
+ log.info '[fgbio SortBam] Available memory not known - defaulting to 8GB. Specify process memory requirements to change this.'
+ } else if (mem_gb > task.memory.giga) {
+ if (task.memory.giga < 2) {
+ mem_gb = 1
+ } else {
+ mem_gb = task.memory.giga - 1
+ }
+ }
+
+ if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
+
+ """
+ fgbio -Xmx${mem_gb}g \\
+ --async-io=true \\
+ --tmp-dir=. \\
+ SortBam \\
+ -i $bam \\
+ $args \\
+ -o ${prefix}.bam
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
+
+ stub:
+ prefix = task.ext.prefix ?: "${meta.id}_sorted"
+ if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
+ """
+ touch ${prefix}.bam
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//')
+ END_VERSIONS
+ """
+}
diff --git a/modules/nf-core/fgbio/sortbam/meta.yml b/modules/nf-core/fgbio/sortbam/meta.yml
new file mode 100644
index 0000000..61630d7
--- /dev/null
+++ b/modules/nf-core/fgbio/sortbam/meta.yml
@@ -0,0 +1,42 @@
+name: fgbio_sortbam
+description: Sorts a SAM or BAM file. Several sort orders are available, including coordinate, queryname, random, and randomquery.
+keywords:
+ - sort
+ - bam
+ - sam
+tools:
+ - fgbio:
+ description: Tools for working with genomic and high throughput sequencing data.
+ homepage: https://github.com/fulcrumgenomics/fgbio
+ documentation: http://fulcrumgenomics.github.io/fgbio/
+ licence: ["MIT"]
+input:
+ - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false, collapse:false ]
+ - bam:
+ type: file
+ description: |
+ The input SAM or BAM file to be sorted.
+ pattern: "*.{bam,sam}"
+output:
+ - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - bam:
+ type: file
+ description: |
+ Output SAM or BAM file.
+ pattern: "*.{bam,sam}"
+ - versions:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+authors:
+ - "@sruthipsuresh"
+maintainers:
+ - "@sruthipsuresh"
diff --git a/modules/nf-core/fgbio/sortbam/tests/main.nf.test b/modules/nf-core/fgbio/sortbam/tests/main.nf.test
new file mode 100644
index 0000000..2e9b245
--- /dev/null
+++ b/modules/nf-core/fgbio/sortbam/tests/main.nf.test
@@ -0,0 +1,56 @@
+nextflow_process {
+
+ name "Test Process FGBIO_SORTBAM"
+ script "../main.nf"
+ process "FGBIO_SORTBAM"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "fgbio"
+ tag "fgbio/sortbam"
+
+ test("sarscov2 - bam") {
+
+ when {
+ process {
+ """
+ input[0] = [ [ id:'test' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+ test("sarscov2 - bam - stub") {
+
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = [ [ id:'test' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/fgbio/sortbam/tests/main.nf.test.snap b/modules/nf-core/fgbio/sortbam/tests/main.nf.test.snap
new file mode 100644
index 0000000..39761a9
--- /dev/null
+++ b/modules/nf-core/fgbio/sortbam/tests/main.nf.test.snap
@@ -0,0 +1,68 @@
+{
+ "sarscov2 - bam - stub": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test"
+ },
+ "test_sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,384c5398cae017e4fe0df8cb8f004017"
+ ],
+ "bam": [
+ [
+ {
+ "id": "test"
+ },
+ "test_sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,384c5398cae017e4fe0df8cb8f004017"
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "23.10.1"
+ },
+ "timestamp": "2024-05-21T05:37:31.605753331"
+ },
+ "sarscov2 - bam": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test"
+ },
+ "test_sorted.bam:md5,1d7a558a72b7aecc80946cb9cadf8f60"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,384c5398cae017e4fe0df8cb8f004017"
+ ],
+ "bam": [
+ [
+ {
+ "id": "test"
+ },
+ "test_sorted.bam:md5,1d7a558a72b7aecc80946cb9cadf8f60"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,384c5398cae017e4fe0df8cb8f004017"
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "24.04.1"
+ },
+ "timestamp": "2024-05-21T10:48:47.945706955"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/fgbio/sortbam/tests/tags.yml b/modules/nf-core/fgbio/sortbam/tests/tags.yml
new file mode 100644
index 0000000..da42eab
--- /dev/null
+++ b/modules/nf-core/fgbio/sortbam/tests/tags.yml
@@ -0,0 +1,2 @@
+fgbio/sortbam:
+ - "modules/nf-core/fgbio/sortbam/**"
diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml
index ca39fb6..a31464c 100644
--- a/modules/nf-core/multiqc/environment.yml
+++ b/modules/nf-core/multiqc/environment.yml
@@ -4,4 +4,4 @@ channels:
- 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 47ac352..d536580 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 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 45a9bc3..382c08c 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 f1c4242..33316a7 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 bfebd80..83fa080 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 0000000..c537a6a
--- /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/samtools/dict/environment.yml b/modules/nf-core/samtools/dict/environment.yml
index aca9748..14a893c 100644
--- a/modules/nf-core/samtools/dict/environment.yml
+++ b/modules/nf-core/samtools/dict/environment.yml
@@ -4,5 +4,5 @@ channels:
- 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/dict/main.nf b/modules/nf-core/samtools/dict/main.nf
index 13dd6bf..52be415 100644
--- a/modules/nf-core/samtools/dict/main.nf
+++ b/modules/nf-core/samtools/dict/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_DICT {
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/dict/tests/main.nf.test b/modules/nf-core/samtools/dict/tests/main.nf.test
new file mode 100644
index 0000000..c467081
--- /dev/null
+++ b/modules/nf-core/samtools/dict/tests/main.nf.test
@@ -0,0 +1,62 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_DICT"
+ script "../main.nf"
+ process "SAMTOOLS_DICT"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/dict"
+
+ test("sarscov2 - fasta") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ path(process.out.dict[0][1]).readLines()[0],
+ process.out.versions
+ ).match()
+ }
+ )
+ }
+
+ }
+
+ test("sarscov2 - fasta - stub") {
+
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // 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/samtools/dict/tests/main.nf.test.snap b/modules/nf-core/samtools/dict/tests/main.nf.test.snap
new file mode 100644
index 0000000..66d7b1f
--- /dev/null
+++ b/modules/nf-core/samtools/dict/tests/main.nf.test.snap
@@ -0,0 +1,50 @@
+{
+ "sarscov2 - fasta - stub": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "genome.fasta.dict:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,47f9e889ed1e779cb54e61d707a7135d"
+ ],
+ "dict": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "genome.fasta.dict:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,47f9e889ed1e779cb54e61d707a7135d"
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.8.4",
+ "nextflow": "24.04.3"
+ },
+ "timestamp": "2024-07-18T09:43:30.509703257"
+ },
+ "sarscov2 - fasta": {
+ "content": [
+ "@HD\tVN:1.0\tSO:unsorted",
+ [
+ "versions.yml:md5,0af6b2d2d6d9d96bc5abe98b99b91446"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.9.0",
+ "nextflow": "24.04.3"
+ },
+ "timestamp": "2024-07-30T12:12:31.201483952"
+ }
+}
\ 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 9c24eb0..f8450fa 100644
--- a/modules/nf-core/samtools/faidx/environment.yml
+++ b/modules/nf-core/samtools/faidx/environment.yml
@@ -6,5 +6,5 @@ channels:
- 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 cfe7ad9..bdcdbc9 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 3e651ef..3223b72 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/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml
index fc669b1..cd366d6 100644
--- a/modules/nf-core/samtools/merge/environment.yml
+++ b/modules/nf-core/samtools/merge/environment.yml
@@ -4,5 +4,5 @@ channels:
- 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/merge/main.nf b/modules/nf-core/samtools/merge/main.nf
index a3048c2..693b1d8 100644
--- a/modules/nf-core/samtools/merge/main.nf
+++ b/modules/nf-core/samtools/merge/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_MERGE {
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_files, stageAs: "?/*")
diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap
index f7da769..17bc846 100644
--- a/modules/nf-core/samtools/merge/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap
@@ -80,14 +80,14 @@
"bam_versions": {
"content": [
[
- "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4"
+ "versions.yml:md5,84dab54b9812780df48f5cecef690c34"
]
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "24.01.0"
+ "nextflow": "23.10.1"
},
- "timestamp": "2024-02-13T16:16:33.782637377"
+ "timestamp": "2024-05-28T15:46:35.851936597"
},
"bams_csi": {
"content": [
@@ -124,14 +124,14 @@
"bams_stub_versions": {
"content": [
[
- "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4"
+ "versions.yml:md5,84dab54b9812780df48f5cecef690c34"
]
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "24.01.0"
+ "nextflow": "23.10.1"
},
- "timestamp": "2024-02-13T16:16:42.594476052"
+ "timestamp": "2024-05-28T15:46:41.405707643"
},
"bam_cram": {
"content": [
@@ -158,14 +158,14 @@
"bams_versions": {
"content": [
[
- "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4"
+ "versions.yml:md5,84dab54b9812780df48f5cecef690c34"
]
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "24.01.0"
+ "nextflow": "23.10.1"
},
- "timestamp": "2024-02-13T16:16:04.805335656"
+ "timestamp": "2024-05-28T15:45:51.695689923"
},
"crams_bam": {
"content": [
@@ -182,14 +182,14 @@
"crams_versions": {
"content": [
[
- "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4"
+ "versions.yml:md5,84dab54b9812780df48f5cecef690c34"
]
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "24.01.0"
+ "nextflow": "23.10.1"
},
- "timestamp": "2024-02-13T16:16:25.889394689"
+ "timestamp": "2024-05-28T15:46:30.185392319"
},
"bam_csi": {
"content": [
diff --git a/nextflow.config b/nextflow.config
index bbf3af6..7702358 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -16,18 +16,16 @@ params {
genome = null
igenomes_base = 's3://ngi-igenomes/igenomes/'
igenomes_ignore = false
- fasta = null
- bwa = null
- dict = null
- fasta_fai = null
save_reference = false
// MultiQC options
- multiqc_config = null
- multiqc_title = null
- multiqc_logo = null
- max_multiqc_email_size = '25.MB'
+ multiqc_config = null
+ multiqc_title = null
+ multiqc_logo = null
+ max_multiqc_email_size = '25.MB'
multiqc_methods_description = null
+ multiqc_replace_names = null
+ multiqc_sample_names = null
// Main options
mode = 'rd'
@@ -74,7 +72,7 @@ params {
// Schema validation default options
validationFailUnrecognisedParams = false
validationLenientMode = false
- validationSchemaIgnoreParams = 'genomes,igenomes_base,monochromeLogs'
+ validationSchemaIgnoreParams = 'genomes,igenomes_base,monochromeLogs,fasta,fasta_fai,bwa,dict'
validationShowHiddenParams = false
validate_params = true
}
@@ -254,8 +252,8 @@ manifest {
description = """fgbio Best Practices FASTQ to Consensus Pipeline"""
mainScript = 'main.nf'
nextflowVersion = '!>=23.04.0'
- version = '1.0.0'
- doi = '10.5281/zenodo.10456900'
+ version = '1.0.1'
+ doi = '10.5281/zenodo.10456900,10.5281/zenodo.11267672'
}
// Load modules.config for DSL2 module specific options
diff --git a/nextflow_schema.json b/nextflow_schema.json
index d7c2c51..dc54a5c 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -91,7 +91,7 @@
"description": "Options for when creating consensus reads",
"properties": {
"call_min_reads": {
- "type": "string",
+ "type": ["integer", "string"],
"description": "Minimum reads to call a consensus",
"fa_icon": "fas fa-book",
"help_text": "The minimum reads to call a consensus for fgbio's CallMolecularConsensusReads/CallDuplexConsensusReads."
@@ -111,7 +111,7 @@
"description": "Options for when filtering consensus reads",
"properties": {
"filter_min_reads": {
- "type": "string",
+ "type": ["integer", "string"],
"description": "Minimum reads to keep a consensus",
"fa_icon": "fas fa-book",
"help_text": "The minimum reads to keep a consensus for fgbio's FilterConsensusReads."
@@ -123,7 +123,7 @@
"help_text": "The minimum consensus base quality to keep when calling a consensus for fgbio's FilterConsensusReads."
},
"filter_max_base_error_rate": {
- "type": "number",
+ "type": ["number", "string"],
"description": "The maximum error rate for a single consensus base",
"fa_icon": "fas fa-book",
"help_text": "The maximum error rate for a single consensus base when filtering a consensus for fgbio's FilterConsensusReads."
@@ -155,6 +155,7 @@
"dict": {
"type": "string",
"fa_icon": "fas fa-file",
+ "exists": true,
"description": "Path to FASTA dictionary file.",
"help_text": "If you use AWS iGenomes, this has already been set for you appropriately.\n\n> **NB** If none provided, will be generated automatically from the FASTA reference. Combine with `--save_reference` to save for future runs.",
"hidden": true
@@ -162,12 +163,14 @@
"fasta_fai": {
"type": "string",
"fa_icon": "fas fa-file",
+ "exists": true,
"help_text": "If you use AWS iGenomes, this has already been set for you appropriately.\n\n> **NB** If none provided, will be generated automatically from the FASTA reference. Combine with `--save_reference` to save for future runs.",
"description": "Path to FASTA reference index."
},
"bwa": {
"type": "string",
"fa_icon": "fas fa-copy",
+ "exists": true,
"description": "Path to BWA mem indices.",
"help_text": "If you use AWS iGenomes, this has already been set for you appropriately.\n\nIf you wish to recompute indices available on igenomes, set `--bwa false`.\n\n> **NB** If none provided, will be generated automatically from the FASTA reference. Combine with `--save_reference` to save for future runs.",
"hidden": true
@@ -351,6 +354,20 @@
"description": "Custom MultiQC yaml file containing HTML including a methods description.",
"fa_icon": "fas fa-cog"
},
+ "multiqc_replace_names": {
+ "type": "string",
+ "format": "file-path",
+ "description": "Two-column sample renaming TSV file passed to MultiQC. First column a set of patterns, second column a set of corresponding replacements.",
+ "fa_icon": "fas fa-cog",
+ "hidden": true
+ },
+ "multiqc_sample_names": {
+ "type": "string",
+ "format": "file-path",
+ "description": " TSV file with headers passed to MultiQC.",
+ "fa_icon": "fas fa-cog",
+ "hidden": true
+ },
"validate_params": {
"type": "boolean",
"description": "Boolean whether to validate parameters against the schema at runtime",
diff --git a/subworkflows/local/utils_nfcore_fastquorum_pipeline/main.nf b/subworkflows/local/utils_nfcore_fastquorum_pipeline/main.nf
index 3c8f5c3..d9e4490 100644
--- a/subworkflows/local/utils_nfcore_fastquorum_pipeline/main.nf
+++ b/subworkflows/local/utils_nfcore_fastquorum_pipeline/main.nf
@@ -77,15 +77,6 @@ workflow PIPELINE_INITIALISATION {
//
validateInputParameters()
- // Check input path parameters to see if they exist
- def checkPathParamList = [
- params.bwa,
- params.dict,
- params.fasta,
- params.fasta_fai
-
- ]
-
//
// Create channel from input file provided through params.input
//
diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
index ac31f28..e770d91 100644
--- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
@@ -102,7 +102,7 @@ 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
diff --git a/tests/pipeline/multi_fastq.nf.test.snap b/tests/pipeline/multi_fastq.nf.test.snap
index c6b95fc..cfa57e4 100644
--- a/tests/pipeline/multi_fastq.nf.test.snap
+++ b/tests/pipeline/multi_fastq.nf.test.snap
@@ -16,23 +16,23 @@
},
"multi_fastq_ht_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T16:13:43.042208"
+ "timestamp": "2024-08-23T11:52:45.734188"
},
"multi_fastq_rd_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLDDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLDDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T16:06:43.154704"
+ "timestamp": "2024-08-23T11:50:06.73123"
},
"multi_fastq_ht": {
"content": [
diff --git a/tests/pipeline/multi_lanes.nf.test b/tests/pipeline/multi_lanes.nf.test
index f8105c1..64e2e83 100644
--- a/tests/pipeline/multi_lanes.nf.test
+++ b/tests/pipeline/multi_lanes.nf.test
@@ -20,7 +20,7 @@ nextflow_pipeline {
assertAll(
{ assert workflow.success },
{ assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("multi_lanes_rd_software_versions") },
- { assert workflow.trace.succeeded().size() == 39 },
+ { assert workflow.trace.succeeded().size() == 41 },
{ assert new File("$outputDir/multiqc/multiqc_report.html").exists() },
{ assert new File("$outputDir/consensus_filtering/filtered/SRR6109255_one_lane/SRR6109255_one_lane.cons.filtered.bam").exists() },
{ assert new File("$outputDir/consensus_filtering/filtered/SRR6109255_two_lanes/SRR6109255_two_lanes.cons.filtered.bam").exists() },
@@ -53,7 +53,7 @@ nextflow_pipeline {
assertAll(
{ assert workflow.success },
{ assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("multi_lanes_ht_software_versions") },
- { assert workflow.trace.succeeded().size() == 36 },
+ { assert workflow.trace.succeeded().size() == 38 },
{ assert new File("$outputDir/multiqc/multiqc_report.html").exists() },
{ assert new File("$outputDir/consensus_filtering/filtered/SRR6109255_one_lane/SRR6109255_one_lane.cons.filtered.bam").exists() },
{ assert new File("$outputDir/consensus_filtering/filtered/SRR6109255_two_lanes/SRR6109255_two_lanes.cons.filtered.bam").exists() },
diff --git a/tests/pipeline/multi_lanes.nf.test.snap b/tests/pipeline/multi_lanes.nf.test.snap
index 43f42c5..efba1a7 100644
--- a/tests/pipeline/multi_lanes.nf.test.snap
+++ b/tests/pipeline/multi_lanes.nf.test.snap
@@ -1,13 +1,13 @@
{
"multi_lanes_rd_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLDDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, MERGE_BAM={samtools=1.19.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLDDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, MERGE_BAM={samtools=1.2}, SORTBAM={fgbio=2.2.1}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T15:50:47.281159"
+ "timestamp": "2024-08-23T11:44:11.374426"
},
"multi_lanes_ht": {
"content": [
@@ -26,13 +26,13 @@
},
"multi_lanes_ht_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, MERGE_BAM={samtools=1.19.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, MERGE_BAM={samtools=1.2}, SORTBAM={fgbio=2.2.1}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T15:58:15.728901"
+ "timestamp": "2024-08-23T11:47:27.269353"
},
"multi_lanes_rd": {
"content": [
diff --git a/tests/pipeline/single_fastq.nf.test.snap b/tests/pipeline/single_fastq.nf.test.snap
index 110e78e..d676ab8 100644
--- a/tests/pipeline/single_fastq.nf.test.snap
+++ b/tests/pipeline/single_fastq.nf.test.snap
@@ -11,23 +11,23 @@
},
"single_fastq_ht_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERMOLECULARCONSENSUSREADS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERMOLECULARCONSENSUSREADS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T16:28:01.840894"
+ "timestamp": "2024-08-23T11:56:22.904524"
},
"single_fastq_rd_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLMOLECULARCONSENSUSREADS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLMOLECULARCONSENSUSREADS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T16:21:29.23891"
+ "timestamp": "2024-08-23T11:54:37.217511"
},
"single_fastq_ht": {
"content": [
diff --git a/tests/pipeline/tiny.nf.test.snap b/tests/pipeline/tiny.nf.test.snap
index 72b51a6..e6a32c5 100644
--- a/tests/pipeline/tiny.nf.test.snap
+++ b/tests/pipeline/tiny.nf.test.snap
@@ -1,23 +1,23 @@
{
"tiny_rd_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLDDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLDDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, FILTERCONSENSUSREADS={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T15:35:22.555322"
+ "timestamp": "2024-08-23T11:38:48.555493"
},
"tiny_ht_software_versions": {
"content": [
- "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.0}}"
+ "{ALIGN_CONSENSUS_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, ALIGN_RAW_BAM={bwa=0.7.17-r1188, fgbio=2.0.2, samtools=1.16.1}, CALLANDFILTERDUPLEXCONSENSUSREADS={fgbio=2.0.2}, COLLECTDUPLEXSEQMETRICS={fgbio=2.0.2}, FASTQC={fastqc=0.12.1}, FASTQTOBAM={fgbio=2.0.2}, GROUPREADSBYUMI={fgbio=2.0.2}, Workflow={nf-core/fastquorum=v1.0.1}}"
],
"meta": {
"nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nextflow": "24.04.4"
},
- "timestamp": "2024-05-20T15:42:18.622029"
+ "timestamp": "2024-08-23T11:40:38.676264"
},
"tiny_rd": {
"content": [
diff --git a/workflows/fastquorum.nf b/workflows/fastquorum.nf
index 1f2da64..0b79c10 100644
--- a/workflows/fastquorum.nf
+++ b/workflows/fastquorum.nf
@@ -21,6 +21,7 @@ include { FGBIO_COLLECTDUPLEXSEQMETRICS as COLLECTDUPLEXSEQMETRICS
include { FGBIO_CALLANDFILTERMOLECULARCONSENSUSREADS as CALLANDFILTERMOLECULARCONSENSUSREADS } from '../modules/local/fgbio/callandfiltermolecularconsensusreads/main'
include { FGBIO_CALLANDFILTERDUPLEXCONSENSUSREADS as CALLANDFILTERDUPLEXCONSENSUSREADS } from '../modules/local/fgbio/callandfilterduplexconsensusreads/main'
include { SAMTOOLS_MERGE as MERGE_BAM } from '../modules/nf-core/samtools/merge/main'
+include { FGBIO_SORTBAM as SORTBAM } from '../modules/nf-core/fgbio/sortbam/main'
include { MULTIQC } from '../modules/nf-core/multiqc/main'
@@ -92,10 +93,17 @@ workflow FASTQUORUM {
MERGE_BAM(bam_to_merge.multiple, [[], []], [[], []])
ch_versions = ch_versions.mix(MERGE_BAM.out.versions.first())
+ //
+ // MODULE: Run fgbio SortBam to re-sort into TemplateCoordinate. This can be removed when samtools is released
+ // with the following bugfix: https://github.com/samtools/samtools/pull/2062
+ //
+ SORTBAM(MERGE_BAM.out.bam)
+ ch_versions = ch_versions.mix(SORTBAM.out.versions.first())
+
//
// Create a channel that contains the merged BAMs and those that did not need to be merged.
//
- bam_all = MERGE_BAM.out.bam.mix(bam_to_merge.single)
+ bam_all = SORTBAM.out.bam.mix(bam_to_merge.single)
//
// MODULE: Run fgbio GroupReadsByUmi
@@ -186,6 +194,9 @@ workflow FASTQUORUM {
ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true)
ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty()
ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty()
+ ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty()
+ ch_replace_names = params.multiqc_replace_names ? Channel.fromPath(params.multiqc_replace_names, checkIfExists: true): Channel.empty()
+ ch_sample_names = params.multiqc_sample_names ? Channel.fromPath(params.multiqc_sample_names, 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)
@@ -198,7 +209,9 @@ workflow FASTQUORUM {
ch_multiqc_files.collect(),
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
- ch_multiqc_logo.toList()
+ ch_multiqc_logo.toList(),
+ ch_replace_names.toList(),
+ ch_sample_names.toList()
)
emit: