From b8881f86d4a25527f6fd6771c45c0c9b9510c4c9 Mon Sep 17 00:00:00 2001 From: Abhinav Sharma Date: Sat, 26 Oct 2024 16:10:42 +0200 Subject: [PATCH 01/39] add modules for magma [ci skip] --- modules.json | 15 ++ modules/magma/modules/local/gatk4.nf | 91 +++++++++ .../nf-core/gatk4/applybqsr/environment.yml | 5 + modules/nf-core/gatk4/applybqsr/main.nf | 64 +++++++ modules/nf-core/gatk4/applybqsr/meta.yml | 83 ++++++++ .../gatk4/applybqsr/tests/main.nf.test | 154 +++++++++++++++ .../gatk4/applybqsr/tests/main.nf.test.snap | 180 ++++++++++++++++++ .../nf-core/gatk4/applybqsr/tests/tags.yml | 2 + .../nf-core/gatk4/applyvqsr/environment.yml | 5 + modules/nf-core/gatk4/applyvqsr/main.nf | 63 ++++++ modules/nf-core/gatk4/applyvqsr/meta.yml | 91 +++++++++ .../applyvqsr/tests/allelspecificity.config | 5 + .../gatk4/applyvqsr/tests/main.nf.test | 106 +++++++++++ .../gatk4/applyvqsr/tests/main.nf.test.snap | 95 +++++++++ .../tests/no-allelspecificity.config | 5 + .../nf-core/gatk4/applyvqsr/tests/tags.yml | 2 + modules/nf-core/lofreq/call/environment.yml | 5 + modules/nf-core/lofreq/call/main.nf | 50 +++++ modules/nf-core/lofreq/call/meta.yml | 53 ++++++ .../nf-core/lofreq/call/tests/main.nf.test | 94 +++++++++ .../lofreq/call/tests/main.nf.test.snap | 63 ++++++ .../magma/magma.nf | 0 22 files changed, 1231 insertions(+) create mode 100644 modules/magma/modules/local/gatk4.nf create mode 100644 modules/nf-core/gatk4/applybqsr/environment.yml create mode 100644 modules/nf-core/gatk4/applybqsr/main.nf create mode 100644 modules/nf-core/gatk4/applybqsr/meta.yml create mode 100644 modules/nf-core/gatk4/applybqsr/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/applybqsr/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/applybqsr/tests/tags.yml create mode 100644 modules/nf-core/gatk4/applyvqsr/environment.yml create mode 100644 modules/nf-core/gatk4/applyvqsr/main.nf create mode 100644 modules/nf-core/gatk4/applyvqsr/meta.yml create mode 100644 modules/nf-core/gatk4/applyvqsr/tests/allelspecificity.config create mode 100644 modules/nf-core/gatk4/applyvqsr/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/applyvqsr/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/applyvqsr/tests/no-allelspecificity.config create mode 100644 modules/nf-core/gatk4/applyvqsr/tests/tags.yml create mode 100644 modules/nf-core/lofreq/call/environment.yml create mode 100644 modules/nf-core/lofreq/call/main.nf create mode 100644 modules/nf-core/lofreq/call/meta.yml create mode 100644 modules/nf-core/lofreq/call/tests/main.nf.test create mode 100644 modules/nf-core/lofreq/call/tests/main.nf.test.snap create mode 100644 subworkflows/local/utils_nfcore_tbanalyzer_pipeline/magma/magma.nf diff --git a/modules.json b/modules.json index c52667c..aab32b1 100644 --- a/modules.json +++ b/modules.json @@ -10,6 +10,21 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "gatk4/applybqsr": { + "branch": "master", + "git_sha": "6b3bf38285d94cc1ea3cd9fa93310d54b04c3819", + "installed_by": ["modules"] + }, + "gatk4/applyvqsr": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "lofreq/call": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", diff --git a/modules/magma/modules/local/gatk4.nf b/modules/magma/modules/local/gatk4.nf new file mode 100644 index 0000000..49b92ca --- /dev/null +++ b/modules/magma/modules/local/gatk4.nf @@ -0,0 +1,91 @@ +// TODO nf-core: If in doubt look at other nf-core/modules to see how we are doing things! :) +// https://github.com/nf-core/modules/tree/master/modules/nf-core/ +// You can also ask for help via your pull request or on the #modules channel on the nf-core Slack workspace: +// https://nf-co.re/join +// TODO nf-core: A module file SHOULD only define input and output files as command-line parameters. +// All other parameters MUST be provided using the "task.ext" directive, see here: +// https://www.nextflow.io/docs/latest/process.html#ext +// where "task.ext" is a string. +// Any parameters that need to be evaluated in the context of a particular sample +// e.g. single-end/paired-end data MUST also be defined and evaluated appropriately. +// TODO nf-core: Software that can be piped together SHOULD be added to separate module files +// unless there is a run-time, storage advantage in implementing in this way +// e.g. it's ok to have a single module for bwa to output BAM instead of SAM: +// bwa mem | samtools view -B -T ref.fasta +// TODO nf-core: Optional inputs are not currently supported by Nextflow. However, using an empty +// list (`[]`) instead of a file can be used to work around this issue. + +process GATK4 { + tag "$meta.id" + label 'process_high_memory' + + // TODO nf-core: List required Conda package(s). + // Software MUST be pinned to channel (i.e. "bioconda"), version (i.e. "1.10"). + // For Conda, the build (i.e. "h9402c20_2") must be EXCLUDED to support installation on different operating systems. + // TODO nf-core: See section in main README for further information regarding finding and adding container addresses to the section below. + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + // TODO nf-core: Where applicable all sample-specific information e.g. "id", "single_end", "read_group" + // MUST be provided as an input via a Groovy Map called "meta". + // This information may not be required in some instances e.g. indexing reference genome files: + // https://github.com/nf-core/modules/blob/master/modules/nf-core/bwa/index/main.nf + // TODO nf-core: Where applicable please provide/convert compressed files as input/output + // e.g. "*.fastq.gz" and NOT "*.fastq", "*.bam" and NOT "*.sam" etc. + tuple val(meta), path(bam) + + output: + // TODO nf-core: Named file extensions MUST be emitted for ALL output channels + tuple val(meta), path("*.bam"), emit: bam + // TODO nf-core: List additional required output channels/values here + 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}" + // TODO nf-core: Where possible, a command MUST be provided to obtain the version number of the software e.g. 1.10 + // If the software is unable to output a version number on the command-line then it can be manually specified + // e.g. https://github.com/nf-core/modules/blob/master/modules/nf-core/homer/annotatepeaks/main.nf + // Each software used MUST provide the software name and version number in the YAML version file (versions.yml) + // TODO nf-core: It MUST be possible to pass additional parameters to the tool as a command-line string via the "task.ext.args" directive + // TODO nf-core: If the tool supports multi-threading then you MUST provide the appropriate parameter + // using the Nextflow "task" variable e.g. "--threads $task.cpus" + // TODO nf-core: Please replace the example samtools command below with your module's command + // TODO nf-core: Please indent the command appropriately (4 spaces!!) to help with readability ;) + """ + samtools \\ + sort \\ + $args \\ + -@ $task.cpus \\ + -o ${prefix}.bam \\ + -T $prefix \\ + $bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(samtools --version |& sed '1!d ; s/samtools //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + // TODO nf-core: A stub section should mimic the execution of the original module as best as possible + // Have a look at the following examples: + // Simple example: https://github.com/nf-core/modules/blob/818474a292b4860ae8ff88e149fbcda68814114d/modules/nf-core/bcftools/annotate/main.nf#L47-L63 + // Complex example: https://github.com/nf-core/modules/blob/818474a292b4860ae8ff88e149fbcda68814114d/modules/nf-core/bedtools/split/main.nf#L38-L54 + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(samtools --version |& sed '1!d ; s/samtools //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/applybqsr/environment.yml b/modules/nf-core/gatk4/applybqsr/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/applybqsr/main.nf b/modules/nf-core/gatk4/applybqsr/main.nf new file mode 100644 index 0000000..4e91c31 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/main.nf @@ -0,0 +1,64 @@ +process GATK4_APPLYBQSR { + 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/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(input), path(input_index), path(bqsr_table), path(intervals) + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.bam") , emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, 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 interval_command = intervals ? "--intervals $intervals" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK ApplyBQSR] 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" \\ + ApplyBQSR \\ + --input $input \\ + --output ${prefix}.${input.getExtension()} \\ + --reference $fasta \\ + --bqsr-recal-file $bqsr_table \\ + $interval_command \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def input_extension = input.getExtension() + def output_extension = input_extension == 'bam' ? 'bam' : 'cram' + """ + touch ${prefix}.${output_extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/applybqsr/meta.yml b/modules/nf-core/gatk4/applybqsr/meta.yml new file mode 100644 index 0000000..65d9c9e --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/meta.yml @@ -0,0 +1,83 @@ +name: gatk4_applybqsr +description: Apply base quality score recalibration (BQSR) to a bam file +keywords: + - bam + - base quality score recalibration + - bqsr + - cram + - gatk4 +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. + homepage: https://gatk.broadinstitute.org/hc/en-us + 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', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - bqsr_table: + type: file + description: Recalibration table from gatk4_baserecalibrator + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Recalibrated 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: Recalibrated CRAM file + pattern: "*.{cram}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@yocra3" + - "@FriederikeHanssen" +maintainers: + - "@yocra3" + - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4/applybqsr/tests/main.nf.test b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test new file mode 100644 index 0000000..acb41ce --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test @@ -0,0 +1,154 @@ +nextflow_process { + + name "Test Process GATK4_APPLYBQSR" + script "../main.nf" + process "GATK4_APPLYBQSR" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/applybqsr" + + test("sarscov2 - bam") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + [] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = 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/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam - intervals") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = 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/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - cram") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + 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), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', 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) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert snapshot(file(process.out.cram[0][1]).name).match("test.cram") } + ) + } + } + + test("sarscov2 - cram - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + 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), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', 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) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + [] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = 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/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/applybqsr/tests/main.nf.test.snap b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test.snap new file mode 100644 index 0000000..19b37d0 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/tests/main.nf.test.snap @@ -0,0 +1,180 @@ +{ + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-20T10:25:00.314573" + }, + "sarscov2 - bam - intervals": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,096d269e17f4ae53f765013479240db8" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,096d269e17f4ae53f765013479240db8" + ] + ], + "cram": [ + + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T16:21:48.144461" + }, + "sarscov2 - cram": { + "content": [ + [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T16:22:09.308602" + }, + "test.cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2023-12-09T03:10:46.70859771" + }, + "sarscov2 - cram - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-20T10:24:52.761169" + }, + "sarscov2 - bam": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,022271b9ce0a07579282a2a5c1186513" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,022271b9ce0a07579282a2a5c1186513" + ] + ], + "cram": [ + + ], + "versions": [ + "versions.yml:md5,bb2a060a0280c812fba3c74b1707b350" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-02-13T16:21:28.719225" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/applybqsr/tests/tags.yml b/modules/nf-core/gatk4/applybqsr/tests/tags.yml new file mode 100644 index 0000000..8da9292 --- /dev/null +++ b/modules/nf-core/gatk4/applybqsr/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/applybqsr: + - "modules/nf-core/gatk4/applybqsr/**" diff --git a/modules/nf-core/gatk4/applyvqsr/environment.yml b/modules/nf-core/gatk4/applyvqsr/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/applyvqsr/main.nf b/modules/nf-core/gatk4/applyvqsr/main.nf new file mode 100644 index 0000000..047321b --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/main.nf @@ -0,0 +1,63 @@ +process GATK4_APPLYVQSR { + 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/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(vcf_tbi), path(recal), path(recal_index), path(tranches) + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi + 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_command = fasta ? "--reference $fasta" : '' + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK ApplyVQSR] 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" \\ + ApplyVQSR \\ + --variant ${vcf} \\ + --output ${prefix}.vcf.gz \\ + $reference_command \\ + --tranches-file $tranches \\ + --recal-file $recal \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/applyvqsr/meta.yml b/modules/nf-core/gatk4/applyvqsr/meta.yml new file mode 100644 index 0000000..ceedff6 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/meta.yml @@ -0,0 +1,91 @@ +name: gatk4_applyvqsr +description: | + Apply a score cutoff to filter variants based on a recalibration table. + AplyVQSR performs the second pass in a two-stage process called Variant Quality Score Recalibration (VQSR). + Specifically, it applies filtering to the input variants based on the recalibration table produced + in the first step by VariantRecalibrator and a target sensitivity value. +keywords: + - gatk4 + - variant quality score recalibration + - vcf + - vqsr +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. + homepage: https://gatk.broadinstitute.org/hc/en-us + 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'] + - vcf: + type: file + description: VCF file to be recalibrated, this should be the same file as used + for the first stage VariantRecalibrator. + pattern: "*.vcf" + - vcf_tbi: + type: file + description: tabix index for the input vcf file. + pattern: "*.vcf.tbi" + - recal: + type: file + description: Recalibration file produced when the input vcf was run through + VariantRecalibrator in stage 1. + pattern: "*.recal" + - recal_index: + type: file + description: Index file for the recalibration file. + pattern: ".recal.idx" + - tranches: + type: file + description: Tranches file produced when the input vcf was run through VariantRecalibrator + in stage 1. + pattern: ".tranches" + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" +output: + - vcf: + - meta: + type: file + description: compressed vcf file containing the recalibrated variants. + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: compressed vcf file containing the recalibrated variants. + pattern: "*.vcf.gz" + - tbi: + - meta: + type: file + description: Index of recalibrated vcf file. + pattern: "*vcf.gz.tbi" + - "*.tbi": + type: file + description: Index of recalibrated vcf file. + pattern: "*vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions. + pattern: "versions.yml" +authors: + - "@GCJMackenzie" +maintainers: + - "@GCJMackenzie" diff --git a/modules/nf-core/gatk4/applyvqsr/tests/allelspecificity.config b/modules/nf-core/gatk4/applyvqsr/tests/allelspecificity.config new file mode 100644 index 0000000..ac368bd --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/allelspecificity.config @@ -0,0 +1,5 @@ +process { + withName: GATK4_APPLYVQSR { + ext.args = '--mode SNP --truth-sensitivity-filter-level 99.0 -AS' + } +} diff --git a/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test new file mode 100644 index 0000000..104eb7f --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test @@ -0,0 +1,106 @@ +nextflow_process { + + name "Test Process GATK4_APPLYVQSR" + script "../main.nf" + process "GATK4_APPLYVQSR" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/applyvqsr" + + test("human - vcf") { + + config "./no-allelspecificity.config" + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.tranches', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") }, + { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match() } + ) + } + + } + + test("human - vcf - allele-specific") { + + config "./allelspecificity.config" + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2_allele_specific.recal', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2_allele_specific.recal.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2_allele_specific.tranches', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions_allelspecific") }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") }, + { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match() } + ) + } + + } + + test("human - vcf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.recal.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/variantrecalibrator/test2.tranches', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + input[3] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test.snap b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test.snap new file mode 100644 index 0000000..ad2fe8b --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/main.nf.test.snap @@ -0,0 +1,95 @@ +{ + "human - vcf": { + "content": [ + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:31:50.727658" + }, + "human - vcf - allele-specific": { + "content": [ + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:29:42.331816" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:00:49.353138" + }, + "human - vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ], + "tbi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:01:24.370421" + }, + "versions_allelspecific": { + "content": [ + [ + "versions.yml:md5,4a6890d486a62ce6f2edfd2f8961da4f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T13:01:08.104194" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/applyvqsr/tests/no-allelspecificity.config b/modules/nf-core/gatk4/applyvqsr/tests/no-allelspecificity.config new file mode 100644 index 0000000..c08c918 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/no-allelspecificity.config @@ -0,0 +1,5 @@ +process { + withName: GATK4_APPLYVQSR { + ext.args = '--mode SNP --truth-sensitivity-filter-level 99.0' + } +} diff --git a/modules/nf-core/gatk4/applyvqsr/tests/tags.yml b/modules/nf-core/gatk4/applyvqsr/tests/tags.yml new file mode 100644 index 0000000..c657063 --- /dev/null +++ b/modules/nf-core/gatk4/applyvqsr/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/applyvqsr: + - "modules/nf-core/gatk4/applyvqsr/**" diff --git a/modules/nf-core/lofreq/call/environment.yml b/modules/nf-core/lofreq/call/environment.yml new file mode 100644 index 0000000..011ce6c --- /dev/null +++ b/modules/nf-core/lofreq/call/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::lofreq=2.1.5 diff --git a/modules/nf-core/lofreq/call/main.nf b/modules/nf-core/lofreq/call/main.nf new file mode 100644 index 0000000..bfe8f21 --- /dev/null +++ b/modules/nf-core/lofreq/call/main.nf @@ -0,0 +1,50 @@ +process LOFREQ_CALL { + 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/lofreq:2.1.5--py38h588ecb2_4' : + 'biocontainers/lofreq:2.1.5--py38h588ecb2_4' }" + + input: + tuple val(meta), path(bam), path(intervals) + path fasta + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + 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 options_intervals = intervals ? "-l ${intervals}" : "" + """ + lofreq \\ + call \\ + $args \\ + $options_intervals \\ + -f $fasta \\ + -o ${prefix}.vcf.gz \\ + $bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo | gzip > ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/lofreq/call/meta.yml b/modules/nf-core/lofreq/call/meta.yml new file mode 100644 index 0000000..d2895b8 --- /dev/null +++ b/modules/nf-core/lofreq/call/meta.yml @@ -0,0 +1,53 @@ +name: lofreq_call +description: Lofreq subcommand to call low frequency variants from alignments +keywords: + - variant calling + - low frequency variant calling + - lofreq + - lofreq/call +tools: + - lofreq: + description: A fast and sensitive variant-caller for inferring SNVs and indels + from next-generation sequencing data + homepage: https://csb5.github.io/lofreq/ + documentation: https://csb5.github.io/lofreq/commands/ + doi: "10.1093/nar/gks918 " + licence: ["MIT"] + identifier: biotools:lofreq +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM input file + pattern: "*.{bam}" + - intervals: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - - fasta: + type: file + description: The reference fasta file +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: VCF output file + pattern: "*.{vcf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@bjohnnyd" +maintainers: + - "@bjohnnyd" diff --git a/modules/nf-core/lofreq/call/tests/main.nf.test b/modules/nf-core/lofreq/call/tests/main.nf.test new file mode 100644 index 0000000..208df18 --- /dev/null +++ b/modules/nf-core/lofreq/call/tests/main.nf.test @@ -0,0 +1,94 @@ + +nextflow_process { + + name "Test Process LOFREQ_CALL" + script "../main.nf" + process "LOFREQ_CALL" + + tag "modules" + tag "modules_nfcore" + tag "lofreq" + tag "lofreq/call" + + test("test-lofreq-call") { + + 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), + [] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + + test("test-lofreq-call-intervals") { + + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + + test("test-lofreq-call-intervals-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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', 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() } + ) + } + } + +} diff --git a/modules/nf-core/lofreq/call/tests/main.nf.test.snap b/modules/nf-core/lofreq/call/tests/main.nf.test.snap new file mode 100644 index 0000000..4689298 --- /dev/null +++ b/modules/nf-core/lofreq/call/tests/main.nf.test.snap @@ -0,0 +1,63 @@ +{ + "test-lofreq-call": { + "content": [ + "VcfFile [chromosomes=[], sampleCount=0, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T21:57:46.175949" + }, + "test-lofreq-call-intervals-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T21:56:44.869711" + }, + "test-lofreq-call-intervals": { + "content": [ + "VcfFile [chromosomes=[], sampleCount=0, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,15df54aa4144c3622e5033b9cc762407" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T21:57:50.722934" + } +} \ No newline at end of file diff --git a/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/magma/magma.nf b/subworkflows/local/utils_nfcore_tbanalyzer_pipeline/magma/magma.nf new file mode 100644 index 0000000..e69de29 From 0eb0105cd8ae19b3a0ee080a719933a26ba208f3 Mon Sep 17 00:00:00 2001 From: "Davi Marcon (@Mxrcon)" Date: Mon, 28 Oct 2024 09:43:10 -0300 Subject: [PATCH 02/39] import the modules from the `MTBseq-nf` pipeline --- modules/local/mtbseq/tbamend.nf | 70 +++++++++++++++++++++++++ modules/local/mtbseq/tbbwa.nf | 59 +++++++++++++++++++++ modules/local/mtbseq/tbfull.nf | 84 ++++++++++++++++++++++++++++++ modules/local/mtbseq/tbgroups.nf | 64 +++++++++++++++++++++++ modules/local/mtbseq/tbjoin.nf | 62 ++++++++++++++++++++++ modules/local/mtbseq/tblist.nf | 60 +++++++++++++++++++++ modules/local/mtbseq/tbpile.nf | 53 +++++++++++++++++++ modules/local/mtbseq/tbrefine.nf | 53 +++++++++++++++++++ modules/local/mtbseq/tbstats.nf | 50 ++++++++++++++++++ modules/local/mtbseq/tbstrains.nf | 57 ++++++++++++++++++++ modules/local/mtbseq/tbvariants.nf | 59 +++++++++++++++++++++ 11 files changed, 671 insertions(+) create mode 100644 modules/local/mtbseq/tbamend.nf create mode 100644 modules/local/mtbseq/tbbwa.nf create mode 100644 modules/local/mtbseq/tbfull.nf create mode 100644 modules/local/mtbseq/tbgroups.nf create mode 100644 modules/local/mtbseq/tbjoin.nf create mode 100644 modules/local/mtbseq/tblist.nf create mode 100644 modules/local/mtbseq/tbpile.nf create mode 100644 modules/local/mtbseq/tbrefine.nf create mode 100644 modules/local/mtbseq/tbstats.nf create mode 100644 modules/local/mtbseq/tbstrains.nf create mode 100644 modules/local/mtbseq/tbvariants.nf diff --git a/modules/local/mtbseq/tbamend.nf b/modules/local/mtbseq/tbamend.nf new file mode 100644 index 0000000..856aac6 --- /dev/null +++ b/modules/local/mtbseq/tbamend.nf @@ -0,0 +1,70 @@ +process TBAMEND { + tag "cohort" + label 'process_single' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + path("Joint/*") + path(samplesheet_tsv) + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Amend/*"), emit: samples_amended + + script: + + def args = task.ext.args ?: "--project ${params.project} --mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq} --unambig ${params.unambig} --window ${params.window} --distance ${params.distance}" + + """ + mkdir Amend + + ${params.mtbseq_path} --step TBamend \\ + --threads ${task.cpus} \\ + --samples ${samplesheet_tsv} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo " ${params.mtbseq_path} --step TBamend \ + --threads ${task.cpus} \ + --samples ${samplesheet_tsv} \ + --project ${params.project} \ + --mincovf ${params.mincovf} \ + --mincovr ${params.mincovr} \ + --minphred ${params.minphred} \ + --minfreq ${params.minfreq} \ + --unambig ${params.unambig} \ + --window ${params.window} \ + --distance ${params.distance} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration} " + + + mkdir Amend + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended.tab + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended_u95_phylo.tab + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended_u95_phylo.fasta + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended_u95_phylo.plainIDs.fasta + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended_u95_phylo_w12.tab + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended_u95_phylo_w12.fasta + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended_u95_phylo_w12.plainIDs.fasta + touch Amend/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5_amended_u95_phylo_w12_removed.tab + + """ + +} diff --git a/modules/local/mtbseq/tbbwa.nf b/modules/local/mtbseq/tbbwa.nf new file mode 100644 index 0000000..6ebd542 --- /dev/null +++ b/modules/local/mtbseq/tbbwa.nf @@ -0,0 +1,59 @@ +process TBBWA { + tag "${meta.id}" + label 'process_medium' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + tuple val(meta), path("${meta.id}_${params.library_name}_R?.fastq.gz") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Bam/${meta.id}_${params.library_name}*.{bam,bai,bamlog}") + tuple val(meta), path("Bam/${meta.id}_${params.library_name}*.{bam,bai}"), emit: bam_tuple + path("Bam/${meta.id}_${params.library_name}*.bam"), emit: bam + + script: + + """ + mkdir Bam + + ${params.mtbseq_path} --step TBbwa \\ + --threads ${task.cpus} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + + """ + echo " ${params.mtbseq_path} --step TBbwa \ + --threads ${task.cpus} \ + --project ${params.project} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration} " + + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + touch ${task.process}_${meta.id}_out.log + touch ${task.process}_${meta.id}_err.log + + mkdir Bam + touch Bam/${meta.id}_${params.library_name}.bam + touch Bam/${meta.id}_${params.library_name}.bai + touch Bam/${meta.id}_${params.library_name}.bamlog + + """ + +} + diff --git a/modules/local/mtbseq/tbfull.nf b/modules/local/mtbseq/tbfull.nf new file mode 100644 index 0000000..fbee46f --- /dev/null +++ b/modules/local/mtbseq/tbfull.nf @@ -0,0 +1,84 @@ +process TBFULL { + tag "cohort" + label 'process_max' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + path("*") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Called") + path("Position_Tables") + path("Classification") + path("Statistics") + path("Called/*_${params.library_name}*gatk_position_variants*.tab"), emit: position_variants + path("Position_Tables/*_${params.library_name}*.gatk_position_table.tab"), emit: position_tables + + script: + def args = task.ext.args ?: " --minbqual ${params.minbqual} --mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq} --resilist ${ref_resistance_list} --unambig ${params.unambig} --window ${params.window} --distance ${params.distance}" + + """ + + ${params.mtbseq_path} --step TBfull \\ + --thread ${task.cpus} \\ + --project ${params.project} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo " ${params.mtbseq_path} --step TBfull \ + --thread ${task.cpus} \ + --project ${params.project} \ + --minbqual ${params.minbqual} \ + --mincovf ${params.mincovf} \ + --mincovr ${params.mincovr} \ + --minphred ${params.minphred} \ + --minfreq ${params.minfreq} \ + --unambig ${params.unambig} \ + --window ${params.window} \ + --distance ${params.distance} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration} " + + + mkdir GATK_Bam + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bam + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bai + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bamlog + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.grp + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.intervals + mkdir Bam + mkdir Bam/${meta.id} + touch Bam/${meta.id}_${params.library_name}.bam + touch Bam/${meta.id}_${params.library_name}.bai + touch Bam/${meta.id}_${params.library_name}.bamlog + mkdir Called + touch Called/${meta.id}_${params.library_name}.gatk_position_uncovered_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + touch Called/${meta.id}_${params.library_name}.gatk_position_variants_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + mkdir Mpileup + touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileup + touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileuplog + mkdir Classification + touch Classification/Strain_Classification.tab + mkdir Position_Tables + touch Position_Tables/${meta.id}_${params.library_name}.gatk_position_table.tab + mkdir Statistics + touch Statistics/Mapping_and_Variant_Statistics.tab + + """ + +} diff --git a/modules/local/mtbseq/tbgroups.nf b/modules/local/mtbseq/tbgroups.nf new file mode 100644 index 0000000..f3a9b8c --- /dev/null +++ b/modules/local/mtbseq/tbgroups.nf @@ -0,0 +1,64 @@ +process TBGROUPS { + tag "cohort" + label 'process_single' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + path("Amend/*") + path(samplesheet_tsv) + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Groups/*") + path "versions.yml", emit: versions + + + + + script: + def args = task.ext.args ?: "--distance ${params.distance}" + """ + mkdir Groups + + ${params.mtbseq_path} --step TBgroups \\ + --threads ${task.cpus} \\ + --samples ${samplesheet_tsv} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + MTBseq: \$(${params.mtbseq_path} --version | cut -d " " -f 2) + END_VERSIONS + """ + + stub: + """ + echo "${params.mtbseq_path} --step TBgroups \ + --threads ${task.cpus} \ + --samples ${samplesheet_tsv} \ + --project ${params.project} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --distance ${params.distance} \ + --basecalib ${ref_base_quality_recalibration}" + + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + mkdir Groups + touch Groups/${params.project}_joint_cf4_cr4_fr75_ph4_samples5_amended_u95_phylo_w12.matrix + touch Groups/${params.project}_joint_cf4_cr4_fr75_ph4_samples35_amended_u95_phylo_w12_d12.groups + + """ +} diff --git a/modules/local/mtbseq/tbjoin.nf b/modules/local/mtbseq/tbjoin.nf new file mode 100644 index 0000000..c00c924 --- /dev/null +++ b/modules/local/mtbseq/tbjoin.nf @@ -0,0 +1,62 @@ +process TBJOIN { + tag "cohort" + label 'process_high_memory' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + path("Called/*") + path("Position_Tables/*") + path(samplesheet_tsv) + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Joint/${params.project}_joint*samples*.{tab,log}") + path("Joint/${params.project}_joint*samples*.tab"), emit: joint_samples + + script: + def args = task.ext.args ?: " --project ${params.project} --mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq} --distance ${params.distance}" + """ + mkdir Joint + + ${params.mtbseq_path} --step TBjoin \\ + --threads ${task.cpus} \\ + --samples ${samplesheet_tsv} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "${params.mtbseq_path} --step TBjoin \ + --threads ${task.cpus} \ + --samples ${samplesheet_tsv} \ + --project ${params.project} \ + --mincovf ${params.mincovf} \ + --mincovr ${params.mincovr} \ + --minphred ${params.minphred} \ + --minfreq ${params.minfreq} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + mkdir Joint + touch Joint/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5.tab + touch Joint/${params.project}_joint_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_samples5.log + + """ + +} diff --git a/modules/local/mtbseq/tblist.nf b/modules/local/mtbseq/tblist.nf new file mode 100644 index 0000000..7dcfea1 --- /dev/null +++ b/modules/local/mtbseq/tblist.nf @@ -0,0 +1,60 @@ +process TBLIST { + tag "${meta.id}" + label 'process_single_high_memory' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + tuple val(meta), path("Mpileup/${meta.id}_${params.library_name}*.gatk.mpileup") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Position_Tables/${meta.id}_${params.library_name}*.gatk_position_table.tab"), emit: tbjoin_input + tuple val(meta), path("Position_Tables/${meta.id}_${params.library_name}*.gatk_position_table.tab"), emit: position_table_tuple + path("Position_Tables/${meta.id}_${params.library_name}*.gatk_position_table.tab"), emit: position_table + + script: + def args = task.ext.args ?: "--minbqual ${params.minbqual}" + """ + mkdir Position_Tables + + ${params.mtbseq_path} --step TBlist \\ + --threads ${task.cpus} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "${params.mtbseq_path} --step TBlist \ + --threads ${task.cpus} \ + --project ${params.project} \ + --minbqual ${params.minbqual} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + touch ${task.process}_${meta.id}_out.log + touch ${task.process}_${meta.id}_err.log + + mkdir Position_Tables + touch Position_Tables/${meta.id}_${params.library_name}.gatk_position_table.tab + + """ + +} diff --git a/modules/local/mtbseq/tbpile.nf b/modules/local/mtbseq/tbpile.nf new file mode 100644 index 0000000..395162d --- /dev/null +++ b/modules/local/mtbseq/tbpile.nf @@ -0,0 +1,53 @@ +process TBPILE { + tag "${meta.id}" + label 'process_single' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + stageInMode 'copy' + + input: + tuple val(meta), path("GATK_Bam/*") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Mpileup/${meta.id}_${params.library_name}*.gatk.{mpileup,mpileuplog}") + tuple val(meta), path("Mpileup/${meta.id}_${params.library_name}*.gatk.mpileup"), emit: mpileup + + script: + + """ + mkdir Mpileup + + ${params.mtbseq_path} --step TBpile \\ + --threads ${task.cpus} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + echo "${params.mtbseq_path} --step TBpile \ + --threads ${task.cpus} \ + --project ${params.project} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + mkdir Mpileup + touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileup + touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileuplog + + """ + +} diff --git a/modules/local/mtbseq/tbrefine.nf b/modules/local/mtbseq/tbrefine.nf new file mode 100644 index 0000000..0cdd889 --- /dev/null +++ b/modules/local/mtbseq/tbrefine.nf @@ -0,0 +1,53 @@ +process TBREFINE { + tag "${meta.id}" + label 'process_medium' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + tuple val(meta), path("Bam/") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + tuple val(meta), path("GATK_Bam/${meta.id}_${params.library_name}*gatk.{bam,bai,bamlog,grp,intervals}"), emit: gatk_bam + + script: + + """ + mkdir GATK_Bam + + ${params.mtbseq_path} --step TBrefine \\ + --threads ${task.cpus} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo " ${params.mtbseq_path} --step TBrefine \ + --threads ${task.cpus} \ + --project ${params.project} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + mkdir GATK_Bam + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bam + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bai + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bamlog + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.grp + touch GATK_Bam/${meta.id}_${params.library_name}.gatk.intervals + """ +} diff --git a/modules/local/mtbseq/tbstats.nf b/modules/local/mtbseq/tbstats.nf new file mode 100644 index 0000000..e7332d5 --- /dev/null +++ b/modules/local/mtbseq/tbstats.nf @@ -0,0 +1,50 @@ +process TBSTATS { + tag "cohort" + label 'process_single_high_memory' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + path("Bam/*") + path("Position_Tables/*") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Statistics/Mapping_and_Variant_Statistics.tab") + + script: + + """ + mkdir Statistics + + ${params.mtbseq_path} --step TBstats \\ + --threads ${task.cpus} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "${params.mtbseq_path} --step TBstats \ + --threads ${task.cpus} \ + --project ${params.project} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + mkdir Statistics + touch Statistics/Mapping_and_Variant_Statistics.tab + """ + +} diff --git a/modules/local/mtbseq/tbstrains.nf b/modules/local/mtbseq/tbstrains.nf new file mode 100644 index 0000000..d57fae9 --- /dev/null +++ b/modules/local/mtbseq/tbstrains.nf @@ -0,0 +1,57 @@ +process TBSTRAINS { + tag "cohort" + label 'process_single' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + path("Position_Tables/*") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Classification/Strain_Classification.tab") + + script: + def args = task.ext.args ?: "--mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq}" + + """ + mkdir Classification + + ${params.mtbseq_path} --step TBstrains \\ + --threads ${task.cpus} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "${params.mtbseq_path} --step TBstrains \ + --threads ${task.cpus} \ + --project ${params.project} \ + --mincovf ${params.mincovf} \ + --mincovr ${params.mincovr} \ + --minphred ${params.minphred} \ + --minfreq ${params.minfreq} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + mkdir Classification + touch Classification/Strain_Classification.tab + + """ + +} diff --git a/modules/local/mtbseq/tbvariants.nf b/modules/local/mtbseq/tbvariants.nf new file mode 100644 index 0000000..ac9433c --- /dev/null +++ b/modules/local/mtbseq/tbvariants.nf @@ -0,0 +1,59 @@ +process TBVARIANTS { + tag "${meta.id}" + label 'process_single' + publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + input: + tuple val(meta), path("Position_Tables/*") + env(USER) + tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) + + output: + path("Called/${meta.id}_${params.library_name}*gatk_position_{uncovered,variants}*.tab") + path("Called/${meta.id}_${params.library_name}*gatk_position_variants*.tab"), emit: tbjoin_input + + script: + def args = task.ext.args ?: "--mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq}" + + """ + mkdir Called + + ${params.mtbseq_path} --step TBvariants \\ + --threads ${task.cpus} \\ + --project ${params.project} \\ + --resilist ${ref_resistance_list} \\ + --intregions ${ref_interesting_regions} \\ + --categories ${ref_gene_categories} \\ + --basecalib ${ref_base_quality_recalibration} \\ + ${args} \\ + 1>>.command.out \\ + 2>>.command.err \\ + || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + """ + + stub: + + """ + sleep \$[ ( \$RANDOM % 10 ) + 1 ]s + + echo "${params.mtbseq_path} --step TBvariants \ + --threads ${task.cpus} \ + --project ${params.project} \ + --mincovf ${params.mincovf} \ + --mincovr ${params.mincovr} \ + --minphred ${params.minphred} \ + --minfreq ${params.minfreq} \ + --resilist ${ref_resistance_list} \ + --intregions ${ref_interesting_regions} \ + --categories ${ref_gene_categories} \ + --basecalib ${ref_base_quality_recalibration}" + + + mkdir Called + touch Called/${meta.id}_${params.library_name}.gatk_position_uncovered_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + touch Called/${meta.id}_${params.library_name}.gatk_position_variants_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + + """ + +} From e88a06df824734694d1fd3825b8696191eb3ca7d Mon Sep 17 00:00:00 2001 From: "Davi Marcon (@Mxrcon)" Date: Mon, 28 Oct 2024 09:48:04 -0300 Subject: [PATCH 03/39] import MTBseq-NF workflows [ci skip] --- subworkflows/local/mtbseq/cohort_analysis.nf | 44 ++++++++++++ subworkflows/local/mtbseq/normal_analysis.nf | 54 +++++++++++++++ .../local/mtbseq/parallel_analysis.nf | 32 +++++++++ .../local/mtbseq/per_sample_analysis.nf | 36 ++++++++++ workflows/mtbseqnf.nf | 67 +++++++++++++++++++ 5 files changed, 233 insertions(+) create mode 100644 subworkflows/local/mtbseq/cohort_analysis.nf create mode 100644 subworkflows/local/mtbseq/normal_analysis.nf create mode 100644 subworkflows/local/mtbseq/parallel_analysis.nf create mode 100644 subworkflows/local/mtbseq/per_sample_analysis.nf create mode 100644 workflows/mtbseqnf.nf diff --git a/subworkflows/local/mtbseq/cohort_analysis.nf b/subworkflows/local/mtbseq/cohort_analysis.nf new file mode 100644 index 0000000..cf5ea8f --- /dev/null +++ b/subworkflows/local/mtbseq/cohort_analysis.nf @@ -0,0 +1,44 @@ +include { TBJOIN } from '../../../modules/mtbseq/tbjoin.nf' addParams (params.TBJOIN) +include { TBAMEND } from '../../../modules/mtbseq/tbamend.nf' addParams (params.TBAMEND) +include { TBGROUPS } from '../../../modules/mtbseq/tbgroups.nf' addParams (params.TBGROUPS) + +workflow COHORT_ANALYSIS { + take: + genome_names + position_variants + position_tables + references_ch + + main: + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + samples_tsv_file = genome_names + .collect() + .flatten().map { n -> "$n" + "\t" + "${params.library_name}" + "\n" } + .collectFile(name: params.cohort_tsv, newLine: false, storeDir: "${params.outdir}", cache: false) + + TBJOIN(position_variants.collect(), + position_tables.collect(), + samples_tsv_file, + params.user, + references_ch) + + TBAMEND(TBJOIN.out.joint_samples, + samples_tsv_file, + params.user, + references_ch) + + TBGROUPS(TBAMEND.out.samples_amended, + samples_tsv_file, + params.user, + references_ch) + ch_versions = ch_versions.mix(TBGROUPS.out.versions) + + + + emit: + versions = ch_versions + ch_multiqc_files = ch_multiqc_files + +} diff --git a/subworkflows/local/mtbseq/normal_analysis.nf b/subworkflows/local/mtbseq/normal_analysis.nf new file mode 100644 index 0000000..c58a8c3 --- /dev/null +++ b/subworkflows/local/mtbseq/normal_analysis.nf @@ -0,0 +1,54 @@ +include { RENAME_FILES } from '../../../modules/utils/rename_files.nf' addParams (params.RENAME_FILES) +include { TBFULL } from '../../../modules/mtbseq/tbfull.nf' addParams (params.TBFULL) +include { TBJOIN } from '../../../modules/mtbseq/tbjoin.nf' addParams (params.TBJOIN) +include { TBAMEND } from '../../../modules/mtbseq/tbamend.nf' addParams (params.TBAMEND) +include { TBGROUPS } from '../../../modules/mtbseq/tbgroups.nf' addParams (params.TBGROUPS) + +workflow NORMAL_ANALYSIS { + + take: + reads_ch + references_ch + + main: + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + samples_tsv_file = reads_ch + .map {it -> it[0].id} + .collect() + .flatten() + .map { n -> "$n" + "\t" + "${params.library_name}" + "\n" } + .collectFile(name: params.cohort_tsv, newLine: false, storeDir: "${params.outdir}", cache: false) + + RENAME_FILES(reads_ch) + + //NOTE: Requires atleast 5_CPU/16_MEM + TBFULL(RENAME_FILES.out.collect(), + params.user, + references_ch) + + TBJOIN(TBFULL.out.position_variants.collect(), + TBFULL.out.position_tables.collect(), + samples_tsv_file, + params.user, + references_ch) + + TBAMEND(TBJOIN.out.joint_samples, + samples_tsv_file, + params.user, + references_ch) + + TBGROUPS(TBAMEND.out.samples_amended, + samples_tsv_file, + params.user, + references_ch) + ch_versions = ch_versions.mix(TBGROUPS.out.versions) + + + emit: + versions = ch_versions + multiqc_files = ch_multiqc_files + + +} diff --git a/subworkflows/local/mtbseq/parallel_analysis.nf b/subworkflows/local/mtbseq/parallel_analysis.nf new file mode 100644 index 0000000..001b716 --- /dev/null +++ b/subworkflows/local/mtbseq/parallel_analysis.nf @@ -0,0 +1,32 @@ +include { COHORT_ANALYSIS } from "./cohort_analysis.nf" +include { PER_SAMPLE_ANALYSIS } from "./per_sample_analysis.nf" + +workflow PARALLEL_ANALYSIS { + take: + reads_ch + references_ch + + main: + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + PER_SAMPLE_ANALYSIS(reads_ch, references_ch) + + COHORT_ANALYSIS(PER_SAMPLE_ANALYSIS.out.genome_names, + PER_SAMPLE_ANALYSIS.out.position_variants, + PER_SAMPLE_ANALYSIS.out.position_tables, + references_ch) + ch_versions = ch_versions.mix(COHORT_ANALYSIS.out.versions) + + fn: "Strain_Classification.tsv" + + fn: "Mapping_and_Variant_Statistics.tsv" + + fn: "ClusterGroups.tsv" + + fn: "distance_matrix.txt" + + emit: + versions = ch_versions + multiqc_files = ch_multiqc_files +} diff --git a/subworkflows/local/mtbseq/per_sample_analysis.nf b/subworkflows/local/mtbseq/per_sample_analysis.nf new file mode 100644 index 0000000..8fc3ed8 --- /dev/null +++ b/subworkflows/local/mtbseq/per_sample_analysis.nf @@ -0,0 +1,36 @@ +include { TBBWA } from '../../../modules/mtbseq/tbbwa.nf' addParams (params.TBBWA) +include { TBREFINE } from '../../../modules/mtbseq/tbrefine.nf' addParams (params.TBREFINE) +include { TBPILE } from '../../../modules/mtbseq/tbpile.nf' addParams (params.TBPILE) +include { TBLIST } from '../../../modules/mtbseq/tblist.nf' addParams (params.TBLIST) +include { TBVARIANTS } from '../../../modules/mtbseq/tbvariants.nf' addParams (params.TBVARIANTS) +include { TBSTATS } from '../../../modules/mtbseq/tbstats.nf' addParams (params.TBSTATS) +include { TBSTRAINS } from '../../../modules/mtbseq/tbstrains.nf' addParams (params.TBSTRAINS) + +workflow PER_SAMPLE_ANALYSIS { + take: + reads_ch + references_ch + + main: + TBBWA(reads_ch, params.user, references_ch) + TBREFINE(TBBWA.out.bam_tuple, params.user, references_ch) + TBPILE(TBREFINE.out.gatk_bam, params.user, references_ch) + TBLIST(TBPILE.out.mpileup, params.user, references_ch) + TBVARIANTS(TBLIST.out.position_table_tuple, params.user, references_ch) + + // NOTE: These are part of per-sample-analysis but they need the output from + // all other processes to compute the metrics for the cohort. + TBSTATS(TBBWA.out.bam.collect(), + TBLIST.out.position_table.collect(), + params.user, + references_ch) + + TBSTRAINS(TBLIST.out.position_table.collect(), + params.user, + references_ch) + + emit: + genome_names = reads_ch.map{ it -> it[0].id} + position_variants = TBVARIANTS.out.tbjoin_input.collect() + position_tables = TBLIST.out.tbjoin_input.collect() +} diff --git a/workflows/mtbseqnf.nf b/workflows/mtbseqnf.nf new file mode 100644 index 0000000..1e19914 --- /dev/null +++ b/workflows/mtbseqnf.nf @@ -0,0 +1,67 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { QC } from '../subworkflows/local/qc' +include { REPORT } from '../subworkflows/local/report' +include { PARALLEL_ANALYSIS } from "../subworkflows/local/mtbseq-nf-modes/parallel_analysis.nf" +include { NORMAL_ANALYSIS } from "../subworkflows/local/mtbseq-nf-modes/normal_analysis.nf" +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + RUN MAIN WORKFLOW +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +workflow MTBSEQ_NF { + + take: + ch_samplesheet // channel: samplesheet read in from --input + + main: + + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + QC(ch_samplesheet) + ch_versions.mix(QC.out.ch_versions) + ch_multiqc_files.mix(QC.out.ch_multiqc_files) + + // MTBSEQ run modes + if( params.parallel && !params.only_qc ) { + + PARALLEL_ANALYSIS(ch_samplesheet, + [params.resilist, + params.intregions, + params.categories, + params.basecalib]) + + ch_versions = ch_versions.mix(PARALLEL_ANALYSIS.out.versions) + + } else { + + //NOTE: Defaults to the normal analysis as implemented in MTBseq + NORMAL_ANALYSIS(ch_samplesheet, + [params.resilist, + params.intregions, + params.categories, + params.basecalib]) + + ch_versions = ch_versions.mix(NORMAL_ANALYSIS.out.versions) + + } + /// END MTBSEQ ANALYSIS + + REPORT (ch_multiqc_files, ch_versions) + multiqc_report = REPORT.out.multiqc_report + + emit: + multiqc_report +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + THE END +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ From c58633187f8fa3258cdcba8eeb8857569254651d Mon Sep 17 00:00:00 2001 From: "Davi Marcon (@Mxrcon)" Date: Mon, 28 Oct 2024 09:57:13 -0300 Subject: [PATCH 04/39] update mtbseq-nf to the newest version [ci skip] --- modules/local/mtbseq/tbamend.nf | 8 +- modules/local/mtbseq/tbbwa.nf | 25 +-- modules/local/mtbseq/tbfull.nf | 55 ++++--- modules/local/mtbseq/tbgroups.nf | 12 +- modules/local/mtbseq/tbjoin.nf | 10 +- modules/local/mtbseq/tblist.nf | 18 ++- modules/local/mtbseq/tbpile.nf | 17 +- modules/local/mtbseq/tbrefine.nf | 20 ++- modules/local/mtbseq/tbstats.nf | 11 +- modules/local/mtbseq/tbstrains.nf | 10 +- modules/local/mtbseq/tbvariants.nf | 16 +- subworkflows/local/mtbseq/cohort_analysis.nf | 44 ----- subworkflows/local/mtbseq/normal_analysis.nf | 54 ------- .../local/mtbseq/parallel_analysis.nf | 32 ---- subworkflows/local/mtbseq/parallel_mode.nf | 70 ++++++++ .../local/mtbseq/per_sample_analysis.nf | 36 ----- workflows/mtbseqnf.nf | 152 +++++++++++++++--- 17 files changed, 341 insertions(+), 249 deletions(-) delete mode 100644 subworkflows/local/mtbseq/cohort_analysis.nf delete mode 100644 subworkflows/local/mtbseq/normal_analysis.nf delete mode 100644 subworkflows/local/mtbseq/parallel_analysis.nf create mode 100644 subworkflows/local/mtbseq/parallel_mode.nf delete mode 100644 subworkflows/local/mtbseq/per_sample_analysis.nf diff --git a/modules/local/mtbseq/tbamend.nf b/modules/local/mtbseq/tbamend.nf index 856aac6..ae5bf81 100644 --- a/modules/local/mtbseq/tbamend.nf +++ b/modules/local/mtbseq/tbamend.nf @@ -1,7 +1,13 @@ process TBAMEND { tag "cohort" label 'process_single' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" input: path("Joint/*") diff --git a/modules/local/mtbseq/tbbwa.nf b/modules/local/mtbseq/tbbwa.nf index 6ebd542..7c6e1da 100644 --- a/modules/local/mtbseq/tbbwa.nf +++ b/modules/local/mtbseq/tbbwa.nf @@ -1,17 +1,25 @@ process TBBWA { tag "${meta.id}" label 'process_medium' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + input: - tuple val(meta), path("${meta.id}_${params.library_name}_R?.fastq.gz") + tuple val(meta), path("${meta.id}_${meta.library}_R?.fastq.gz") env(USER) tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) output: - path("Bam/${meta.id}_${params.library_name}*.{bam,bai,bamlog}") - tuple val(meta), path("Bam/${meta.id}_${params.library_name}*.{bam,bai}"), emit: bam_tuple - path("Bam/${meta.id}_${params.library_name}*.bam"), emit: bam + path("Bam/${meta.id}_${meta.library}*.{bam,bai,bamlog}") + tuple val(meta), path("Bam/${meta.id}_${meta.library}*.{bam,bai}"), emit: bam_tuple + path("Bam/${meta.id}_${meta.library}*.bam"), emit: bam script: @@ -49,11 +57,10 @@ process TBBWA { touch ${task.process}_${meta.id}_err.log mkdir Bam - touch Bam/${meta.id}_${params.library_name}.bam - touch Bam/${meta.id}_${params.library_name}.bai - touch Bam/${meta.id}_${params.library_name}.bamlog + touch Bam/${meta.id}_${meta.library}.bam + touch Bam/${meta.id}_${meta.library}.bai + touch Bam/${meta.id}_${meta.library}.bamlog """ } - diff --git a/modules/local/mtbseq/tbfull.nf b/modules/local/mtbseq/tbfull.nf index fbee46f..6c4a8bb 100644 --- a/modules/local/mtbseq/tbfull.nf +++ b/modules/local/mtbseq/tbfull.nf @@ -1,7 +1,17 @@ process TBFULL { tag "cohort" - label 'process_max' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + label 'process_tbfull' + label 'error_retry' + + + conda "bioconda::mtbseq=1.1.0" + + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + input: path("*") @@ -13,8 +23,11 @@ process TBFULL { path("Position_Tables") path("Classification") path("Statistics") - path("Called/*_${params.library_name}*gatk_position_variants*.tab"), emit: position_variants - path("Position_Tables/*_${params.library_name}*.gatk_position_table.tab"), emit: position_tables + path("Statistics/Mapping_and_Variant_Statistics.tab"), emit: statistics + path("Classification/Strain_Classification.tab"), emit: classification + path("Called/*gatk_position_variants*.tab"), emit: position_variants + path("Position_Tables/*.gatk_position_table.tab"), emit: position_tables + path "versions.yml", emit: versions script: def args = task.ext.args ?: " --minbqual ${params.minbqual} --mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq} --resilist ${ref_resistance_list} --unambig ${params.unambig} --window ${params.window} --distance ${params.distance}" @@ -32,6 +45,13 @@ process TBFULL { 2>>.command.err \\ || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + MTBseq: \$(${params.mtbseq_path} --version | cut -d " " -f 2) + END_VERSIONS + """ stub: @@ -56,26 +76,25 @@ process TBFULL { mkdir GATK_Bam - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bam - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bai - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bamlog - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.grp - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.intervals + touch GATK_Bam/stub.gatk.bam + touch GATK_Bam/stub.gatk.bai + touch GATK_Bam/stub.gatk.bamlog + touch GATK_Bam/stub.gatk.grp + touch GATK_Bam/stub.gatk.intervals mkdir Bam - mkdir Bam/${meta.id} - touch Bam/${meta.id}_${params.library_name}.bam - touch Bam/${meta.id}_${params.library_name}.bai - touch Bam/${meta.id}_${params.library_name}.bamlog + touch Bam/stub.bam + touch Bam/stub.bai + touch Bam/stub.bamlog mkdir Called - touch Called/${meta.id}_${params.library_name}.gatk_position_uncovered_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab - touch Called/${meta.id}_${params.library_name}.gatk_position_variants_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + touch Called/stub.gatk_position_uncovered_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + touch Called/stub.gatk_position_variants_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab mkdir Mpileup - touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileup - touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileuplog + touch Mpileup/stub.gatk.mpileup + touch Mpileup/stub.gatk.mpileuplog mkdir Classification touch Classification/Strain_Classification.tab mkdir Position_Tables - touch Position_Tables/${meta.id}_${params.library_name}.gatk_position_table.tab + touch Position_Tables/stub.gatk_position_table.tab mkdir Statistics touch Statistics/Mapping_and_Variant_Statistics.tab diff --git a/modules/local/mtbseq/tbgroups.nf b/modules/local/mtbseq/tbgroups.nf index f3a9b8c..64a6574 100644 --- a/modules/local/mtbseq/tbgroups.nf +++ b/modules/local/mtbseq/tbgroups.nf @@ -1,7 +1,13 @@ process TBGROUPS { tag "cohort" label 'process_single' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + input: path("Amend/*") @@ -11,6 +17,8 @@ process TBGROUPS { output: path("Groups/*") + path("Groups/*.matrix"), emit: distance_matrix + path("Groups/*.groups"), emit: groups path "versions.yml", emit: versions @@ -35,7 +43,7 @@ process TBGROUPS { || true # NOTE This is a hack to overcome the exit status 1 thrown by mtbseq - + cat <<-END_VERSIONS > versions.yml "${task.process}": MTBseq: \$(${params.mtbseq_path} --version | cut -d " " -f 2) diff --git a/modules/local/mtbseq/tbjoin.nf b/modules/local/mtbseq/tbjoin.nf index c00c924..61b0282 100644 --- a/modules/local/mtbseq/tbjoin.nf +++ b/modules/local/mtbseq/tbjoin.nf @@ -1,7 +1,15 @@ process TBJOIN { tag "cohort" label 'process_high_memory' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + input: path("Called/*") diff --git a/modules/local/mtbseq/tblist.nf b/modules/local/mtbseq/tblist.nf index 7dcfea1..98a1c97 100644 --- a/modules/local/mtbseq/tblist.nf +++ b/modules/local/mtbseq/tblist.nf @@ -1,17 +1,23 @@ process TBLIST { tag "${meta.id}" label 'process_single_high_memory' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + input: - tuple val(meta), path("Mpileup/${meta.id}_${params.library_name}*.gatk.mpileup") + tuple val(meta), path("Mpileup/${meta.id}_${meta.library}*.gatk.mpileup") env(USER) tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) output: - path("Position_Tables/${meta.id}_${params.library_name}*.gatk_position_table.tab"), emit: tbjoin_input - tuple val(meta), path("Position_Tables/${meta.id}_${params.library_name}*.gatk_position_table.tab"), emit: position_table_tuple - path("Position_Tables/${meta.id}_${params.library_name}*.gatk_position_table.tab"), emit: position_table + path("Position_Tables/${meta.id}_${meta.library}*.gatk_position_table.tab"), emit: tbjoin_input + tuple val(meta), path("Position_Tables/${meta.id}_${meta.library}*.gatk_position_table.tab"), emit: position_table_tuple + path("Position_Tables/${meta.id}_${meta.library}*.gatk_position_table.tab"), emit: position_table script: def args = task.ext.args ?: "--minbqual ${params.minbqual}" @@ -53,7 +59,7 @@ process TBLIST { touch ${task.process}_${meta.id}_err.log mkdir Position_Tables - touch Position_Tables/${meta.id}_${params.library_name}.gatk_position_table.tab + touch Position_Tables/${meta.id}_${meta.library}.gatk_position_table.tab """ diff --git a/modules/local/mtbseq/tbpile.nf b/modules/local/mtbseq/tbpile.nf index 395162d..57a7c44 100644 --- a/modules/local/mtbseq/tbpile.nf +++ b/modules/local/mtbseq/tbpile.nf @@ -1,17 +1,24 @@ process TBPILE { tag "${meta.id}" label 'process_single' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish stageInMode 'copy' + conda "bioconda::mtbseq=1.1.0" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + + input: tuple val(meta), path("GATK_Bam/*") env(USER) tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) output: - path("Mpileup/${meta.id}_${params.library_name}*.gatk.{mpileup,mpileuplog}") - tuple val(meta), path("Mpileup/${meta.id}_${params.library_name}*.gatk.mpileup"), emit: mpileup + path("Mpileup/${meta.id}_${meta.library}*.gatk.{mpileup,mpileuplog}") + tuple val(meta), path("Mpileup/${meta.id}_${meta.library}*.gatk.mpileup"), emit: mpileup script: @@ -45,8 +52,8 @@ process TBPILE { sleep \$[ ( \$RANDOM % 10 ) + 1 ]s mkdir Mpileup - touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileup - touch Mpileup/${meta.id}_${params.library_name}.gatk.mpileuplog + touch Mpileup/${meta.id}_${meta.library}.gatk.mpileup + touch Mpileup/${meta.id}_${meta.library}.gatk.mpileuplog """ diff --git a/modules/local/mtbseq/tbrefine.nf b/modules/local/mtbseq/tbrefine.nf index 0cdd889..7d4b998 100644 --- a/modules/local/mtbseq/tbrefine.nf +++ b/modules/local/mtbseq/tbrefine.nf @@ -1,7 +1,13 @@ process TBREFINE { tag "${meta.id}" label 'process_medium' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + input: tuple val(meta), path("Bam/") @@ -9,7 +15,7 @@ process TBREFINE { tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) output: - tuple val(meta), path("GATK_Bam/${meta.id}_${params.library_name}*gatk.{bam,bai,bamlog,grp,intervals}"), emit: gatk_bam + tuple val(meta), path("GATK_Bam/${meta.id}_${meta.library}*gatk.{bam,bai,bamlog,grp,intervals}"), emit: gatk_bam script: @@ -44,10 +50,10 @@ process TBREFINE { mkdir GATK_Bam - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bam - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bai - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.bamlog - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.grp - touch GATK_Bam/${meta.id}_${params.library_name}.gatk.intervals + touch GATK_Bam/${meta.id}_${meta.library}.gatk.bam + touch GATK_Bam/${meta.id}_${meta.library}.gatk.bai + touch GATK_Bam/${meta.id}_${meta.library}.gatk.bamlog + touch GATK_Bam/${meta.id}_${meta.library}.gatk.grp + touch GATK_Bam/${meta.id}_${meta.library}.gatk.intervals """ } diff --git a/modules/local/mtbseq/tbstats.nf b/modules/local/mtbseq/tbstats.nf index e7332d5..0b54ee1 100644 --- a/modules/local/mtbseq/tbstats.nf +++ b/modules/local/mtbseq/tbstats.nf @@ -1,7 +1,14 @@ process TBSTATS { tag "cohort" label 'process_single_high_memory' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + + input: path("Bam/*") @@ -10,7 +17,7 @@ process TBSTATS { tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) output: - path("Statistics/Mapping_and_Variant_Statistics.tab") + path("Statistics/Mapping_and_Variant_Statistics.tab"), emit: statistics script: diff --git a/modules/local/mtbseq/tbstrains.nf b/modules/local/mtbseq/tbstrains.nf index d57fae9..28ffa3c 100644 --- a/modules/local/mtbseq/tbstrains.nf +++ b/modules/local/mtbseq/tbstrains.nf @@ -1,7 +1,13 @@ process TBSTRAINS { tag "cohort" label 'process_single' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + input: path("Position_Tables/*") @@ -9,7 +15,7 @@ process TBSTRAINS { tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) output: - path("Classification/Strain_Classification.tab") + path("Classification/Strain_Classification.tab"), emit: classification script: def args = task.ext.args ?: "--mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq}" diff --git a/modules/local/mtbseq/tbvariants.nf b/modules/local/mtbseq/tbvariants.nf index ac9433c..541d4f8 100644 --- a/modules/local/mtbseq/tbvariants.nf +++ b/modules/local/mtbseq/tbvariants.nf @@ -1,7 +1,13 @@ process TBVARIANTS { tag "${meta.id}" label 'process_single' - publishDir params.results_dir, mode: params.save_mode, enabled: params.should_publish + + conda "bioconda::mtbseq=1.1.0" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mtbseq:1.1.0--hdfd78af_0' : + 'biocontainers/mtbseq:1.1.0--hdfd78af_0' }" + input: tuple val(meta), path("Position_Tables/*") @@ -9,8 +15,8 @@ process TBVARIANTS { tuple path(ref_resistance_list), path(ref_interesting_regions), path(ref_gene_categories), path(ref_base_quality_recalibration) output: - path("Called/${meta.id}_${params.library_name}*gatk_position_{uncovered,variants}*.tab") - path("Called/${meta.id}_${params.library_name}*gatk_position_variants*.tab"), emit: tbjoin_input + path("Called/${meta.id}_${meta.library}*gatk_position_{uncovered,variants}*.tab") + path("Called/${meta.id}_${meta.library}*gatk_position_variants*.tab"), emit: tbjoin_input script: def args = task.ext.args ?: "--mincovf ${params.mincovf} --mincovr ${params.mincovr} --minphred ${params.minphred} --minfreq ${params.minfreq}" @@ -51,8 +57,8 @@ process TBVARIANTS { mkdir Called - touch Called/${meta.id}_${params.library_name}.gatk_position_uncovered_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab - touch Called/${meta.id}_${params.library_name}.gatk_position_variants_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + touch Called/${meta.id}_${meta.library}.gatk_position_uncovered_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab + touch Called/${meta.id}_${meta.library}.gatk_position_variants_cf${params.mincovf}_cr${params.mincovr}_fr${params.minfreq}_ph${params.minphred}_outmode000.tab """ diff --git a/subworkflows/local/mtbseq/cohort_analysis.nf b/subworkflows/local/mtbseq/cohort_analysis.nf deleted file mode 100644 index cf5ea8f..0000000 --- a/subworkflows/local/mtbseq/cohort_analysis.nf +++ /dev/null @@ -1,44 +0,0 @@ -include { TBJOIN } from '../../../modules/mtbseq/tbjoin.nf' addParams (params.TBJOIN) -include { TBAMEND } from '../../../modules/mtbseq/tbamend.nf' addParams (params.TBAMEND) -include { TBGROUPS } from '../../../modules/mtbseq/tbgroups.nf' addParams (params.TBGROUPS) - -workflow COHORT_ANALYSIS { - take: - genome_names - position_variants - position_tables - references_ch - - main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() - - samples_tsv_file = genome_names - .collect() - .flatten().map { n -> "$n" + "\t" + "${params.library_name}" + "\n" } - .collectFile(name: params.cohort_tsv, newLine: false, storeDir: "${params.outdir}", cache: false) - - TBJOIN(position_variants.collect(), - position_tables.collect(), - samples_tsv_file, - params.user, - references_ch) - - TBAMEND(TBJOIN.out.joint_samples, - samples_tsv_file, - params.user, - references_ch) - - TBGROUPS(TBAMEND.out.samples_amended, - samples_tsv_file, - params.user, - references_ch) - ch_versions = ch_versions.mix(TBGROUPS.out.versions) - - - - emit: - versions = ch_versions - ch_multiqc_files = ch_multiqc_files - -} diff --git a/subworkflows/local/mtbseq/normal_analysis.nf b/subworkflows/local/mtbseq/normal_analysis.nf deleted file mode 100644 index c58a8c3..0000000 --- a/subworkflows/local/mtbseq/normal_analysis.nf +++ /dev/null @@ -1,54 +0,0 @@ -include { RENAME_FILES } from '../../../modules/utils/rename_files.nf' addParams (params.RENAME_FILES) -include { TBFULL } from '../../../modules/mtbseq/tbfull.nf' addParams (params.TBFULL) -include { TBJOIN } from '../../../modules/mtbseq/tbjoin.nf' addParams (params.TBJOIN) -include { TBAMEND } from '../../../modules/mtbseq/tbamend.nf' addParams (params.TBAMEND) -include { TBGROUPS } from '../../../modules/mtbseq/tbgroups.nf' addParams (params.TBGROUPS) - -workflow NORMAL_ANALYSIS { - - take: - reads_ch - references_ch - - main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() - - samples_tsv_file = reads_ch - .map {it -> it[0].id} - .collect() - .flatten() - .map { n -> "$n" + "\t" + "${params.library_name}" + "\n" } - .collectFile(name: params.cohort_tsv, newLine: false, storeDir: "${params.outdir}", cache: false) - - RENAME_FILES(reads_ch) - - //NOTE: Requires atleast 5_CPU/16_MEM - TBFULL(RENAME_FILES.out.collect(), - params.user, - references_ch) - - TBJOIN(TBFULL.out.position_variants.collect(), - TBFULL.out.position_tables.collect(), - samples_tsv_file, - params.user, - references_ch) - - TBAMEND(TBJOIN.out.joint_samples, - samples_tsv_file, - params.user, - references_ch) - - TBGROUPS(TBAMEND.out.samples_amended, - samples_tsv_file, - params.user, - references_ch) - ch_versions = ch_versions.mix(TBGROUPS.out.versions) - - - emit: - versions = ch_versions - multiqc_files = ch_multiqc_files - - -} diff --git a/subworkflows/local/mtbseq/parallel_analysis.nf b/subworkflows/local/mtbseq/parallel_analysis.nf deleted file mode 100644 index 001b716..0000000 --- a/subworkflows/local/mtbseq/parallel_analysis.nf +++ /dev/null @@ -1,32 +0,0 @@ -include { COHORT_ANALYSIS } from "./cohort_analysis.nf" -include { PER_SAMPLE_ANALYSIS } from "./per_sample_analysis.nf" - -workflow PARALLEL_ANALYSIS { - take: - reads_ch - references_ch - - main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() - - PER_SAMPLE_ANALYSIS(reads_ch, references_ch) - - COHORT_ANALYSIS(PER_SAMPLE_ANALYSIS.out.genome_names, - PER_SAMPLE_ANALYSIS.out.position_variants, - PER_SAMPLE_ANALYSIS.out.position_tables, - references_ch) - ch_versions = ch_versions.mix(COHORT_ANALYSIS.out.versions) - - fn: "Strain_Classification.tsv" - - fn: "Mapping_and_Variant_Statistics.tsv" - - fn: "ClusterGroups.tsv" - - fn: "distance_matrix.txt" - - emit: - versions = ch_versions - multiqc_files = ch_multiqc_files -} diff --git a/subworkflows/local/mtbseq/parallel_mode.nf b/subworkflows/local/mtbseq/parallel_mode.nf new file mode 100644 index 0000000..f8a9ddc --- /dev/null +++ b/subworkflows/local/mtbseq/parallel_mode.nf @@ -0,0 +1,70 @@ +include { TBBWA } from '../../../modules/mtbseq/tbbwa.nf' +include { TBREFINE } from '../../../modules/mtbseq/tbrefine.nf' +include { TBPILE } from '../../../modules/mtbseq/tbpile.nf' +include { TBLIST } from '../../../modules/mtbseq/tblist.nf' +include { TBVARIANTS } from '../../../modules/mtbseq/tbvariants.nf' +include { TBSTATS } from '../../../modules/mtbseq/tbstats.nf' +include { TBSTRAINS } from '../../../modules/mtbseq/tbstrains.nf' +include { TBJOIN } from '../../../modules/mtbseq/tbjoin.nf' +include { TBAMEND } from '../../../modules/mtbseq/tbamend.nf' +include { TBGROUPS } from '../../../modules/mtbseq/tbgroups.nf' + + + +workflow PARALLEL_MODE { + take: + reads_ch + derived_cohort_tsv + references_ch + + main: + + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + TBBWA(reads_ch, params.user, references_ch) + TBREFINE(TBBWA.out.bam_tuple, params.user, references_ch) + TBPILE(TBREFINE.out.gatk_bam, params.user, references_ch) + TBLIST(TBPILE.out.mpileup, params.user, references_ch) + TBVARIANTS(TBLIST.out.position_table_tuple, params.user, references_ch) + + // NOTE: These are part of per-sample-analysis but they need the output from + // all other processes to compute the metrics for the cohort. + TBSTATS(TBBWA.out.bam.collect(), + TBLIST.out.position_table.collect(), + params.user, + references_ch) + + TBSTRAINS(TBLIST.out.position_table.collect(), + params.user, + references_ch) + + // COHORT STEPS + + + TBJOIN(TBVARIANTS.out.tbjoin_input.collect(sort:true), + TBLIST.out.position_table.collect(sort:true), + derived_cohort_tsv, + params.user, + references_ch) + + TBAMEND(TBJOIN.out.joint_samples, + derived_cohort_tsv, + params.user, + references_ch) + + TBGROUPS(TBAMEND.out.samples_amended, + derived_cohort_tsv, + params.user, + references_ch) + + ch_versions = ch_versions.mix(TBGROUPS.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(TBSTRAINS.out.classification) + .mix(TBSTATS.out.statistics) + .mix(TBGROUPS.out.distance_matrix.first()) + .mix(TBGROUPS.out.groups.first()) + + emit: + versions = ch_versions + multiqc_files = ch_multiqc_files.collect() +} diff --git a/subworkflows/local/mtbseq/per_sample_analysis.nf b/subworkflows/local/mtbseq/per_sample_analysis.nf deleted file mode 100644 index 8fc3ed8..0000000 --- a/subworkflows/local/mtbseq/per_sample_analysis.nf +++ /dev/null @@ -1,36 +0,0 @@ -include { TBBWA } from '../../../modules/mtbseq/tbbwa.nf' addParams (params.TBBWA) -include { TBREFINE } from '../../../modules/mtbseq/tbrefine.nf' addParams (params.TBREFINE) -include { TBPILE } from '../../../modules/mtbseq/tbpile.nf' addParams (params.TBPILE) -include { TBLIST } from '../../../modules/mtbseq/tblist.nf' addParams (params.TBLIST) -include { TBVARIANTS } from '../../../modules/mtbseq/tbvariants.nf' addParams (params.TBVARIANTS) -include { TBSTATS } from '../../../modules/mtbseq/tbstats.nf' addParams (params.TBSTATS) -include { TBSTRAINS } from '../../../modules/mtbseq/tbstrains.nf' addParams (params.TBSTRAINS) - -workflow PER_SAMPLE_ANALYSIS { - take: - reads_ch - references_ch - - main: - TBBWA(reads_ch, params.user, references_ch) - TBREFINE(TBBWA.out.bam_tuple, params.user, references_ch) - TBPILE(TBREFINE.out.gatk_bam, params.user, references_ch) - TBLIST(TBPILE.out.mpileup, params.user, references_ch) - TBVARIANTS(TBLIST.out.position_table_tuple, params.user, references_ch) - - // NOTE: These are part of per-sample-analysis but they need the output from - // all other processes to compute the metrics for the cohort. - TBSTATS(TBBWA.out.bam.collect(), - TBLIST.out.position_table.collect(), - params.user, - references_ch) - - TBSTRAINS(TBLIST.out.position_table.collect(), - params.user, - references_ch) - - emit: - genome_names = reads_ch.map{ it -> it[0].id} - position_variants = TBVARIANTS.out.tbjoin_input.collect() - position_tables = TBLIST.out.tbjoin_input.collect() -} diff --git a/workflows/mtbseqnf.nf b/workflows/mtbseqnf.nf index 1e19914..0cea2cd 100644 --- a/workflows/mtbseqnf.nf +++ b/workflows/mtbseqnf.nf @@ -4,10 +4,23 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { QC } from '../subworkflows/local/qc' -include { REPORT } from '../subworkflows/local/report' -include { PARALLEL_ANALYSIS } from "../subworkflows/local/mtbseq-nf-modes/parallel_analysis.nf" -include { NORMAL_ANALYSIS } from "../subworkflows/local/mtbseq-nf-modes/normal_analysis.nf" +include { QUALITY_CHECK } from '../subworkflows/local/quality_check' +include { PARALLEL_MODE } from "../subworkflows/local/mtbseq-nf-modes/parallel_mode.nf" + +include { TBFULL } from '../modules/mtbseq/tbfull.nf' +include { TBJOIN } from '../modules/mtbseq/tbjoin.nf' +include { TBAMEND } from '../modules/mtbseq/tbamend.nf' +include { TBGROUPS } from '../modules/mtbseq/tbgroups.nf' +include { MULTIQC } from '../modules/nf-core/multiqc/main' + + +include { paramsSummaryMap } from 'plugin/nf-validation' +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_mtbseqnf_pipeline' + + + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -24,40 +37,129 @@ workflow MTBSEQ_NF { ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - QC(ch_samplesheet) - ch_versions.mix(QC.out.ch_versions) - ch_multiqc_files.mix(QC.out.ch_multiqc_files) + ch_reference_files = Channel.value([params.resilist, + params.intregions, + params.categories, + params.basecalib]) + + QUALITY_CHECK(ch_samplesheet) + + + ch_versions = ch_versions.mix(QUALITY_CHECK.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(QUALITY_CHECK.out.multiqc_files) + + + if(!params.only_qc) { + + if( params.parallel ) { - // MTBSEQ run modes - if( params.parallel && !params.only_qc ) { + ch_reads = QUALITY_CHECK.out.reads_and_meta_ch - PARALLEL_ANALYSIS(ch_samplesheet, - [params.resilist, - params.intregions, - params.categories, - params.basecalib]) + ch_reads.dump(tag: 'ch_reads') - ch_versions = ch_versions.mix(PARALLEL_ANALYSIS.out.versions) + PARALLEL_MODE(ch_reads, + QUALITY_CHECK.out.derived_cohort_tsv, + ch_reference_files) + + + ch_versions = ch_versions.mix(PARALLEL_MODE.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(PARALLEL_MODE.out.multiqc_files) } else { + //NOTE: Defaults to the normal analysis as implemented in MTBseq - NORMAL_ANALYSIS(ch_samplesheet, - [params.resilist, - params.intregions, - params.categories, - params.basecalib]) - ch_versions = ch_versions.mix(NORMAL_ANALYSIS.out.versions) + ch_reads = QUALITY_CHECK.out.reads_ch.collect() + + ch_reads.dump(tag: 'ch_reads') + + TBFULL( ch_reads, + params.user, + ch_reference_files ) + + + // COHORT STEPS + + TBJOIN( TBFULL.out.position_variants.collect(sort:true), + TBFULL.out.position_tables.collect(sort:true), + QUALITY_CHECK.out.derived_cohort_tsv, + params.user, + ch_reference_files) + + TBAMEND(TBJOIN.out.joint_samples, + QUALITY_CHECK.out.derived_cohort_tsv, + params.user, + ch_reference_files) + + TBGROUPS(TBAMEND.out.samples_amended, + QUALITY_CHECK.out.derived_cohort_tsv, + params.user, + ch_reference_files) + + ch_versions = ch_versions.mix(TBFULL.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(TBFULL.out.classification) + .mix(TBFULL.out.statistics) + .mix(TBGROUPS.out.distance_matrix.first()) + .mix(TBGROUPS.out.groups.first()) + } } - /// END MTBSEQ ANALYSIS - REPORT (ch_multiqc_files, ch_versions) - multiqc_report = REPORT.out.multiqc_report + // + // 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 + ) + ) + + + MULTIQC ( + ch_multiqc_files.collect(), + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList() + ) emit: - multiqc_report + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] } /* From a62c1a2410f59315dc8afa2d3d361986d11e2f87 Mon Sep 17 00:00:00 2001 From: "Davi Marcon (@Mxrcon)" Date: Mon, 28 Oct 2024 10:04:20 -0300 Subject: [PATCH 05/39] import the original parameters [ci skip] --- conf/mtbseq-base.config | 96 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 conf/mtbseq-base.config diff --git a/conf/mtbseq-base.config b/conf/mtbseq-base.config new file mode 100644 index 0000000..fc48c8d --- /dev/null +++ b/conf/mtbseq-base.config @@ -0,0 +1,96 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + mycobactopia-org/MTBseq-nf Nextflow config file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Default config options for all compute environments +---------------------------------------------------------------------------------------- +*/ +params { + + //------------------------------------- + // OPTIONS FROM MTBSEQ MANUAL + //------------------------------------- + + // Hidden parameters + user = "root" + mtbseq_path = "MTBseq" + + + // Name of the project and the analysis + cohort_tsv = null + project = "mtbseqnf" + + // Setting this OPTION will add an additional filter that excludes all variants except SNPs. + snp_vars = false + + // Setting this OPTION has major implications on how the mapping data for each position is processed. By default, the majority allele is called and taken for further calculations. + // If the --lowfreq_vars OPTION is set, MTBseq will consider the majority allele distinct from wild type, if such an allele is present. + // This means that only in this detection mode, MTBseq will report variants present only in subpopulations, i.e. low frequency mutations. + // Of course, OPTIONS --mincovf, --mincovr, --minphred and --minfreq need to be set accordingly. + // Please be aware that output generated in this detection mode should not be used for phylogenetic analysis. + lowfreq_vars = false + + // The OPTION sets a threshold for the sequence data quality to be used for the mpileup creation + minbqual = 13 + + // The OPTION sets a minimum forward read coverage threshold. Alleles must have a forward coverage of this VALUE or higher to be considered. + mincovf = 4 + + // The OPTION sets a minimum reverse read coverage threshold. Alleles must have a reverse coverage of this VALUE or higher to be considered. + mincovr = 4 + + // The OPTION sets a minimum number of reads indicating an allele with a phred score of at least 20. + minphred = 4 + + // The OPTION sets a minimum frequency for an allele. + minfreq = 75 + + // The option sets a minimum percentage of samples with unambiguous information for position. + unambig = 95 + + // The OPTION sets a window size in which the algorithm scans for the occurrence of multiple variants within the same sample. + // If more than one variant occurs within this window in the same sample, the positions will be excluded. + window = 12 + + // The OPTION sets a SNP distance that is used to classify samples into groups of samples, using agglomerative clustering. + // If SNP distances between samples are less or equal this VALUE, they are grouped together. + distance = 12 + + // The OPTION sets the maximum number of CPUs to use within the pipeline. + // You can use more than one core in order to execute the pipeline faster. 8 is the current maximum. + threads = 8 + + ref_and_indexes_path = "${projectDir}/data/references/ref/" + + + + //-------------- + // + //TODO: Described in https://github.com/mtb-bioinformatics/mtbseq-nf/issues/53 + // --ref This OPTION sets the reference genome for the read mapping. + // By default, the genome of Mycobacterium tuberculosis H37Rv (NC_000962.3) is set as reference. + // User supplied FASTA files for other reference genomes should be placed in the directory /MTBseq_source/var/ref/, and the respective name given without .fasta extension. + + // This OPTION sets the reference genome for the read mapping. + // ref = "${params.ref_and_indexes_path}/M._tuberculosis_H37Rv_2015-11-13.fasta" + + //-------------- + + // This OPTION sets a list of known variant positions associated to drug resistance for resistance prediction. + resilist = "${projectDir}/data/references/res/MTB_Resistance_Mediating.txt" + + // This OPTION sets a list of interesting regions to be used for annotation of detected variants + intregions = "${projectDir}/data/references/res/MTB_Extended_Resistance_Mediating.txt" + + // This OPTION specifies a gene categories file to annotate essential and non-essential genes as well as repetitive regions. SNPs in repetitive regions will be excluded for phylogenetic analysis. + categories = "${projectDir}/data/references/cat/MTB_Gene_Categories.txt" + + // This OPTION specifies a file for base quality recalibration. The list must be in VCF format and should contain known SNPs. + basecalib = "${projectDir}/data/references/res/MTB_Base_Calibration_List.vcf" + + + + +} + + From 7e990002745ea1c6eaf38d9d021ac4deb01121f7 Mon Sep 17 00:00:00 2001 From: Abhinav Sharma Date: Mon, 28 Oct 2024 14:45:33 +0100 Subject: [PATCH 06/39] add further gatk4 modules [ci skip] --- modules.json | 20 ++ modules/nf-core/delly/call/environment.yml | 5 + modules/nf-core/delly/call/main.nf | 69 +++++ modules/nf-core/delly/call/meta.yml | 97 +++++++ modules/nf-core/delly/call/tests/main.nf.test | 187 +++++++++++++ .../delly/call/tests/main.nf.test.snap | 247 ++++++++++++++++++ modules/nf-core/delly/call/tests/tags.yml | 2 + modules/nf-core/delly/call/tests/vcf.config | 5 + .../gatk4/selectvariants/environment.yml | 5 + modules/nf-core/gatk4/selectvariants/main.nf | 58 ++++ modules/nf-core/gatk4/selectvariants/meta.yml | 68 +++++ .../gatk4/selectvariants/tests/main.nf.test | 64 +++++ .../gatk4/selectvariants/tests/tags.yml | 2 + .../gatk4/variantstotable/environment.yml | 6 + modules/nf-core/gatk4/variantstotable/main.nf | 63 +++++ .../nf-core/gatk4/variantstotable/meta.yml | 90 +++++++ .../gatk4/variantstotable/tests/main.nf.test | 91 +++++++ .../variantstotable/tests/main.nf.test.snap | 69 +++++ .../variantstotable/tests/nextflow.config | 6 + .../gatk4/variantstotable/tests/tags.yml | 2 + .../tbprofiler/profile/environment.yml | 5 + modules/nf-core/tbprofiler/profile/main.nf | 41 +++ modules/nf-core/tbprofiler/profile/meta.yml | 86 ++++++ .../tbprofiler/profile/tests/main.nf.test | 78 ++++++ .../profile/tests/main.nf.test.snap | 44 ++++ .../profile/tests/nextflow.illumina.config | 5 + .../profile/tests/nextflow.nanopore.config | 5 + 27 files changed, 1420 insertions(+) create mode 100644 modules/nf-core/delly/call/environment.yml create mode 100644 modules/nf-core/delly/call/main.nf create mode 100644 modules/nf-core/delly/call/meta.yml create mode 100644 modules/nf-core/delly/call/tests/main.nf.test create mode 100644 modules/nf-core/delly/call/tests/main.nf.test.snap create mode 100644 modules/nf-core/delly/call/tests/tags.yml create mode 100644 modules/nf-core/delly/call/tests/vcf.config create mode 100644 modules/nf-core/gatk4/selectvariants/environment.yml create mode 100644 modules/nf-core/gatk4/selectvariants/main.nf create mode 100644 modules/nf-core/gatk4/selectvariants/meta.yml create mode 100644 modules/nf-core/gatk4/selectvariants/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/selectvariants/tests/tags.yml create mode 100644 modules/nf-core/gatk4/variantstotable/environment.yml create mode 100644 modules/nf-core/gatk4/variantstotable/main.nf create mode 100644 modules/nf-core/gatk4/variantstotable/meta.yml create mode 100644 modules/nf-core/gatk4/variantstotable/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/variantstotable/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/variantstotable/tests/nextflow.config create mode 100644 modules/nf-core/gatk4/variantstotable/tests/tags.yml create mode 100644 modules/nf-core/tbprofiler/profile/environment.yml create mode 100644 modules/nf-core/tbprofiler/profile/main.nf create mode 100644 modules/nf-core/tbprofiler/profile/meta.yml create mode 100644 modules/nf-core/tbprofiler/profile/tests/main.nf.test create mode 100644 modules/nf-core/tbprofiler/profile/tests/main.nf.test.snap create mode 100644 modules/nf-core/tbprofiler/profile/tests/nextflow.illumina.config create mode 100644 modules/nf-core/tbprofiler/profile/tests/nextflow.nanopore.config diff --git a/modules.json b/modules.json index aab32b1..efb41b9 100644 --- a/modules.json +++ b/modules.json @@ -5,6 +5,11 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "delly/call": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "fastqc": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", @@ -20,6 +25,16 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "gatk4/selectvariants": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "gatk4/variantstotable": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "lofreq/call": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", @@ -29,6 +44,11 @@ "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] + }, + "tbprofiler/profile": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] } } }, diff --git a/modules/nf-core/delly/call/environment.yml b/modules/nf-core/delly/call/environment.yml new file mode 100644 index 0000000..5598247 --- /dev/null +++ b/modules/nf-core/delly/call/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::delly=1.2.6 diff --git a/modules/nf-core/delly/call/main.nf b/modules/nf-core/delly/call/main.nf new file mode 100644 index 0000000..7c21973 --- /dev/null +++ b/modules/nf-core/delly/call/main.nf @@ -0,0 +1,69 @@ +process DELLY_CALL { + 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/delly:1.2.6--hb7e2ac5_1' : + 'biocontainers/delly:1.2.6--hb7e2ac5_1' }" + + input: + tuple val(meta), path(input), path(input_index), path(vcf), path(vcf_index), path(exclude_bed) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("*.{bcf,vcf.gz}") , emit: bcf + tuple val(meta), path("*.{csi,tbi}") , emit: csi + 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 prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "bcf" + + def exclude = exclude_bed ? "--exclude ${exclude_bed}" : "" + + def bcf_output = suffix == "bcf" ? "--outfile ${prefix}.bcf" : "" + def vcf_output = suffix == "vcf" ? "| bgzip ${args2} --threads ${task.cpus} --stdout > ${prefix}.vcf.gz && tabix ${prefix}.vcf.gz" : "" + + def genotype = vcf ? "--vcffile ${vcf}" : "" + + """ + delly \\ + call \\ + ${args} \\ + ${bcf_output} \\ + --genome ${fasta} \\ + ${genotype} \\ + ${exclude} \\ + ${input} \\ + ${vcf_output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + delly: \$( echo \$(delly --version 2>&1) | sed 's/^.*Delly version: v//; s/ using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "bcf" + + def bcf_output = suffix == "bcf" ? "touch ${prefix}.bcf && touch ${prefix}.bcf.csi" : "" + def vcf_output = suffix == "vcf" ? "echo '' | gzip > ${prefix}.vcf.gz && touch ${prefix}.vcf.gz.tbi" : "" + + """ + ${bcf_output} + ${vcf_output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + delly: \$( echo \$(delly --version 2>&1) | sed 's/^.*Delly version: v//; s/ using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/delly/call/meta.yml b/modules/nf-core/delly/call/meta.yml new file mode 100644 index 0000000..ef7c238 --- /dev/null +++ b/modules/nf-core/delly/call/meta.yml @@ -0,0 +1,97 @@ +name: delly_call +description: Call structural variants +keywords: + - genome + - structural + - variants + - bcf +tools: + - delly: + description: Structural variant discovery by integrated paired-end and split-read + analysis + homepage: https://github.com/dellytools/delly + documentation: https://github.com/dellytools/delly/blob/master/README.md + doi: "10.1093/bioinformatics/bts378" + licence: ["BSD-3-Clause"] + identifier: "" +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 must be sorted, indexed, and duplicate + marked + pattern: "*.{bam,cram}" + - input_index: + type: file + description: Index of the BAM/CRAM file + pattern: "*.{bai,crai}" + - vcf: + type: file + description: A BCF/VCF file to genotype with Delly. If this is supplied, the + variant calling will be skipped + pattern: "*.{vcf.gz,bcf}" + - vcf_index: + type: file + description: The index of the BCF/VCF file + pattern: "*.{tbi,csi}" + - exclude_bed: + type: file + description: An optional bed file containing regions to exclude from the called + VCF + pattern: "*.bed" + - - meta2: + type: map + description: | + Groovy Map containing fasta information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing fasta index information + e.g. [ id:'test', single_end:false ] + - fai: + type: file + description: Index of reference fasta file to identify split-reads + pattern: "*.fai" +output: + - bcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{bcf,vcf.gz}": + type: file + description: Called variants in BCF/VCF format. Specify either "bcf" or "vcf" + in ext.suffix to define the output type + pattern: "*.{bcf,vcf.gz}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{csi,tbi}": + type: file + description: A generated csi index that matches the bcf output (not generated + for vcf files) + pattern: "*.{bcf.csi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@projectoriented" + - "@nvnieuwk" +maintainers: + - "@projectoriented" + - "@nvnieuwk" diff --git a/modules/nf-core/delly/call/tests/main.nf.test b/modules/nf-core/delly/call/tests/main.nf.test new file mode 100644 index 0000000..80cad20 --- /dev/null +++ b/modules/nf-core/delly/call/tests/main.nf.test @@ -0,0 +1,187 @@ +nextflow_process { + + name "Test Process DELLY_CALL" + script "../main.nf" + process "DELLY_CALL" + + tag "modules" + tag "modules_nfcore" + tag "delly" + tag "delly/call" + + test("homo_sapiens - bam, bai, [], [], [], fasta, fai") { + + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai", checkIfExists:true), + [], + [], + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("bam") } + ) + } + + } + + test("homo_sapiens - cram, crai, [], [], [], fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai", checkIfExists:true), + [], + [], + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("cram") } + ) + } + + } + + test("homo_sapiens - cram, crai, [], [], bed, fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai", checkIfExists:true), + [], + [], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/multi_intervals.bed", checkIfExists:true) + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("bed") } + ) + } + + } + + test("homo_sapiens - cram, crai, vcf, tbi, [], fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi", checkIfExists:true), + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("genotype") } + ) + } + + } + + test("homo_sapiens - bam, bai, [], [], [], fasta, fai - stub") { + + config "./vcf.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai", checkIfExists:true), + [], + [], + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + + } + +} diff --git a/modules/nf-core/delly/call/tests/main.nf.test.snap b/modules/nf-core/delly/call/tests/main.nf.test.snap new file mode 100644 index 0000000..c89636d --- /dev/null +++ b/modules/nf-core/delly/call/tests/main.nf.test.snap @@ -0,0 +1,247 @@ +{ + "bed": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:15.181069181" + }, + "cram": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:01.798279112" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:44.135939928" + }, + "bam": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,021dae61db384dae43a46386a66d1408" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,4cb176febbc8c26d717a6c6e67b9c905" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,021dae61db384dae43a46386a66d1408" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,4cb176febbc8c26d717a6c6e67b9c905" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:37:45.689766253" + }, + "genotype": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:29.129594523" + } +} \ No newline at end of file diff --git a/modules/nf-core/delly/call/tests/tags.yml b/modules/nf-core/delly/call/tests/tags.yml new file mode 100644 index 0000000..bab4f0b --- /dev/null +++ b/modules/nf-core/delly/call/tests/tags.yml @@ -0,0 +1,2 @@ +delly/call: + - "modules/nf-core/delly/call/**" diff --git a/modules/nf-core/delly/call/tests/vcf.config b/modules/nf-core/delly/call/tests/vcf.config new file mode 100644 index 0000000..22e9331 --- /dev/null +++ b/modules/nf-core/delly/call/tests/vcf.config @@ -0,0 +1,5 @@ +process { + withName: "DELLY_CALL" { + ext.suffix = "vcf" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/selectvariants/environment.yml b/modules/nf-core/gatk4/selectvariants/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf new file mode 100644 index 0000000..c342ee9 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -0,0 +1,58 @@ +process GATK4_SELECTVARIANTS { + 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/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(vcf_idx), path (intervals) + + output: + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: tbi + 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 interval = intervals ? "--intervals ${intervals}" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK SelectVariants] 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" \\ + SelectVariants \\ + --variant $vcf \\ + --output ${prefix}.vcf.gz \\ + $interval \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/selectvariants/meta.yml b/modules/nf-core/gatk4/selectvariants/meta.yml new file mode 100644 index 0000000..5fd9c6f --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/meta.yml @@ -0,0 +1,68 @@ +name: gatk4_selectvariants +description: Select a subset of variants from a VCF file +keywords: + - gatk4 + - selectvariants + - vcf +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. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants + tool_dev_url: https://github.com/broadinstitute/gatk + 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'] + - vcf: + type: list + description: VCF(.gz) file + pattern: "*.{vcf,vcf.gz}" + - vcf_idx: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + - intervals: + type: file + description: One or more genomic intervals over which to operate + pattern: ".intervals" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: Compressed VCF file + pattern: "*.selectvariants.vcf.gz" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz.tbi": + type: file + description: Tabix index file + pattern: "*.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@mjcipriano" + - "@ramprasadn" +maintainers: + - "@mjcipriano" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/selectvariants/tests/main.nf.test b/modules/nf-core/gatk4/selectvariants/tests/main.nf.test new file mode 100644 index 0000000..d8a97d2 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/tests/main.nf.test @@ -0,0 +1,64 @@ +nextflow_process { + + name "Test Process GATK4_SELECTVARIANTS" + script "modules/nf-core/gatk4/selectvariants/main.nf" + process "GATK4_SELECTVARIANTS" + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/selectvariants" + + test("selectvariants - vcf input") { + + when { + params { + // define parameters here. Example: + // outdir = "tests/results" + } + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.interval_list', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + ) + } + + + } + + test("selectvariants - gz input") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + [] + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/selectvariants/tests/tags.yml b/modules/nf-core/gatk4/selectvariants/tests/tags.yml new file mode 100644 index 0000000..d9fb50f --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/selectvariants: + - "modules/nf-core/gatk4/selectvariants/**" diff --git a/modules/nf-core/gatk4/variantstotable/environment.yml b/modules/nf-core/gatk4/variantstotable/environment.yml new file mode 100644 index 0000000..aa7d804 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/environment.yml @@ -0,0 +1,6 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/variantstotable/main.nf b/modules/nf-core/gatk4/variantstotable/main.nf new file mode 100644 index 0000000..5a189be --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/main.nf @@ -0,0 +1,63 @@ +process GATK4_VARIANTSTOTABLE { + 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/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(tbi), path(arguments_file), path(include_intervals), path(exclude_intervals) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) + + output: + tuple val(meta), path("*.tsv"), emit: table + 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 arguments_file_arg = arguments_file ? "--arguments_file ${arguments_file}" : "" + def include_intervals_arg = include_intervals ? "-L ${include_intervals}" : "" + def exclude_intervals_arg = exclude_intervals ? "-XL ${exclude_intervals}" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK VariantsToTable] 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" \\ + VariantsToTable \\ + ${args} \\ + --variant $vcf \\ + --output ${prefix}.tsv \\ + --reference $fasta \\ + --tmp-dir . \\ + $arguments_file_arg \\ + $include_intervals \\ + $exclude_intervals + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/variantstotable/meta.yml b/modules/nf-core/gatk4/variantstotable/meta.yml new file mode 100644 index 0000000..28ee570 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/meta.yml @@ -0,0 +1,90 @@ +name: gatk4_variantstotable +description: Extract fields from a VCF file to a tab-delimited table +keywords: + - filter + - gatk4 + - table + - vcf +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. + homepage: https://gatk.broadinstitute.org/hc/en-us + 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 VCF information. Attribute `gatk_args` can be used to add arguments to gatk. + e.g. [ id:'test', gatk_args:'-F CHROM -F POS -F TYPE -GF AD'] + - vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + - tbi: + type: file + description: Index of VCF file. + pattern: "*.{idx,tbi}" + - arguments_file: + type: file + description: "optional GATK arguments file" + pattern: "*.{txt,list,args,arguments}" + - include_intervals: + type: file + description: "optional GATK region file" + pattern: "*.{bed,bed.gz,interval,interval_list}" + - exclude_intervals: + type: file + description: "optional GATK exclude region file" + pattern: "*.{bed,bed.gz,interval,interval_list}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Fasta file of reference genome + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of fasta file + pattern: "*.fasta.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: Sequence dictionary of fastea file + pattern: "*.dict" +output: + - table: + - meta: + type: file + description: GATK output + pattern: "*.tsv" + - "*.tsv": + type: file + description: GATK output + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@lindenb" +maintainers: + - "@lindenb" diff --git a/modules/nf-core/gatk4/variantstotable/tests/main.nf.test b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test new file mode 100644 index 0000000..e6eb820 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test @@ -0,0 +1,91 @@ +nextflow_process { + + name "Test Process GATK4_VARIANTSTOTABLE" + script "../main.nf" + process "GATK4_VARIANTSTOTABLE" + config './nextflow.config' + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/variantstotable" + + test("test1_gatk4_variant_to_table") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + [], + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("test1_gatk4_variant_to_table - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + [], + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + +} diff --git a/modules/nf-core/gatk4/variantstotable/tests/main.nf.test.snap b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test.snap new file mode 100644 index 0000000..6560ddd --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/main.nf.test.snap @@ -0,0 +1,69 @@ +{ + "test1_gatk4_variant_to_table": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,fd8256465233e335beb509b0a8b43536" + ] + ], + "1": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ], + "table": [ + [ + { + "id": "test" + }, + "test.tsv:md5,fd8256465233e335beb509b0a8b43536" + ] + ], + "versions": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T22:43:27.609784" + }, + + "test1_gatk4_variant_to_table - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ], + "table": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,82324614419a32fa266b86ad8d4e6daa" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T22:43:27.609784" + } +} diff --git a/modules/nf-core/gatk4/variantstotable/tests/nextflow.config b/modules/nf-core/gatk4/variantstotable/tests/nextflow.config new file mode 100644 index 0000000..0c5fde3 --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + + withName: GATK4_VARIANTSTOTABLE { + ext.args = "-F CHROM -F POS -F TYPE -GF AD" + } +} diff --git a/modules/nf-core/gatk4/variantstotable/tests/tags.yml b/modules/nf-core/gatk4/variantstotable/tests/tags.yml new file mode 100644 index 0000000..1f2c45b --- /dev/null +++ b/modules/nf-core/gatk4/variantstotable/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/variantstotable: + - "modules/nf-core/gatk4/variantstotable/**" diff --git a/modules/nf-core/tbprofiler/profile/environment.yml b/modules/nf-core/tbprofiler/profile/environment.yml new file mode 100644 index 0000000..3185d0c --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::tb-profiler=3.0.8 diff --git a/modules/nf-core/tbprofiler/profile/main.nf b/modules/nf-core/tbprofiler/profile/main.nf new file mode 100644 index 0000000..4d5f432 --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/main.nf @@ -0,0 +1,41 @@ +process TBPROFILER_PROFILE { + 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/tb-profiler:3.0.8--pypyh5e36f6f_0' : + 'biocontainers/tb-profiler:3.0.8--pypyh5e36f6f_0' }" + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("bam/*.bam") , emit: bam + tuple val(meta), path("results/*.csv") , emit: csv, optional: true + tuple val(meta), path("results/*.json"), emit: json + tuple val(meta), path("results/*.txt") , emit: txt, optional: true + tuple val(meta), path("vcf/*.vcf.gz") , emit: vcf + 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 input_reads = meta.single_end ? "--read1 $reads" : "--read1 ${reads[0]} --read2 ${reads[1]}" + """ + tb-profiler \\ + profile \\ + $args \\ + --prefix ${prefix} \\ + --threads $task.cpus \\ + $input_reads + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tbprofiler: \$( echo \$(tb-profiler --version 2>&1) | sed 's/TBProfiler version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tbprofiler/profile/meta.yml b/modules/nf-core/tbprofiler/profile/meta.yml new file mode 100644 index 0000000..98989dd --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/meta.yml @@ -0,0 +1,86 @@ +name: tbprofiler_profile +description: A tool to detect resistance and lineages of M. tuberculosis genomes +keywords: + - Mycobacterium tuberculosis + - resistance + - serotype +tools: + - tbprofiler: + description: Profiling tool for Mycobacterium tuberculosis to detect drug resistance + and lineage from WGS data + homepage: https://github.com/jodyphelan/TBProfiler + documentation: https://jodyphelan.gitbook.io/tb-profiler/ + tool_dev_url: https://github.com/jodyphelan/TBProfiler + doi: "10.1186/s13073-019-0650-x" + licence: ["GPL v3"] + identifier: "" +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.gz,fq.gz}" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam/*.bam: + type: file + description: BAM file with alignment details + pattern: "*.bam" + - csv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*.csv: + type: file + description: Optional CSV formated result file of resistance and strain type + pattern: "*.csv" + - json: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*.json: + type: file + description: JSON formated result file of resistance and strain type + pattern: "*.json" + - txt: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*.txt: + type: file + description: Optional text file of resistance and strain type + pattern: "*.txt" + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf/*.vcf.gz: + type: file + description: VCF with variant info again refernce genomes + pattern: "*.vcf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@rpetit3" +maintainers: + - "@rpetit3" diff --git a/modules/nf-core/tbprofiler/profile/tests/main.nf.test b/modules/nf-core/tbprofiler/profile/tests/main.nf.test new file mode 100644 index 0000000..6bd9c8b --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/main.nf.test @@ -0,0 +1,78 @@ + +nextflow_process { + + name "Test Process TBPROFILER_PROFILE" + script "../main.nf" + process "TBPROFILER_PROFILE" + + tag "modules" + tag "modules_nfcore" + tag "tbprofiler" + tag "tbprofiler/profile" + + test("test-tbprofiler-profile-illumina") { + config "./nextflow.illumina.config" + + 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( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.csv, + file(process.out.json[0][1]).name, // unstable + process.out.txt, + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + + test("test-tbprofiler-profile-nanopore") { + config "./nextflow.nanopore.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/nanopore/fastq/test.fastq.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.csv, + file(process.out.json[0][1]).name, // unstable + process.out.txt, + path(process.out.vcf[0][1]).vcf.summary, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/tbprofiler/profile/tests/main.nf.test.snap b/modules/nf-core/tbprofiler/profile/tests/main.nf.test.snap new file mode 100644 index 0000000..8c59c20 --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/main.nf.test.snap @@ -0,0 +1,44 @@ +{ + "test-tbprofiler-profile-illumina": { + "content": [ + "643637f42d74111b557bded525fecf95", + [ + + ], + "test.results.json", + [ + + ], + "VcfFile [chromosomes=[], sampleCount=1, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,7e204ef6bca3bc02ae72295e980040c2" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T13:48:51.627166" + }, + "test-tbprofiler-profile-nanopore": { + "content": [ + "46da99abc50c7fa4a7fbbf853dca9e11", + [ + + ], + "test.results.json", + [ + + ], + "VcfFile [chromosomes=[], sampleCount=1, variantCount=0, phased=true, phasedAutodetect=true]", + [ + "versions.yml:md5,7e204ef6bca3bc02ae72295e980040c2" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T13:49:17.330177" + } +} \ No newline at end of file diff --git a/modules/nf-core/tbprofiler/profile/tests/nextflow.illumina.config b/modules/nf-core/tbprofiler/profile/tests/nextflow.illumina.config new file mode 100644 index 0000000..d941b4b --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/nextflow.illumina.config @@ -0,0 +1,5 @@ +process { + withName: TBPROFILER_PROFILE { + ext.args = '--platform illumina' + } +} diff --git a/modules/nf-core/tbprofiler/profile/tests/nextflow.nanopore.config b/modules/nf-core/tbprofiler/profile/tests/nextflow.nanopore.config new file mode 100644 index 0000000..9316e10 --- /dev/null +++ b/modules/nf-core/tbprofiler/profile/tests/nextflow.nanopore.config @@ -0,0 +1,5 @@ +process { + withName: TBPROFILER_PROFILE { + ext.args = '--platform nanopore' + } +} From 8bd30f1789b6321ea736deb8c6ab95c84b898585 Mon Sep 17 00:00:00 2001 From: Abhinav Sharma Date: Mon, 28 Oct 2024 15:08:55 +0100 Subject: [PATCH 07/39] add nf-core modules for magma [ci skip] --- modules.json | 95 ++ .../nf-core/bcftools/merge/environment.yml | 5 + modules/nf-core/bcftools/merge/main.nf | 74 ++ modules/nf-core/bcftools/merge/meta.yml | 96 ++ .../nf-core/bcftools/merge/tests/bcf.config | 3 + .../bcftools/merge/tests/bcf_gz.config | 3 + .../nf-core/bcftools/merge/tests/main.nf.test | 853 ++++++++++++++++++ .../bcftools/merge/tests/main.nf.test.snap | 607 +++++++++++++ .../bcftools/merge/tests/nextflow.config | 5 + .../bcftools/merge/tests/nextflow.gvcf.config | 5 + modules/nf-core/bcftools/merge/tests/tags.yml | 2 + .../nf-core/bcftools/merge/tests/vcf.config | 3 + .../bcftools/merge/tests/vcf_gz.config | 3 + .../bcftools/merge/tests/vcf_gz_index.config | 3 + .../merge/tests/vcf_gz_index_csi.config | 3 + .../merge/tests/vcf_gz_index_tbi.config | 3 + modules/nf-core/bcftools/view/environment.yml | 5 + modules/nf-core/bcftools/view/main.nf | 76 ++ modules/nf-core/bcftools/view/meta.yml | 88 ++ .../nf-core/bcftools/view/tests/main.nf.test | 298 ++++++ .../bcftools/view/tests/main.nf.test.snap | 333 +++++++ .../bcftools/view/tests/nextflow.config | 3 + modules/nf-core/bcftools/view/tests/tags.yml | 2 + .../bcftools/view/tests/vcf_gz_index.config | 4 + .../view/tests/vcf_gz_index_csi.config | 4 + .../view/tests/vcf_gz_index_tbi.config | 4 + modules/nf-core/bwamem2/index/environment.yml | 5 + modules/nf-core/bwamem2/index/main.nf | 52 ++ modules/nf-core/bwamem2/index/meta.yml | 45 + .../nf-core/bwamem2/index/tests/main.nf.test | 31 + .../bwamem2/index/tests/main.nf.test.snap | 47 + modules/nf-core/bwamem2/index/tests/tags.yml | 2 + modules/nf-core/bwamem2/mem/environment.yml | 8 + modules/nf-core/bwamem2/mem/main.nf | 86 ++ modules/nf-core/bwamem2/mem/meta.yml | 115 +++ .../nf-core/bwamem2/mem/tests/main.nf.test | 179 ++++ .../bwamem2/mem/tests/main.nf.test.snap | 129 +++ modules/nf-core/bwamem2/mem/tests/tags.yml | 2 + .../gatk4/indexfeaturefile/environment.yml | 5 + .../nf-core/gatk4/indexfeaturefile/main.nf | 41 + .../nf-core/gatk4/indexfeaturefile/meta.yml | 46 + .../gatk4/indexfeaturefile/tests/main.nf.test | 105 +++ .../indexfeaturefile/tests/main.nf.test.snap | 132 +++ .../gatk4/indexfeaturefile/tests/tags.yml | 2 + .../gatk4/markduplicates/environment.yml | 8 + modules/nf-core/gatk4/markduplicates/main.nf | 85 ++ modules/nf-core/gatk4/markduplicates/meta.yml | 102 +++ .../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 + .../gatk4/variantrecalibrator/environment.yml | 5 + .../nf-core/gatk4/variantrecalibrator/main.nf | 71 ++ .../gatk4/variantrecalibrator/meta.yml | 112 +++ modules/nf-core/iqtree/environment.yml | 5 + modules/nf-core/iqtree/main.nf | 131 +++ modules/nf-core/iqtree/meta.yml | 358 ++++++++ .../iqtree/tests/iqtree_bootstrap.config | 5 + .../iqtree/tests/iqtree_optional.config | 5 + .../nf-core/iqtree/tests/iqtree_treels.config | 5 + modules/nf-core/iqtree/tests/main.nf.test | 323 +++++++ .../nf-core/iqtree/tests/main.nf.test.snap | 527 +++++++++++ modules/nf-core/iqtree/tests/tags.yml | 2 + modules/nf-core/ismapper/environment.yml | 5 + modules/nf-core/ismapper/main.nf | 50 + modules/nf-core/ismapper/meta.yml | 54 ++ modules/nf-core/ismapper/tests/main.nf.test | 88 ++ .../nf-core/ismapper/tests/main.nf.test.snap | 67 ++ modules/nf-core/lofreq/filter/environment.yml | 5 + modules/nf-core/lofreq/filter/main.nf | 46 + modules/nf-core/lofreq/filter/meta.yml | 48 + .../nf-core/lofreq/filter/tests/main.nf.test | 74 ++ .../lofreq/filter/tests/main.nf.test.snap | 101 +++ modules/nf-core/lofreq/filter/tests/tags.yml | 2 + .../nf-core/lofreq/indelqual/environment.yml | 5 + modules/nf-core/lofreq/indelqual/main.nf | 48 + modules/nf-core/lofreq/indelqual/meta.yml | 57 ++ .../lofreq/indelqual/tests/main.nf.test | 71 ++ .../lofreq/indelqual/tests/main.nf.test.snap | 49 + .../lofreq/indelqual/tests/nextflow.config | 6 + .../nf-core/lofreq/indelqual/tests/tags.yml | 2 + .../nf-core/samtools/index/environment.yml | 8 + modules/nf-core/samtools/index/main.nf | 49 + modules/nf-core/samtools/index/meta.yml | 71 ++ .../samtools/index/tests/csi.nextflow.config | 7 + .../nf-core/samtools/index/tests/main.nf.test | 140 +++ .../samtools/index/tests/main.nf.test.snap | 250 +++++ modules/nf-core/samtools/index/tests/tags.yml | 2 + .../nf-core/samtools/merge/environment.yml | 8 + modules/nf-core/samtools/merge/main.nf | 61 ++ modules/nf-core/samtools/merge/meta.yml | 104 +++ .../nf-core/samtools/merge/tests/index.config | 3 + .../nf-core/samtools/merge/tests/main.nf.test | 137 +++ .../samtools/merge/tests/main.nf.test.snap | 228 +++++ modules/nf-core/samtools/merge/tests/tags.yml | 2 + .../nf-core/samtools/stats/environment.yml | 8 + modules/nf-core/samtools/stats/main.nf | 49 + modules/nf-core/samtools/stats/meta.yml | 66 ++ .../nf-core/samtools/stats/tests/main.nf.test | 113 +++ .../samtools/stats/tests/main.nf.test.snap | 142 +++ modules/nf-core/samtools/stats/tests/tags.yml | 2 + modules/nf-core/snpdists/environment.yml | 5 + modules/nf-core/snpdists/main.nf | 33 + modules/nf-core/snpdists/meta.yml | 45 + modules/nf-core/snpdists/tests/main.nf.test | 32 + .../nf-core/snpdists/tests/main.nf.test.snap | 37 + .../nf-core/snpeff/download/environment.yml | 5 + modules/nf-core/snpeff/download/main.nf | 54 ++ modules/nf-core/snpeff/download/meta.yml | 49 + .../snpeff/download/tests/main.nf.test | 51 ++ .../snpeff/download/tests/main.nf.test.snap | 100 ++ modules/nf-core/snpeff/snpeff/environment.yml | 5 + modules/nf-core/snpeff/snpeff/main.nf | 62 ++ modules/nf-core/snpeff/snpeff/meta.yml | 90 ++ .../nf-core/snpeff/snpeff/tests/main.nf.test | 51 ++ .../snpeff/snpeff/tests/main.nf.test.snap | 31 + .../snpeff/snpeff/tests/nextflow.config | 3 + modules/nf-core/snpeff/snpeff/tests/tags.yml | 2 + modules/nf-core/snpsites/environment.yml | 5 + modules/nf-core/snpsites/main.nf | 50 + modules/nf-core/snpsites/meta.yml | 43 + modules/nf-core/snpsites/tests/main.nf.test | 49 + .../nf-core/snpsites/tests/main.nf.test.snap | 72 ++ modules/nf-core/snpsites/tests/tags.yml | 2 + modules/nf-core/tabix/bgzip/environment.yml | 7 + modules/nf-core/tabix/bgzip/main.nf | 55 ++ modules/nf-core/tabix/bgzip/meta.yml | 61 ++ .../tabix/bgzip/tests/bgzip_compress.config | 5 + .../nf-core/tabix/bgzip/tests/main.nf.test | 111 +++ .../tabix/bgzip/tests/main.nf.test.snap | 218 +++++ modules/nf-core/tabix/bgzip/tests/tags.yml | 2 + .../nf-core/tabix/bgzip/tests/vcf_none.config | 5 + 133 files changed, 9228 insertions(+) create mode 100644 modules/nf-core/bcftools/merge/environment.yml create mode 100644 modules/nf-core/bcftools/merge/main.nf create mode 100644 modules/nf-core/bcftools/merge/meta.yml create mode 100644 modules/nf-core/bcftools/merge/tests/bcf.config create mode 100644 modules/nf-core/bcftools/merge/tests/bcf_gz.config create mode 100644 modules/nf-core/bcftools/merge/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/merge/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/merge/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config create mode 100644 modules/nf-core/bcftools/merge/tests/tags.yml create mode 100644 modules/nf-core/bcftools/merge/tests/vcf.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/view/environment.yml create mode 100644 modules/nf-core/bcftools/view/main.nf create mode 100644 modules/nf-core/bcftools/view/meta.yml create mode 100644 modules/nf-core/bcftools/view/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/view/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/view/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/view/tests/tags.yml create mode 100644 modules/nf-core/bcftools/view/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bwamem2/index/environment.yml create mode 100644 modules/nf-core/bwamem2/index/main.nf create mode 100644 modules/nf-core/bwamem2/index/meta.yml create mode 100644 modules/nf-core/bwamem2/index/tests/main.nf.test create mode 100644 modules/nf-core/bwamem2/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwamem2/index/tests/tags.yml create mode 100644 modules/nf-core/bwamem2/mem/environment.yml create mode 100644 modules/nf-core/bwamem2/mem/main.nf create mode 100644 modules/nf-core/bwamem2/mem/meta.yml create mode 100644 modules/nf-core/bwamem2/mem/tests/main.nf.test create mode 100644 modules/nf-core/bwamem2/mem/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwamem2/mem/tests/tags.yml create mode 100644 modules/nf-core/gatk4/indexfeaturefile/environment.yml create mode 100644 modules/nf-core/gatk4/indexfeaturefile/main.nf create mode 100644 modules/nf-core/gatk4/indexfeaturefile/meta.yml create mode 100644 modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/indexfeaturefile/tests/tags.yml create mode 100644 modules/nf-core/gatk4/markduplicates/environment.yml create mode 100644 modules/nf-core/gatk4/markduplicates/main.nf create mode 100644 modules/nf-core/gatk4/markduplicates/meta.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/gatk4/variantrecalibrator/environment.yml create mode 100644 modules/nf-core/gatk4/variantrecalibrator/main.nf create mode 100644 modules/nf-core/gatk4/variantrecalibrator/meta.yml create mode 100644 modules/nf-core/iqtree/environment.yml create mode 100644 modules/nf-core/iqtree/main.nf create mode 100644 modules/nf-core/iqtree/meta.yml create mode 100644 modules/nf-core/iqtree/tests/iqtree_bootstrap.config create mode 100644 modules/nf-core/iqtree/tests/iqtree_optional.config create mode 100644 modules/nf-core/iqtree/tests/iqtree_treels.config create mode 100644 modules/nf-core/iqtree/tests/main.nf.test create mode 100644 modules/nf-core/iqtree/tests/main.nf.test.snap create mode 100644 modules/nf-core/iqtree/tests/tags.yml create mode 100644 modules/nf-core/ismapper/environment.yml create mode 100644 modules/nf-core/ismapper/main.nf create mode 100644 modules/nf-core/ismapper/meta.yml create mode 100644 modules/nf-core/ismapper/tests/main.nf.test create mode 100644 modules/nf-core/ismapper/tests/main.nf.test.snap create mode 100644 modules/nf-core/lofreq/filter/environment.yml create mode 100644 modules/nf-core/lofreq/filter/main.nf create mode 100644 modules/nf-core/lofreq/filter/meta.yml create mode 100644 modules/nf-core/lofreq/filter/tests/main.nf.test create mode 100644 modules/nf-core/lofreq/filter/tests/main.nf.test.snap create mode 100644 modules/nf-core/lofreq/filter/tests/tags.yml create mode 100644 modules/nf-core/lofreq/indelqual/environment.yml create mode 100644 modules/nf-core/lofreq/indelqual/main.nf create mode 100644 modules/nf-core/lofreq/indelqual/meta.yml create mode 100644 modules/nf-core/lofreq/indelqual/tests/main.nf.test create mode 100644 modules/nf-core/lofreq/indelqual/tests/main.nf.test.snap create mode 100644 modules/nf-core/lofreq/indelqual/tests/nextflow.config create mode 100644 modules/nf-core/lofreq/indelqual/tests/tags.yml create mode 100644 modules/nf-core/samtools/index/environment.yml create mode 100644 modules/nf-core/samtools/index/main.nf create mode 100644 modules/nf-core/samtools/index/meta.yml create mode 100644 modules/nf-core/samtools/index/tests/csi.nextflow.config create mode 100644 modules/nf-core/samtools/index/tests/main.nf.test create mode 100644 modules/nf-core/samtools/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/index/tests/tags.yml create mode 100644 modules/nf-core/samtools/merge/environment.yml create mode 100644 modules/nf-core/samtools/merge/main.nf create mode 100644 modules/nf-core/samtools/merge/meta.yml create mode 100644 modules/nf-core/samtools/merge/tests/index.config create mode 100644 modules/nf-core/samtools/merge/tests/main.nf.test create mode 100644 modules/nf-core/samtools/merge/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/merge/tests/tags.yml 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 create mode 100644 modules/nf-core/samtools/stats/tests/tags.yml create mode 100644 modules/nf-core/snpdists/environment.yml create mode 100644 modules/nf-core/snpdists/main.nf create mode 100644 modules/nf-core/snpdists/meta.yml create mode 100644 modules/nf-core/snpdists/tests/main.nf.test create mode 100644 modules/nf-core/snpdists/tests/main.nf.test.snap create mode 100644 modules/nf-core/snpeff/download/environment.yml create mode 100644 modules/nf-core/snpeff/download/main.nf create mode 100644 modules/nf-core/snpeff/download/meta.yml create mode 100644 modules/nf-core/snpeff/download/tests/main.nf.test create mode 100644 modules/nf-core/snpeff/download/tests/main.nf.test.snap create mode 100644 modules/nf-core/snpeff/snpeff/environment.yml create mode 100644 modules/nf-core/snpeff/snpeff/main.nf create mode 100644 modules/nf-core/snpeff/snpeff/meta.yml create mode 100644 modules/nf-core/snpeff/snpeff/tests/main.nf.test create mode 100644 modules/nf-core/snpeff/snpeff/tests/main.nf.test.snap create mode 100644 modules/nf-core/snpeff/snpeff/tests/nextflow.config create mode 100644 modules/nf-core/snpeff/snpeff/tests/tags.yml create mode 100644 modules/nf-core/snpsites/environment.yml create mode 100644 modules/nf-core/snpsites/main.nf create mode 100644 modules/nf-core/snpsites/meta.yml create mode 100644 modules/nf-core/snpsites/tests/main.nf.test create mode 100644 modules/nf-core/snpsites/tests/main.nf.test.snap create mode 100644 modules/nf-core/snpsites/tests/tags.yml create mode 100644 modules/nf-core/tabix/bgzip/environment.yml create mode 100644 modules/nf-core/tabix/bgzip/main.nf create mode 100644 modules/nf-core/tabix/bgzip/meta.yml create mode 100644 modules/nf-core/tabix/bgzip/tests/bgzip_compress.config create mode 100644 modules/nf-core/tabix/bgzip/tests/main.nf.test create mode 100644 modules/nf-core/tabix/bgzip/tests/main.nf.test.snap create mode 100644 modules/nf-core/tabix/bgzip/tests/tags.yml create mode 100644 modules/nf-core/tabix/bgzip/tests/vcf_none.config diff --git a/modules.json b/modules.json index efb41b9..1b50c7f 100644 --- a/modules.json +++ b/modules.json @@ -5,6 +5,26 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "bcftools/merge": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "bcftools/view": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "bwamem2/index": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "bwamem2/mem": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "delly/call": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", @@ -25,26 +45,101 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "gatk4/indexfeaturefile": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "gatk4/markduplicates": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "gatk4/selectvariants": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "gatk4/variantrecalibrator": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "gatk4/variantstotable": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "iqtree": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "ismapper": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "lofreq/call": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "lofreq/filter": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "lofreq/indelqual": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] }, + "samtools/index": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": ["modules"] + }, + "samtools/merge": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": ["modules"] + }, + "samtools/stats": { + "branch": "master", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", + "installed_by": ["modules"] + }, + "snpdists": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "snpeff/download": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "snpeff/snpeff": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "snpsites": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "tabix/bgzip": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "tbprofiler/profile": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/bcftools/merge/environment.yml b/modules/nf-core/bcftools/merge/environment.yml new file mode 100644 index 0000000..5c00b11 --- /dev/null +++ b/modules/nf-core/bcftools/merge/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf new file mode 100644 index 0000000..facb14e --- /dev/null +++ b/modules/nf-core/bcftools/merge/main.nf @@ -0,0 +1,74 @@ +process BCFTOOLS_MERGE { + 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/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" + + input: + tuple val(meta), path(vcfs), path(tbis) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(bed) + + output: + tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: vcf + tuple val(meta), path("*.{csi,tbi}") , emit: index, 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 input = (vcfs.collect().size() > 1) ? vcfs.sort{ it.name } : vcfs + def regions = bed ? "--regions-file $bed" : "" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + + """ + bcftools merge \\ + $args \\ + $regions \\ + --threads $task.cpus \\ + --output ${prefix}.${extension} \\ + $input + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + + """ + ${create_cmd} ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml new file mode 100644 index 0000000..2cf09a1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -0,0 +1,96 @@ +name: bcftools_merge +description: Merge VCF files +keywords: + - variant calling + - merge + - VCF +tools: + - merge: + description: | + Merge VCF files. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:bcftools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcfs: + type: file + description: | + List containing 2 or more vcf files + e.g. [ 'file1.vcf', 'file2.vcf' ] + - tbis: + type: file + description: | + List containing the tbi index files corresponding to the vcfs input files + e.g. [ 'file1.vcf.tbi', 'file2.vcf.tbi' ] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: "(Optional) The fasta reference file (only necessary for the `--gvcf + FILE` parameter)" + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: "(Optional) The fasta reference file index (only necessary for + the `--gvcf FILE` parameter)" + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing bed information + e.g. [ id:'genome' ] + - bed: + type: file + description: "(Optional) The bed regions to merge on" + pattern: "*.bed" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{bcf,vcf}{,.gz}": + type: file + description: merged output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{csi,tbi}": + type: file + description: index of merged output + pattern: "*.{csi,tbi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@nvnieuwk" + - "@ramprasadn" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@nvnieuwk" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/merge/tests/bcf.config b/modules/nf-core/bcftools/merge/tests/bcf.config new file mode 100644 index 0000000..4467d07 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/bcf.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type u --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/bcf_gz.config b/modules/nf-core/bcftools/merge/tests/bcf_gz.config new file mode 100644 index 0000000..280de8d --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/bcf_gz.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type b --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test b/modules/nf-core/bcftools/merge/tests/main.nf.test new file mode 100644 index 0000000..3995fc1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test @@ -0,0 +1,853 @@ +nextflow_process { + + name "Test Process BCFTOOLS_MERGE" + script "../main.nf" + process "BCFTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/merge" + + test("sarscov2 - [vcf, tbi], [], [], []") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf output") { + + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output") { + + config "./vcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf output") { + + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf") }, + { assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output") { + + config "./bcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf.gz") }, + { assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index") { + + config "./vcf_gz_index_csi.config" + + when { + + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("tbi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], bed") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output") { + + config "./nextflow.gvcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ] + input[2] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + ] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - one sample") { + + config "./nextflow.config" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub") { + + options "-stub" + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub") { + + options "-stub" + config "./vcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub") { + + options "-stub" + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub") { + + options "-stub" + config "./bcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub") { + + options "-stub" + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub") { + + options "-stub" + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub") { + + options "-stub" + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("tbi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], bed - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub") { + + options "-stub" + config "./nextflow.gvcf.config" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ] + input[2] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + ] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - one sample - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test.snap b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap new file mode 100644 index 0000000..b3b6255 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap @@ -0,0 +1,607 @@ +{ + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.tbi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:34:16.977726522" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:34.532910365" + }, + "sarscov2 - [vcf, tbi], [], [], bed": { + "content": [ + "febdcfb851dcfc83d8248520830aef10", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:29:48.630057872" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:59.983157569" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf output": { + "content": [ + "57bb84274f336465d0a0946b532093b0", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:29:05.528412678" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:58:46.619657457" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:12.848227353" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:23:15.794389239" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.csi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:57:16.850641473" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:27.949031071" + }, + "sarscov2 - [vcf, tbi], [], [], bed - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:19.273064822" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf output": { + "content": [ + "test.bcf", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:38.567500859" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:47.356328326" + }, + "sarscov2 - [vcf, tbi], [], [], [] - one sample - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T15:13:18.708495878" + }, + "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:56:45.706125286" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.csi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:33:43.639646108" + }, + "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output": { + "content": [ + "645b7f7f9131bfe350a9ec3cf82c17fe", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:55:44.299812124" + }, + "sarscov2 - [vcf, tbi], [], [], [] - one sample": { + "content": [ + "2a374cf02f0c32cf607646167e7f153b", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T15:37:38.491844702" + }, + "sarscov2 - [vcf, tbi], [], [], [] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:28.188178904" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:06.430943593" + }, + "sarscov2 - [vcf, tbi], [], [], []": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:31:03.893007442" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output": { + "content": [ + "test.bcf.gz", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:56.416361069" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.config b/modules/nf-core/bcftools/merge/tests/nextflow.config new file mode 100644 index 0000000..c3f0b71 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: BCFTOOLS_MERGE { + ext.args = '--force-samples --force-single --no-version' + } +} diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config b/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config new file mode 100644 index 0000000..8c457b7 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config @@ -0,0 +1,5 @@ +process { + withName: BCFTOOLS_MERGE { + ext.args = { "--force-samples --no-version --output-type z --gvcf $fasta" } + } +} diff --git a/modules/nf-core/bcftools/merge/tests/tags.yml b/modules/nf-core/bcftools/merge/tests/tags.yml new file mode 100644 index 0000000..1464d0c --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/merge: + - "modules/nf-core/bcftools/merge/**" diff --git a/modules/nf-core/bcftools/merge/tests/vcf.config b/modules/nf-core/bcftools/merge/tests/vcf.config new file mode 100644 index 0000000..759222e --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type v --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz.config b/modules/nf-core/bcftools/merge/tests/vcf_gz.config new file mode 100644 index 0000000..8b6ad8b --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type z --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config new file mode 100644 index 0000000..9f1e9b1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config new file mode 100644 index 0000000..8308ee1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config new file mode 100644 index 0000000..9be4075 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bcftools/view/environment.yml b/modules/nf-core/bcftools/view/environment.yml new file mode 100644 index 0000000..5c00b11 --- /dev/null +++ b/modules/nf-core/bcftools/view/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf new file mode 100644 index 0000000..7fe4303 --- /dev/null +++ b/modules/nf-core/bcftools/view/main.nf @@ -0,0 +1,76 @@ +process BCFTOOLS_VIEW { + 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/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" + + input: + tuple val(meta), path(vcf), path(index) + path(regions) + path(targets) + path(samples) + + output: + tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, 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 regions_file = regions ? "--regions-file ${regions}" : "" + def targets_file = targets ? "--targets-file ${targets}" : "" + def samples_file = samples ? "--samples-file ${samples}" : "" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + """ + bcftools view \\ + --output ${prefix}.${extension} \\ + ${regions_file} \\ + ${targets_file} \\ + ${samples_file} \\ + $args \\ + --threads $task.cpus \\ + ${vcf} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + + """ + ${create_cmd} ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/view/meta.yml b/modules/nf-core/bcftools/view/meta.yml new file mode 100644 index 0000000..aa7785f --- /dev/null +++ b/modules/nf-core/bcftools/view/meta.yml @@ -0,0 +1,88 @@ +name: bcftools_view +description: View, subset and filter VCF or BCF files by position and filtering expression. + Convert between VCF and BCF +keywords: + - variant calling + - view + - bcftools + - VCF +tools: + - view: + description: | + View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:bcftools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be inspected. + e.g. 'file.vcf' + - index: + type: file + description: | + The tab index for the VCF file to be inspected. + e.g. 'file.tbi' + - - regions: + type: file + description: | + Optionally, restrict the operation to regions listed in this file. + e.g. 'file.vcf' + - - targets: + type: file + description: | + Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) + e.g. 'file.vcf' + - - samples: + type: file + description: | + Optional, file of sample names to be included or excluded. + e.g. 'file.tsv' +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: VCF normalized output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" +maintainers: + - "@abhi18av" diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test b/modules/nf-core/bcftools/view/tests/main.nf.test new file mode 100644 index 0000000..1e60c50 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/main.nf.test @@ -0,0 +1,298 @@ +nextflow_process { + + name "Test Process BCFTOOLS_VIEW" + script "../main.nf" + process "BCFTOOLS_VIEW" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/view" + + test("sarscov2 - [vcf, tbi], [], [], []") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], vcf, tsv, []") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.targets.tsv.gz', checkIfExists: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - stub") { + + config "./nextflow.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test.snap b/modules/nf-core/bcftools/view/tests/main.nf.test.snap new file mode 100644 index 0000000..fec22e3 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/main.nf.test.snap @@ -0,0 +1,333 @@ +{ + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:14:38.717458272" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:13:44.760671384" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T16:06:21.669668533" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:14:53.026083914" + }, + "sarscov2 - [vcf, tbi], vcf, tsv, []": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out.vcf:md5,1bcbd0eff25d316ba915d06463aab17b" + ] + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:14.663512924" + }, + "sarscov2 - [vcf, tbi], [], [], [] - stub": { + "content": [ + "out.vcf", + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:19.723448323" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T08:24:36.358469315" + }, + "sarscov2 - [vcf, tbi], [], [], []": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out.vcf:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:09.588867653" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:13:33.834986869" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/nextflow.config b/modules/nf-core/bcftools/view/tests/nextflow.config new file mode 100644 index 0000000..932e3ba --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = '--no-version --output-type v' +} diff --git a/modules/nf-core/bcftools/view/tests/tags.yml b/modules/nf-core/bcftools/view/tests/tags.yml new file mode 100644 index 0000000..43b1f0a --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/view: + - "modules/nf-core/bcftools/view/**" diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index.config new file mode 100644 index 0000000..7dd696e --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config new file mode 100644 index 0000000..aebffb6 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config new file mode 100644 index 0000000..b192ae7 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml new file mode 100644 index 0000000..15cee23 --- /dev/null +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bwa-mem2=2.2.1 diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf new file mode 100644 index 0000000..b768828 --- /dev/null +++ b/modules/nf-core/bwamem2/index/main.nf @@ -0,0 +1,52 @@ +process BWAMEM2_INDEX { + tag "$fasta" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bwa-mem2:2.2.1--he513fc3_0' : + 'biocontainers/bwa-mem2:2.2.1--he513fc3_0' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("bwamem2"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${fasta}" + def args = task.ext.args ?: '' + """ + mkdir bwamem2 + bwa-mem2 \\ + index \\ + $args \\ + $fasta -p bwamem2/${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${fasta}" + + """ + mkdir bwamem2 + touch bwamem2/${prefix}.0123 + touch bwamem2/${prefix}.ann + touch bwamem2/${prefix}.pac + touch bwamem2/${prefix}.amb + touch bwamem2/${prefix}.bwt.2bit.64 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml new file mode 100644 index 0000000..74f54ef --- /dev/null +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -0,0 +1,45 @@ +name: bwamem2_index +description: Create BWA-mem2 index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - bwamem2: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: https://github.com/bwa-mem2/bwa-mem2#usage + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file +output: + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bwamem2: + type: file + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/bwamem2/index/tests/main.nf.test b/modules/nf-core/bwamem2/index/tests/main.nf.test new file mode 100644 index 0000000..dbf1113 --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test @@ -0,0 +1,31 @@ +nextflow_process { + + name "Test Process BWAMEM2_INDEX" + tag "modules_nfcore" + tag "modules" + tag "bwamem2" + tag "bwamem2/index" + script "../main.nf" + process "BWAMEM2_INDEX" + + test("BWAMEM2 index") { + + when { + process { + """ + input[0] = [ + [id: 'test'], + 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/bwamem2/index/tests/main.nf.test.snap b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap new file mode 100644 index 0000000..69b268e --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap @@ -0,0 +1,47 @@ +{ + "BWAMEM2 index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "1": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "versions": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T12:59:39.132616" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/tests/tags.yml b/modules/nf-core/bwamem2/index/tests/tags.yml new file mode 100644 index 0000000..3953018 --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/index: + - modules/nf-core/bwamem2/index/** diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml new file mode 100644 index 0000000..7e0b5a3 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -0,0 +1,8 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bwa-mem2=2.2.1 + - htslib=1.19.1 + - samtools=1.19.2 diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf new file mode 100644 index 0000000..729428c --- /dev/null +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -0,0 +1,86 @@ +process BWAMEM2_MEM { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' : + 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' }" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(index) + tuple val(meta3), path(fasta) + val sort_bam + + output: + tuple val(meta), path("*.sam") , emit: sam , 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: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + """ + INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` + + bwa-mem2 \\ + mem \\ + $args \\ + -t $task.cpus \\ + \$INDEX \\ + $reads \\ + | samtools $samtools_command $args2 -@ $task.cpus ${reference} -o ${prefix}.${extension} - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + def create_index = "" + if (extension == "cram") { + create_index = "touch ${prefix}.crai" + } else if (extension == "bam") { + create_index = "touch ${prefix}.csi" + } + + """ + touch ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml new file mode 100644 index 0000000..c6333ca --- /dev/null +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -0,0 +1,115 @@ +name: bwamem2_mem +description: Performs fastq alignment to a fasta reference using BWA +keywords: + - mem + - bwa + - alignment + - map + - fastq + - bam + - sam +tools: + - bwa: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 + licence: ["MIT"] + 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 of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + - - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" +output: + - sam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: Index file for CRAM file + pattern: "*.{crai}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Index file for BAM file + pattern: "*.{csi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" + - "@matthdsm" +maintainers: + - "@maxulysse" + - "@matthdsm" diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test new file mode 100644 index 0000000..9e0ab14 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -0,0 +1,179 @@ +nextflow_process { + + name "Test Process BWAMEM2_MEM" + script "../main.nf" + process "BWAMEM2_MEM" + + tag "modules" + tag "modules_nfcore" + tag "bwamem2" + tag "bwamem2/mem" + tag "bwamem2/index" + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + test("sarscov2 - fastq, index, fasta, false") { + + 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)] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, true") { + + 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)] + ]) + input[1] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, false") { + + 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] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true") { + + 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] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true - 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] = BWAMEM2_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap new file mode 100644 index 0000000..69bc361 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -0,0 +1,129 @@ +{ + "sarscov2 - [fastq1, fastq2], index, fasta, false": { + "content": [ + "eefa0f44493fd0504e734efd2f1f4a9e", + "57aeef88ed701a8ebc8e2f0a381b2a6", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:37.929675" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:12:06.693567" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true": { + "content": [ + "7aba324f82d5b4e926a5dd7b46029cb4", + "af8628d9df18b2d3d4f6fd47ef2bb872", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:53.488374" + }, + "sarscov2 - fastq, index, fasta, false": { + "content": [ + "bc02b41697b3a8f1021b02becec24052", + "798439cbd7fd81cbcc5078022dc5479d", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:05.644682" + }, + "sarscov2 - fastq, index, fasta, true": { + "content": [ + "e41d67320815d29ba5f6e9d1ae21902a", + "94fcf617f5b994584c4e8d4044e16b4f", + [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:23:21.837763" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/mem/tests/tags.yml b/modules/nf-core/bwamem2/mem/tests/tags.yml new file mode 100644 index 0000000..134efb2 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/mem: + - "modules/nf-core/bwamem2/mem/**" diff --git a/modules/nf-core/gatk4/indexfeaturefile/environment.yml b/modules/nf-core/gatk4/indexfeaturefile/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/indexfeaturefile/main.nf b/modules/nf-core/gatk4/indexfeaturefile/main.nf new file mode 100644 index 0000000..b1a2698 --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/main.nf @@ -0,0 +1,41 @@ +process GATK4_INDEXFEATUREFILE { + 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/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(feature_file) + + output: + tuple val(meta), path("*.{tbi,idx}"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK IndexFeatureFile] 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" \\ + IndexFeatureFile \\ + --input $feature_file \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/indexfeaturefile/meta.yml b/modules/nf-core/gatk4/indexfeaturefile/meta.yml new file mode 100644 index 0000000..cfc717d --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/meta.yml @@ -0,0 +1,46 @@ +name: gatk4_indexfeaturefile +description: Creates an index for a feature file, e.g. VCF or BED file. +keywords: + - feature + - gatk4 + - index + - indexfeaturefile +tools: + - gatk4: + description: Genome Analysis Toolkit (GATK4) + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + tool_dev_url: https://github.com/broadinstitute/gatk + doi: "10.1158/1538-7445.AM2017-3590" + licence: ["BSD-3-clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - feature_file: + type: file + description: VCF/BED file + pattern: "*.{vcf,vcf.gz,bed,bed.gz}" +output: + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{tbi,idx}": + type: file + description: Index for VCF/BED file + pattern: "*.{tbi,idx}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@santiagorevale" +maintainers: + - "@santiagorevale" diff --git a/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test new file mode 100644 index 0000000..994606f --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test @@ -0,0 +1,105 @@ +// nf-core modules test gatk4/indexfeaturefile +nextflow_process { + + name "Test Process GATK4_INDEXFEATUREFILE" + script "../main.nf" + process "GATK4_INDEXFEATUREFILE" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/indexfeaturefile" + + test("test_gatk4_indexfeaturefile_bed") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("geneome.bed.idx") }, + ) + } + + } + + test("test_gatk4_indexfeaturefile_bed_gz") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("genome.bed.gz.tbi") }, + ) + } + + } + + test("test_gatk4_indexfeaturefile_vcf") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("test.genome.vcf.idx") }, + ) + } + + } + + test("test_gatk4_indexfeaturefile_vcf_gz") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot(file(process.out.index.get(0).get(1)).name).match("test.genome.vcf.gz.tbi") }, + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test.snap b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test.snap new file mode 100644 index 0000000..fc19333 --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/tests/main.nf.test.snap @@ -0,0 +1,132 @@ +{ + "genome.bed.gz.tbi": { + "content": [ + "genome.bed.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:03.068725" + }, + "test_gatk4_indexfeaturefile_vcf": { + "content": [ + [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:20.602472" + }, + "geneome.bed.idx": { + "content": [ + "genome.bed.idx" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:56:46.988441" + }, + "test.genome.vcf.gz.tbi": { + "content": [ + "test.genome.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:51.898472" + }, + "test_gatk4_indexfeaturefile_bed_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.bed.gz.tbi:md5,4bc51e2351a6e83f20e13be75861f941" + ] + ], + "1": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ], + "index": [ + [ + { + "id": "test" + }, + "genome.bed.gz.tbi:md5,4bc51e2351a6e83f20e13be75861f941" + ] + ], + "versions": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:03.058351" + }, + "test_gatk4_indexfeaturefile_vcf_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.genome.vcf.gz.tbi:md5,fedd68eaddf8d31257853d9da8325bd3" + ] + ], + "1": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ], + "index": [ + [ + { + "id": "test" + }, + "test.genome.vcf.gz.tbi:md5,fedd68eaddf8d31257853d9da8325bd3" + ] + ], + "versions": [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:51.861697" + }, + "test.genome.vcf.idx": { + "content": [ + "test.genome.vcf.idx" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:57:20.624337" + }, + "test_gatk4_indexfeaturefile_bed": { + "content": [ + [ + "versions.yml:md5,e01e4575236d930ace929eec9c4c80dd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T18:56:46.885162" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/indexfeaturefile/tests/tags.yml b/modules/nf-core/gatk4/indexfeaturefile/tests/tags.yml new file mode 100644 index 0000000..041bd3d --- /dev/null +++ b/modules/nf-core/gatk4/indexfeaturefile/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/indexfeaturefile: + - "modules/nf-core/gatk4/indexfeaturefile/**" diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml new file mode 100644 index 0000000..3c73c17 --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -0,0 +1,8 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bioconda::gatk4=4.5.0.0 + - bioconda::htslib=1.19.1 + - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/gatk4/markduplicates/main.nf b/modules/nf-core/gatk4/markduplicates/main.nf new file mode 100644 index 0000000..baadefe --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/main.nf @@ -0,0 +1,85 @@ +process GATK4_MARKDUPLICATES { + 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/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0': + 'biocontainers/mulled-v2-d9e7bad0f7fbc8f4458d5c3ab7ffaaf0235b59fb:7cc3d06cbf42e28c5e2ebfc7c858654c7340a9d5-0' }" + + input: + tuple val(meta), path(bam) + 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("*.metrics"), emit: metrics + 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}.bam" + + // 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 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() + } + + // Using samtools and not Markduplicates to compress to CRAM speeds up computation: + // https://medium.com/@acarroll.dna/looking-at-trade-offs-in-compression-levels-for-genomics-tools-eec2834e8b94 + """ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + MarkDuplicates \\ + $input_list \\ + --OUTPUT ${prefix_bam} \\ + --METRICS_FILE ${prefix}.metrics \\ + --TMP_DIR . \\ + ${reference} \\ + $args + + # If cram files are wished as output, the run samtools for conversion + if [[ ${prefix} == *.cram ]]; then + samtools view -Ch -T ${fasta} -o ${prefix} ${prefix_bam} + rm ${prefix_bam} + samtools index ${prefix} + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}.bam" + prefix_no_suffix = task.ext.prefix ? prefix.tokenize('.')[0] : "${meta.id}" + """ + touch ${prefix_no_suffix}.bam + touch ${prefix_no_suffix}.cram + touch ${prefix_no_suffix}.cram.crai + touch ${prefix_no_suffix}.bai + touch ${prefix}.metrics + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/markduplicates/meta.yml b/modules/nf-core/gatk4/markduplicates/meta.yml new file mode 100644 index 0000000..4772c5f --- /dev/null +++ b/modules/nf-core/gatk4/markduplicates/meta.yml @@ -0,0 +1,102 @@ +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. +keywords: + - bam + - gatk4 + - markduplicates + - 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. + 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}" +output: + - cram: + - 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: + - 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: + - 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" + - "@maxulysse" +maintainers: + - "@ajodeh-juma" + - "@FriederikeHanssen" + - "@maxulysse" 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 0000000..0bbfbac --- /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 0000000..04a9b07 --- /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 0000000..bbcf74d --- /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 0000000..336bb37 --- /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 0000000..8632e32 --- /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/gatk4/variantrecalibrator/environment.yml b/modules/nf-core/gatk4/variantrecalibrator/environment.yml new file mode 100644 index 0000000..55993f4 --- /dev/null +++ b/modules/nf-core/gatk4/variantrecalibrator/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/variantrecalibrator/main.nf b/modules/nf-core/gatk4/variantrecalibrator/main.nf new file mode 100644 index 0000000..24844ce --- /dev/null +++ b/modules/nf-core/gatk4/variantrecalibrator/main.nf @@ -0,0 +1,71 @@ +process GATK4_VARIANTRECALIBRATOR { + 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/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(vcf), path(tbi) // input vcf and tbi of variants to recalibrate + path resource_vcf // resource vcf + path resource_tbi // resource tbi + val labels // string (or list of strings) containing dedicated resource labels already formatted with '--resource:' tag + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.recal") , emit: recal + tuple val(meta), path("*.idx") , emit: idx + tuple val(meta), path("*.tranches"), emit: tranches + tuple val(meta), path("*plots.R") , emit: plots, 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_command = fasta ? "--reference $fasta " : '' + def labels_command = labels.join(' ') + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK VariantRecalibrator] 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" \\ + VariantRecalibrator \\ + --variant $vcf \\ + --output ${prefix}.recal \\ + --tranches-file ${prefix}.tranches \\ + $reference_command \\ + --tmp-dir . \\ + $labels_command \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.recal + touch ${prefix}.idx + touch ${prefix}.tranches + touch ${prefix}plots.R + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/variantrecalibrator/meta.yml b/modules/nf-core/gatk4/variantrecalibrator/meta.yml new file mode 100644 index 0000000..72fcfd6 --- /dev/null +++ b/modules/nf-core/gatk4/variantrecalibrator/meta.yml @@ -0,0 +1,112 @@ +name: gatk4_variantrecalibrator +description: | + Build a recalibration model to score variant quality for filtering purposes. + It is highly recommended to follow GATK best practices when using this module, + the gaussian mixture model requires a large number of samples to be used for the + tool to produce optimal results. For example, 30 samples for exome data. For more details see + https://gatk.broadinstitute.org/hc/en-us/articles/4402736812443-Which-training-sets-arguments-should-I-use-for-running-VQSR- +keywords: + - gatk4 + - recalibration model + - variantrecalibrator +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. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + doi: 10.1158/1538-7445.AM2017-3590 + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcf: + type: file + description: input vcf file containing the variants to be recalibrated + pattern: "*.vcf.gz" + - tbi: + type: file + description: tbi file matching with -vcf + pattern: "*.vcf.gz.tbi" + - - resource_vcf: + type: file + description: all resource vcf files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz" + - - resource_tbi: + type: file + description: all resource tbi files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz.tbi" + - - labels: + type: string + description: necessary arguments for GATK VariantRecalibrator. Specified to + directly match the resources provided. More information can be found at + https://gatk.broadinstitute.org/hc/en-us/articles/5358906115227-VariantRecalibrator + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" +output: + - recal: + - meta: + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" + - "*.recal": + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" + - idx: + - meta: + type: file + description: Index file for the recal output file + pattern: "*.idx" + - "*.idx": + type: file + description: Index file for the recal output file + pattern: "*.idx" + - tranches: + - meta: + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" + - "*.tranches": + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" + - plots: + - meta: + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - "*plots.R": + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GCJMackenzie" + - "@nickhsmith" +maintainers: + - "@GCJMackenzie" + - "@nickhsmith" diff --git a/modules/nf-core/iqtree/environment.yml b/modules/nf-core/iqtree/environment.yml new file mode 100644 index 0000000..702c050 --- /dev/null +++ b/modules/nf-core/iqtree/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::iqtree=2.3.4 diff --git a/modules/nf-core/iqtree/main.nf b/modules/nf-core/iqtree/main.nf new file mode 100644 index 0000000..75f6ac7 --- /dev/null +++ b/modules/nf-core/iqtree/main.nf @@ -0,0 +1,131 @@ +process IQTREE { + 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/iqtree:2.3.4--h21ec9f0_0' : + 'biocontainers/iqtree:2.3.4--h21ec9f0_0' }" + + input: + tuple val(meta), path(alignment), path(tree) + path(tree_te) + path(lmclust) + path(mdef) + path(partitions_equal) + path(partitions_proportional) + path(partitions_unlinked) + path(guide_tree) + path(sitefreq_in) + path(constraint_tree) + path(trees_z) + path(suptree) + path(trees_rf) + + output: + tuple val(meta), path("*.treefile") , emit: phylogeny , optional: true + tuple val(meta), path("*.iqtree") , emit: report , optional: true + tuple val(meta), path("*.mldist") , emit: mldist , optional: true + tuple val(meta), path("*.lmap.svg") , emit: lmap_svg , optional: true + tuple val(meta), path("*.lmap.eps") , emit: lmap_eps , optional: true + tuple val(meta), path("*.lmap.quartetlh"), emit: lmap_quartetlh, optional: true + tuple val(meta), path("*.sitefreq") , emit: sitefreq_out , optional: true + tuple val(meta), path("*.ufboot") , emit: bootstrap , optional: true + tuple val(meta), path("*.state") , emit: state , optional: true + tuple val(meta), path("*.contree") , emit: contree , optional: true + tuple val(meta), path("*.nex") , emit: nex , optional: true + tuple val(meta), path("*.splits") , emit: splits , optional: true + tuple val(meta), path("*.suptree") , emit: suptree , optional: true + tuple val(meta), path("*.alninfo") , emit: alninfo , optional: true + tuple val(meta), path("*.partlh") , emit: partlh , optional: true + tuple val(meta), path("*.siteprob") , emit: siteprob , optional: true + tuple val(meta), path("*.sitelh") , emit: sitelh , optional: true + tuple val(meta), path("*.treels") , emit: treels , optional: true + tuple val(meta), path("*.rate ") , emit: rate , optional: true + tuple val(meta), path("*.mlrate") , emit: mlrate , optional: true + tuple val(meta), path("GTRPMIX.nex") , emit: exch_matrix , 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 alignment_arg = alignment ? "-s $alignment" : '' + def tree_arg = tree ? "-t $tree" : '' + def tree_te_arg = tree_te ? "-te $tree_te" : '' + def lmclust_arg = lmclust ? "-lmclust $lmclust" : '' + def mdef_arg = mdef ? "-mdef $mdef" : '' + def partitions_equal_arg = partitions_equal ? "-q $partitions_equal" : '' + def partitions_proportional_arg = partitions_proportional ? "-spp $partitions_proportional" : '' + def partitions_unlinked_arg = partitions_unlinked ? "-sp $partitions_unlinked" : '' + def guide_tree_arg = guide_tree ? "-ft $guide_tree" : '' + def sitefreq_in_arg = sitefreq_in ? "-fs $sitefreq_in" : '' + def constraint_tree_arg = constraint_tree ? "-g $constraint_tree" : '' + def trees_z_arg = trees_z ? "-z $trees_z" : '' + def suptree_arg = suptree ? "-sup $suptree" : '' + def trees_rf_arg = trees_rf ? "-rf $trees_rf" : '' + def prefix = task.ext.prefix ?: meta.id + def memory = task.memory.toString().replaceAll(' ', '') + """ + iqtree \\ + $args \\ + $alignment_arg \\ + $tree_arg \\ + $tree_te_arg \\ + $lmclust_arg \\ + $mdef_arg \\ + $partitions_equal_arg \\ + $partitions_proportional_arg \\ + $partitions_unlinked_arg \\ + $guide_tree_arg \\ + $sitefreq_in_arg \\ + $constraint_tree_arg \\ + $trees_z_arg \\ + $suptree_arg \\ + $trees_rf\\ + -pre $prefix \\ + -nt AUTO \\ + -ntmax $task.cpus \\ + -mem $memory \\ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + iqtree: \$(echo \$(iqtree -version 2>&1) | sed 's/^IQ-TREE multicore version //;s/ .*//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: meta.id + """ + touch "${prefix}.treefile" + touch "${prefix}.iqtree" + touch "${prefix}.mldist" + touch "${prefix}.lmap.svg" + touch "${prefix}.lmap.eps" + touch "${prefix}.lmap.quartetlh" + touch "${prefix}.sitefreq" + touch "${prefix}.ufboot" + touch "${prefix}.state" + touch "${prefix}.contree" + touch "${prefix}.nex" + touch "${prefix}.splits" + touch "${prefix}.suptree" + touch "${prefix}.alninfo" + touch "${prefix}.partlh" + touch "${prefix}.siteprob" + touch "${prefix}.sitelh" + touch "${prefix}.treels" + touch "${prefix}.rate" + touch "${prefix}.mlrate" + touch "GTRPMIX.nex" + touch "${prefix}.log" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + iqtree: \$(echo \$(iqtree -version 2>&1) | sed 's/^IQ-TREE multicore version //;s/ .*//') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/iqtree/meta.yml b/modules/nf-core/iqtree/meta.yml new file mode 100644 index 0000000..b20bdd8 --- /dev/null +++ b/modules/nf-core/iqtree/meta.yml @@ -0,0 +1,358 @@ +name: iqtree +description: Produces a Newick format phylogeny from a multiple sequence alignment + using the maxium likelihood algorithm. Capable of bacterial genome size alignments. +keywords: + - phylogeny + - newick + - maximum likelihood +tools: + - iqtree: + description: Efficient phylogenomic software by maximum likelihood. + homepage: http://www.iqtree.org + documentation: http://www.iqtree.org/doc + tool_dev_url: https://github.com/iqtree/iqtree2 + doi: 10.1093/molbev/msaa015 + licence: ["GPL v2-or-later"] + identifier: biotools:iqtree +input: + - - meta: + type: map + description: | + Groovy map containing sample information for the + alignment/tree file, e.g. [ id: 'test' ] + - alignment: + type: file + description: Input alignment file in PHYLIP, FASTA, NEXUS, CLUSTAL or MSF format + (-s) + pattern: "*.{fasta,fas,fa,mfa,phy,aln,nex,nexus,msf}" + - tree: + type: file + description: "File containing one or multiple phylogenetic trees (-t): - Single + tree used e.g. as starting tree for tree search - Set of trees used e.g. for + distance computation, consensus tree construction" + pattern: "*.{tre,tree,treefile,newick,nwk,nex,nexus}" + - - tree_te: + type: file + description: "File containing single phylogenetic tree (-te) Use cases: - fixed + user tree to skip tree search - ancestral sequence reconstruction" + pattern: "*.{tre,tree,treefile,newick,nwk,nex,nexus}" + - - lmclust: + type: file + description: NEXUS file containing taxon clusters for quartet mapping analysis + (-lmclust) + pattern: "*.nex{us}" + - - mdef: + type: file + description: NEXUS model file defining new models (-mdef) + pattern: "*.nex{us}" + - - partitions_equal: + type: file + description: Partition file for edge-equal partition model, all partitions share + same set of branch lengths (-q) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - partitions_proportional: + type: file + description: Partition file for edge-equal partition model, all partitions share + same set of branch lengths (-spp) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - partitions_unlinked: + type: file + description: Partition file for edge-equal partition model, all partitions share + same set of branch lengths (-sp) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - guide_tree: + type: file + description: File containing guide tree for inference of site frequency profiles + (-ft) + pattern: "*.{nex,nexus,tre,tree,treefile}" + - - sitefreq_in: + type: file + description: Site frequency file (-fs) + pattern: "*.sitefreq" + - - constraint_tree: + type: file + description: File containing opological constraint tree in NEWICK format. The + constraint tree can be a multifurcating tree and need not to include all taxa. + (-g) + pattern: "*.{nwk,newick}" + - - trees_z: + type: file + description: File containing a set of trees for which log-likelihoods should + be computed (-z) + - - suptree: + type: file + description: File containing input “target” tree, support values are extracted + from trees passed via -t, and mapped onto the target tree (-sup) + - - trees_rf: + type: file + description: "File containing a second tree set (-rf). Used for computing the + distance to the primary tree set (`tree`)" + pattern: "*.{tre,tree,treefile,newick,nwk,nex,nexus}" +output: + - phylogeny: + - meta: + type: file + description: A phylogeny in Newick format + pattern: "*.{treefile}" + - "*.treefile": + type: file + description: A phylogeny in Newick format + pattern: "*.{treefile}" + - report: + - meta: + type: file + description: | + Main report file containing computational + results as well as a textual visualization + of the final tree + pattern: "*.{iqtree}" + - "*.iqtree": + type: file + description: | + Main report file containing computational + results as well as a textual visualization + of the final tree + pattern: "*.{iqtree}" + - mldist: + - meta: + type: file + description: | + File containing the pairwise maximum + likelihood distances as a matrix + pattern: "*.{mldist}" + - "*.mldist": + type: file + description: | + File containing the pairwise maximum + likelihood distances as a matrix + pattern: "*.{mldist}" + - lmap_svg: + - meta: + type: file + description: | + File containing likelihood mapping analysis + results in .svg format (-lmap/-lmclust) + pattern: "*.lmap.svg" + - "*.lmap.svg": + type: file + description: | + File containing likelihood mapping analysis + results in .svg format (-lmap/-lmclust) + pattern: "*.lmap.svg" + - lmap_eps: + - meta: + type: file + description: | + File containing likelihood mapping analysis + results in .eps format (-lmap/-lmclust) + pattern: "*.lmap.eps" + - "*.lmap.eps": + type: file + description: | + File containing likelihood mapping analysis + results in .eps format (-lmap/-lmclust) + pattern: "*.lmap.eps" + - lmap_quartetlh: + - meta: + type: file + description: | + File containing quartet log-likelihoods (-wql) + pattern: "*.lmap.quartetlh" + - "*.lmap.quartetlh": + type: file + description: | + File containing quartet log-likelihoods (-wql) + pattern: "*.lmap.quartetlh" + - sitefreq_out: + - meta: + type: file + description: | + File containing site frequency profiles (-ft) + pattern: "*.sitefreq" + - "*.sitefreq": + type: file + description: | + File containing site frequency profiles (-ft) + pattern: "*.sitefreq" + - bootstrap: + - meta: + type: file + description: | + File containing all bootstrap trees (-wbt/-wbtl) + pattern: "*.ufboot" + - "*.ufboot": + type: file + description: | + File containing all bootstrap trees (-wbt/-wbtl) + pattern: "*.ufboot" + - state: + - meta: + type: file + description: | + File containing ancestral sequences for all + nodes of the tree by empirical Bayesian method (-asr) + pattern: "*.{state}" + - "*.state": + type: file + description: | + File containing ancestral sequences for all + nodes of the tree by empirical Bayesian method (-asr) + pattern: "*.{state}" + - contree: + - meta: + type: file + description: | + File containing consensus tree (-con/-bb) + pattern: "*.{contree}" + - "*.contree": + type: file + description: | + File containing consensus tree (-con/-bb) + pattern: "*.{contree}" + - nex: + - meta: + type: file + description: | + File containing consensus network (-net/-bb) + pattern: "*.{nex}" + - "*.nex": + type: file + description: | + File containing consensus network (-net/-bb) + pattern: "*.{nex}" + - splits: + - meta: + type: file + description: | + File containing consensus network in star-dot format (-wsplits) + pattern: "*.{splits}" + - "*.splits": + type: file + description: | + File containing consensus network in star-dot format (-wsplits) + pattern: "*.{splits}" + - suptree: + - meta: + type: file + description: | + File containing tree with assigned support + values based on supplied "target" tree (-sup) + pattern: "*.{suptree}" + - "*.suptree": + type: file + description: | + File containing tree with assigned support + values based on supplied "target" tree (-sup) + pattern: "*.{suptree}" + - alninfo: + - meta: + type: file + description: | + File containing alignment site statistics (-alninfo) + pattern: "*.{alninfo}" + - "*.alninfo": + type: file + description: | + File containing alignment site statistics (-alninfo) + pattern: "*.{alninfo}" + - partlh: + - meta: + type: file + description: | + File containing partition log-likelihoods (-wpl) + pattern: "*.{partlh}" + - "*.partlh": + type: file + description: | + File containing partition log-likelihoods (-wpl) + pattern: "*.{partlh}" + - siteprob: + - meta: + type: file + description: | + File containing site posterior probabilities (-wspr/-wspm/-wspmr) + pattern: "*.{siteprob}" + - "*.siteprob": + type: file + description: | + File containing site posterior probabilities (-wspr/-wspm/-wspmr) + pattern: "*.{siteprob}" + - sitelh: + - meta: + type: file + description: | + File containing site log-likelihoods (-wsl/-wslr/-wslm/-wslmr) + pattern: "*.{sitelh}" + - "*.sitelh": + type: file + description: | + File containing site log-likelihoods (-wsl/-wslr/-wslm/-wslmr) + pattern: "*.{sitelh}" + - treels: + - meta: + type: file + description: | + File containing all locally optimal trees (-wt) + pattern: "*.{treels}" + - "*.treels": + type: file + description: | + File containing all locally optimal trees (-wt) + pattern: "*.{treels}" + - rate: + - meta: + type: file + description: | + File containing inferred site-specific + evolutionary rates (-wsr) + pattern: "*.{rate}" + - "*.rate ": + type: file + description: | + File containing inferred site-specific + evolutionary rates (-wsr) + pattern: "*.{rate}" + - mlrate: + - meta: + type: file + description: | + File containing site-specific subtitution + rates determined by maximum likelihood (--mlrate) + pattern: "*.{mlrate}" + - "*.mlrate": + type: file + description: | + File containing site-specific subtitution + rates determined by maximum likelihood (--mlrate) + pattern: "*.{mlrate}" + - exch_matrix: + - meta: + type: file + description: File containing the exchangeability matrix obtained from the optimization + (--link-exchange-rates) + pattern: "GTRPMIX.nex" + - GTRPMIX.nex: + type: file + description: File containing the exchangeability matrix obtained from the optimization + (--link-exchange-rates) + pattern: "GTRPMIX.nex" + - log: + - meta: + type: file + description: Log file of entire run + pattern: "*.{log}" + - "*.log": + type: file + description: Log file of entire run + pattern: "*.{log}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@avantonder" + - "@aunderwo" +maintainers: + - "@avantonder" + - "@aunderwo" diff --git a/modules/nf-core/iqtree/tests/iqtree_bootstrap.config b/modules/nf-core/iqtree/tests/iqtree_bootstrap.config new file mode 100644 index 0000000..28cc662 --- /dev/null +++ b/modules/nf-core/iqtree/tests/iqtree_bootstrap.config @@ -0,0 +1,5 @@ +process { + withName: "IQTREE" { + ext.args = "-bb 1000 -wbt -wsplits -m LG" + } +} diff --git a/modules/nf-core/iqtree/tests/iqtree_optional.config b/modules/nf-core/iqtree/tests/iqtree_optional.config new file mode 100644 index 0000000..104861f --- /dev/null +++ b/modules/nf-core/iqtree/tests/iqtree_optional.config @@ -0,0 +1,5 @@ +process { + withName: "IQTREE" { + ext.args = "-m C10 -asr -alninfo -wpl -wspr -wsl -wsr --mlrate -lmap 150 -wql --mlrate" + } +} diff --git a/modules/nf-core/iqtree/tests/iqtree_treels.config b/modules/nf-core/iqtree/tests/iqtree_treels.config new file mode 100644 index 0000000..adfe8fb --- /dev/null +++ b/modules/nf-core/iqtree/tests/iqtree_treels.config @@ -0,0 +1,5 @@ +process { + withName: "IQTREE" { + ext.args = "-m LG -wt" + } +} diff --git a/modules/nf-core/iqtree/tests/main.nf.test b/modules/nf-core/iqtree/tests/main.nf.test new file mode 100644 index 0000000..b5f2fb4 --- /dev/null +++ b/modules/nf-core/iqtree/tests/main.nf.test @@ -0,0 +1,323 @@ +nextflow_process { + + name "Test Process IQTREE" + script "../main.nf" + process "IQTREE" + + tag "modules" + tag "modules_nfcore" + tag "iqtree" + + test("setoxin - basic") { + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/multiplesequencealign/testdata/setoxin.ref", checkIfExists:true), + [] ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("1apf") }, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.state == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.splits == []}, + { assert process.out.suptree == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.treels == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.mldist.get(0).get(1)).readLines().first(), + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.versions ).match() } + ) + } + } + +test("setoxin - treels") { + + config "./iqtree_treels.config" + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/multiplesequencealign/testdata/setoxin.ref", checkIfExists:true), + [] ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.treels.get(0).get(1)).readLines().first().contains("1apf") }, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.state == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.splits == []}, + { assert process.out.suptree == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.mldist.get(0).get(1)).readLines().first(), + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.versions ).match() } + ) + } + } + + + test("setoxin - bootstrap") { + + config "./iqtree_bootstrap.config" + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/multiplesequencealign/testdata/setoxin.ref", checkIfExists:true), + [] ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.bootstrap.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.contree.get(0).get(1)).readLines().first().contains("1apf") }, + { assert path(process.out.splits.get(0).get(1)).readLines().first().contains("*") }, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.state == []}, + { assert process.out.suptree == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.treels == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.nex.get(0).get(1)).readLines()[0..12], + path(process.out.mldist.get(0).get(1)).readLines().first(), + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.versions ).match() } + ) + } + } + + test("hydrogenase - sup") { + + when { + process { + """ + input[0] = [ [ id: "test" ], + [], + file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.ft.LGCAT.newick", checkIfExists:true)] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = Channel.of( + file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.ft.LGCAT.newick", checkIfExists:true) + .text) + .collectFile(name: 'hydrogenase.newick') + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.log.get(0).get(1)).readLines().first().contains("IQ-TREE") }, + { assert process.out.phylogeny == []}, + { assert process.out.report == []}, + { assert process.out.mldist == []}, + { assert process.out.lmap_svg == []}, + { assert process.out.lmap_eps == []}, + { assert process.out.lmap_quartetlh == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.state == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.splits == []}, + { assert process.out.alninfo == []}, + { assert process.out.partlh == []}, + { assert process.out.siteprob == []}, + { assert process.out.sitelh == []}, + { assert process.out.treels == []}, + { assert process.out.rate == []}, + { assert process.out.mlrate == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.log.get(0).get(1)).readLines().first(), + process.out.suptree, + process.out.versions ).match() } + ) + } + } + + test("hydrogenase - optional") { + + config "./iqtree_optional.config" + + when { + process { + """ + input[0] = [ [ id: "test" ], + file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.alnfaa", checkIfExists:true), + [] ] + input[1] = file("https://raw.githubusercontent.com/nf-core/test-datasets/phyloplace/testdata/PF14720_seed.ft.LGCAT.newick", checkIfExists:true) + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.phylogeny.get(0).get(1)).readLines().first().contains("E1QGS5_DESB2/226-309") }, + { assert process.out.mldist == []}, + { assert process.out.sitefreq_out == []}, + { assert process.out.bootstrap == []}, + { assert process.out.contree == []}, + { assert process.out.nex == []}, + { assert process.out.suptree == []}, + { assert process.out.partlh == []}, + { assert process.out.exch_matrix == []}, + { assert snapshot( path(process.out.lmap_eps.get(0).get(1)).readLines()[0..4], + path(process.out.lmap_svg.get(0).get(1)).readLines()[0..5], + path(process.out.lmap_quartetlh.get(0).get(1)).readLines().first(), + path(process.out.mlrate.get(0).get(1)).readLines()[0..5], + path(process.out.report.get(0).get(1)).readLines().first(), + path(process.out.log.get(0).get(1)).readLines().first(), + process.out.treels, + process.out.alninfo, + process.out.siteprob, + process.out.sitelh, + process.out.rate, + process.out.state, + process.out.splits, + process.out.versions ).match() } + ) + } + } + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id: "test" ] , [], []] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + input[8] = [] + input[9] = [] + input[10] = [] + input[11] = [] + input[12] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( process.out ).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/iqtree/tests/main.nf.test.snap b/modules/nf-core/iqtree/tests/main.nf.test.snap new file mode 100644 index 0000000..723acaa --- /dev/null +++ b/modules/nf-core/iqtree/tests/main.nf.test.snap @@ -0,0 +1,527 @@ +{ + "setoxin - bootstrap": { + "content": [ + [ + "#nexus", + "", + "BEGIN Taxa;", + "DIMENSIONS ntax=5;", + "TAXLABELS", + "[1] '1apf'", + "[2] '1ahl'", + "[3] '1atx'", + "[4] '1sh1'", + "[5] '1bds'", + ";", + "END; [Taxa]", + "" + ], + "5", + "IQ-TREE 2.3.4 COVID-edition built May 23 2024", + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:47:18.605423192" + }, + "hydrogenase - sup": { + "content": [ + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + [ + { + "id": "test" + }, + "test.suptree:md5,4ad04b2105448a802d5eff346af67786" + ] + ], + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:47:30.839068046" + }, + "setoxin - treels": { + "content": [ + "5", + "IQ-TREE 2.3.4 COVID-edition built May 23 2024", + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:46:58.744510775" + }, + "setoxin - basic": { + "content": [ + "5", + "IQ-TREE 2.3.4 COVID-edition built May 23 2024", + "IQ-TREE multicore version 2.3.4 COVID-edition for Linux x86 64-bit built May 23 2024", + [ + "versions.yml:md5,928c30ebaa6b4f3b8d350ecd918786ee" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:46:43.62067871" + }, + "hydrogenase - optional": { + "content": [ + [ + "%!PS-Adobe-3.0 EPSF-3.0", + "%%BoundingBox: 60 210 550 650", + "%%Pages: 1", + "%%Creator: IQ-TREE/TREE-PUZZLE", + "%%Title: Likelihood Mapping Analysis" + ], + [ + "", + "", + " versions.yml + "${task.process}": + ismapper: \$( echo \$( ismap --version 2>&1 ) | sed 's/^.*ismap //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p results/${prefix} + + touch results/${prefix}/${prefix}_left_final.fastq + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ismapper: \$( echo \$( ismap --version 2>&1 ) | sed 's/^.*ismap //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/ismapper/meta.yml b/modules/nf-core/ismapper/meta.yml new file mode 100644 index 0000000..bb413e7 --- /dev/null +++ b/modules/nf-core/ismapper/meta.yml @@ -0,0 +1,54 @@ +name: ismapper +description: Identify insertion sites positions in bacterial genomes +keywords: + - fastq + - insertion + - bacteria +tools: + - ismapper: + description: A mapping-based tool for identification of the site and orientation + of IS insertions in bacterial genomes. + homepage: https://github.com/jhawkey/IS_mapper + documentation: https://github.com/jhawkey/IS_mapper + tool_dev_url: https://github.com/jhawkey/IS_mapper + doi: "10.1186/s12864-015-1860-2" + licence: ["BSD-3-Clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: A set of paired-end FASTQ files + pattern: "*.{fastq.gz,fq.gz}" + - reference: + type: file + description: Reference genome in GenBank format + pattern: "*.{gbk}" + - query: + type: file + description: Insertion sequences to query in FASTA format + pattern: "*.{fasta,fa}" +output: + - results: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results/*: + type: directory + description: Directory containing ISMapper result files + pattern: "*/*" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@rpetit3" +maintainers: + - "@rpetit3" diff --git a/modules/nf-core/ismapper/tests/main.nf.test b/modules/nf-core/ismapper/tests/main.nf.test new file mode 100644 index 0000000..961f887 --- /dev/null +++ b/modules/nf-core/ismapper/tests/main.nf.test @@ -0,0 +1,88 @@ +import groovy.io.FileType + +nextflow_process { + + name "Test Process ISMAPPER" + script "../main.nf" + process "ISMAPPER" + + tag "modules" + tag "modules_nfcore" + tag "ismapper" + + test("test-ismapper") { + + 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) + ], + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/S_suis_P17.gbk", checkIfExists: true), + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/ISSsu3.fasta", checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { + def all_files = [] + + file(process.out.results[0][1]).eachFileRecurse (FileType.FILES) { file -> + all_files << file + } + + def all_file_names = all_files.collect { it.name }.toSorted() + + def stable_file_names = [ + 'test__AM946016.1_table.txt' + ] + + def stable_files = all_files.findAll { it.name in stable_file_names }.toSorted() + + assert snapshot( + all_file_names, + stable_files, + process.out.versions[0] + ).match() + } + ) + } + } + + test("test-ismapper-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) + ], + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/S_suis_P17.gbk", checkIfExists: true), + file("https://github.com/jhawkey/IS_mapper/raw/master/test/inputs/ISSsu3.fasta", checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/ismapper/tests/main.nf.test.snap b/modules/nf-core/ismapper/tests/main.nf.test.snap new file mode 100644 index 0000000..51318d3 --- /dev/null +++ b/modules/nf-core/ismapper/tests/main.nf.test.snap @@ -0,0 +1,67 @@ +{ + "test-ismapper": { + "content": [ + [ + "test_ISSsu3_left_final.fastq", + "test_ISSsu3_right_final.fastq", + "test__AM946016.1_closest.bed", + "test__AM946016.1_intersect.bed", + "test__AM946016.1_table.txt", + "test_left_AM946016.1_finalcov.bed", + "test_left_AM946016.1_merged.sorted.bed", + "test_left_AM946016.1_unpaired.bed", + "test_right_AM946016.1_finalcov.bed", + "test_right_AM946016.1_merged.sorted.bed", + "test_right_AM946016.1_unpaired.bed" + ], + [ + "test__AM946016.1_table.txt:md5,9e05cda3990cb841db2bfb6e6e04a1f5" + ], + "versions.yml:md5,bbe2280116459026bfc2304b2b6c0f5f" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T14:33:02.03683" + }, + "test-ismapper-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_left_final.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,bbe2280116459026bfc2304b2b6c0f5f" + ], + "results": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_left_final.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,bbe2280116459026bfc2304b2b6c0f5f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T14:31:56.815545" + } +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/filter/environment.yml b/modules/nf-core/lofreq/filter/environment.yml new file mode 100644 index 0000000..011ce6c --- /dev/null +++ b/modules/nf-core/lofreq/filter/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::lofreq=2.1.5 diff --git a/modules/nf-core/lofreq/filter/main.nf b/modules/nf-core/lofreq/filter/main.nf new file mode 100644 index 0000000..a5b6495 --- /dev/null +++ b/modules/nf-core/lofreq/filter/main.nf @@ -0,0 +1,46 @@ +process LOFREQ_FILTER { + 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/lofreq:2.1.5--py38h588ecb2_4' : + 'biocontainers/lofreq:2.1.5--py38h588ecb2_4' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.gz"), emit: vcf + 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}" + """ + lofreq \\ + filter \\ + $args \\ + -i $vcf \\ + -o ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/lofreq/filter/meta.yml b/modules/nf-core/lofreq/filter/meta.yml new file mode 100644 index 0000000..f73d440 --- /dev/null +++ b/modules/nf-core/lofreq/filter/meta.yml @@ -0,0 +1,48 @@ +name: lofreq_filter +description: Lofreq subcommand to remove variants with low coverage or strand bias + potential +keywords: + - variant calling + - low frequency variant calling + - filtering + - lofreq + - lofreq/filter +tools: + - lofreq: + description: A fast and sensitive variant-caller for inferring SNVs and indels + from next-generation sequencing data + homepage: https://csb5.github.io/lofreq/ + documentation: https://csb5.github.io/lofreq/commands/ + doi: "10.1093/nar/gks918 " + licence: ["MIT"] + identifier: biotools:lofreq +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF input file + pattern: "*.{vcf}" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: VCF filtered output file + pattern: "*.{vcf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@bjohnnyd" +maintainers: + - "@bjohnnyd" diff --git a/modules/nf-core/lofreq/filter/tests/main.nf.test b/modules/nf-core/lofreq/filter/tests/main.nf.test new file mode 100644 index 0000000..bff32a8 --- /dev/null +++ b/modules/nf-core/lofreq/filter/tests/main.nf.test @@ -0,0 +1,74 @@ +nextflow_process { + + name "Test Process LOFREQ_FILTER" + script "../main.nf" + process "LOFREQ_FILTER" + + tag "modules" + tag "modules_nfcore" + tag "lofreq" + tag "lofreq/filter" + + test("sarscov2 - vcf") { + when { + process { + """ + input[0] = [ + [ id:'testvcf' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - vcf.gz") { + when { + process { + """ + input[0] = [ + [ id:'testvcf' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - vcf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'testvcf' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.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/lofreq/filter/tests/main.nf.test.snap b/modules/nf-core/lofreq/filter/tests/main.nf.test.snap new file mode 100644 index 0000000..74f46e7 --- /dev/null +++ b/modules/nf-core/lofreq/filter/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "sarscov2 - vcf.gz": { + "content": [ + { + "0": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "1": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ], + "vcf": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "versions": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-24T10:06:37.482906518" + }, + "sarscov2 - vcf": { + "content": [ + { + "0": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "1": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ], + "vcf": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,f5d1d25be974a4dc1cbb7103a4c0c33c" + ] + ], + "versions": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-24T10:06:31.229732594" + }, + "sarscov2 - vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ], + "vcf": [ + [ + { + "id": "testvcf" + }, + "testvcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,efcc2f31cb8b2b23438358460b0643b1" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-24T10:06:46.494604414" + } +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/filter/tests/tags.yml b/modules/nf-core/lofreq/filter/tests/tags.yml new file mode 100644 index 0000000..27d8337 --- /dev/null +++ b/modules/nf-core/lofreq/filter/tests/tags.yml @@ -0,0 +1,2 @@ +lofreq/filter: + - "modules/nf-core/lofreq/filter/**" diff --git a/modules/nf-core/lofreq/indelqual/environment.yml b/modules/nf-core/lofreq/indelqual/environment.yml new file mode 100644 index 0000000..011ce6c --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::lofreq=2.1.5 diff --git a/modules/nf-core/lofreq/indelqual/main.nf b/modules/nf-core/lofreq/indelqual/main.nf new file mode 100644 index 0000000..d73a8d6 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/main.nf @@ -0,0 +1,48 @@ +process LOFREQ_INDELQUAL { + 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/lofreq:2.1.5--py38h588ecb2_4' : + 'biocontainers/lofreq:2.1.5--py38h588ecb2_4' }" + + input: + tuple val(meta), path(bam) + tuple val(meta2), path(fasta) + + 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}" + """ + lofreq indelqual \\ + $args \\ + -f $fasta \\ + -o ${prefix}.bam \\ + $bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lofreq: \$(echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/lofreq/indelqual/meta.yml b/modules/nf-core/lofreq/indelqual/meta.yml new file mode 100644 index 0000000..00788b1 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/meta.yml @@ -0,0 +1,57 @@ +name: lofreq_indelqual +description: Inserts indel qualities in a BAM file +keywords: + - variant calling + - variants + - bam + - indel + - qualities +tools: + - lofreq: + description: Lofreq is a fast and sensitive variant-caller for inferring SNVs + and indels from next-generation sequencing data. It's indelqual programme inserts + indel qualities in a BAM file + homepage: https://csb5.github.io/lofreq/ + doi: "10.1093/nar/gks918" + licence: ["MIT"] + identifier: biotools:lofreq +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}" + - - meta2: + type: map + description: | + Groovy Map containing sample information about the reference fasta + e.g. [ id:'reference' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fasta,fa}" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file with indel qualities inserted into it + pattern: "*.{bam}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kaurravneet4123" +maintainers: + - "@kaurravneet4123" + - "@krannich479" diff --git a/modules/nf-core/lofreq/indelqual/tests/main.nf.test b/modules/nf-core/lofreq/indelqual/tests/main.nf.test new file mode 100644 index 0000000..3771f22 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/main.nf.test @@ -0,0 +1,71 @@ +nextflow_process { + + name "Test Process LOFREQ_INDELQUAL" + script "../main.nf" + process "LOFREQ_INDELQUAL" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "lofreq" + tag "lofreq/indelqual" + + test("sarscov2 - bam") { + + 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:'ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + def bam = file(process.out.bam.get(0).get(1)) + assert bam.exists() + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("sarscov2 - bam - 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.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'ref' ], // 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/lofreq/indelqual/tests/main.nf.test.snap b/modules/nf-core/lofreq/indelqual/tests/main.nf.test.snap new file mode 100644 index 0000000..4090efd --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/main.nf.test.snap @@ -0,0 +1,49 @@ +{ + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.indelqual.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,822d596299afbb3ae6db66bfa9b77b3e" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.indelqual.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,822d596299afbb3ae6db66bfa9b77b3e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-19T13:31:30.184343961" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,822d596299afbb3ae6db66bfa9b77b3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.1" + }, + "timestamp": "2024-07-19T13:30:40.688426508" + } +} \ No newline at end of file diff --git a/modules/nf-core/lofreq/indelqual/tests/nextflow.config b/modules/nf-core/lofreq/indelqual/tests/nextflow.config new file mode 100644 index 0000000..b2eaec1 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: LOFREQ_INDELQUAL { + ext.args = '--dindel' + ext.prefix = { "${meta.id}.indelqual" } + } +} diff --git a/modules/nf-core/lofreq/indelqual/tests/tags.yml b/modules/nf-core/lofreq/indelqual/tests/tags.yml new file mode 100644 index 0000000..4bb53a0 --- /dev/null +++ b/modules/nf-core/lofreq/indelqual/tests/tags.yml @@ -0,0 +1,2 @@ +lofreq/indelqual: + - "modules/nf-core/lofreq/indelqual/**" diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml new file mode 100644 index 0000000..62054fc --- /dev/null +++ b/modules/nf-core/samtools/index/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/index/main.nf b/modules/nf-core/samtools/index/main.nf new file mode 100644 index 0000000..3117561 --- /dev/null +++ b/modules/nf-core/samtools/index/main.nf @@ -0,0 +1,49 @@ +process SAMTOOLS_INDEX { + 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) + + output: + tuple val(meta), path("*.bai") , optional:true, emit: bai + tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai"), optional:true, emit: crai + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + samtools \\ + index \\ + -@ ${task.cpus-1} \\ + $args \\ + $input + + 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 ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" + """ + touch ${input}.${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/index/meta.yml b/modules/nf-core/samtools/index/meta.yml new file mode 100644 index 0000000..db8df0d --- /dev/null +++ b/modules/nf-core/samtools/index/meta.yml @@ -0,0 +1,71 @@ +name: samtools_index +description: Index SAM/BAM/CRAM file +keywords: + - index + - 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: input file +output: + - bai: + - 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: + - 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: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@ewels" + - "@maxulysse" +maintainers: + - "@drpatelh" + - "@ewels" + - "@maxulysse" diff --git a/modules/nf-core/samtools/index/tests/csi.nextflow.config b/modules/nf-core/samtools/index/tests/csi.nextflow.config new file mode 100644 index 0000000..0ed260e --- /dev/null +++ b/modules/nf-core/samtools/index/tests/csi.nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_INDEX { + ext.args = '-c' + } + +} diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test new file mode 100644 index 0000000..ca34fb5 --- /dev/null +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -0,0 +1,140 @@ +nextflow_process { + + name "Test Process SAMTOOLS_INDEX" + script "../main.nf" + process "SAMTOOLS_INDEX" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/index" + + test("bai") { + 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") { + 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") { + config "./csi.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.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([ + [ 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() } + ) + } + } +} diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap new file mode 100644 index 0000000..72d65e8 --- /dev/null +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -0,0 +1,250 @@ +{ + "csi - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:25.261127166" + }, + "crai - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:12.653194876" + }, + "bai - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:01.854932651" + }, + "csi": { + "content": [ + "test.paired_end.sorted.bam.csi", + [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:51.485364222" + }, + "crai": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:40.518873972" + }, + "bai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:21.184050361" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/index/tests/tags.yml b/modules/nf-core/samtools/index/tests/tags.yml new file mode 100644 index 0000000..e0f58a7 --- /dev/null +++ b/modules/nf-core/samtools/index/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/index: + - modules/nf-core/samtools/index/** diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml new file mode 100644 index 0000000..62054fc --- /dev/null +++ b/modules/nf-core/samtools/merge/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/merge/main.nf b/modules/nf-core/samtools/merge/main.nf new file mode 100644 index 0000000..34da4c7 --- /dev/null +++ b/modules/nf-core/samtools/merge/main.nf @@ -0,0 +1,61 @@ +process SAMTOOLS_MERGE { + 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_files, stageAs: "?/*") + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam + tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram + tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai") , optional:true, emit: crai + 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 file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + def reference = fasta ? "--reference ${fasta}" : "" + """ + samtools \\ + merge \\ + --threads ${task.cpus-1} \\ + $args \\ + ${reference} \\ + ${prefix}.${file_type} \\ + $input_files + + 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.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + def index_type = file_type == "bam" ? "csi" : "crai" + def index = args.contains("--write-index") ? "touch ${prefix}.${index_type}" : "" + """ + 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/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml new file mode 100644 index 0000000..235aa21 --- /dev/null +++ b/modules/nf-core/samtools/merge/meta.yml @@ -0,0 +1,104 @@ +name: samtools_merge +description: Merge BAM or CRAM file +keywords: + - merge + - 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_files: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram,sam}" + - - 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}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of the reference file the CRAM was created with (optional) + pattern: "*.fai" +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: 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: CRAM file + pattern: "*.{cram}" + - 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" + - 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" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" + - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/merge/tests/index.config b/modules/nf-core/samtools/merge/tests/index.config new file mode 100644 index 0000000..8c5668c --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--write-index" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test b/modules/nf-core/samtools/merge/tests/main.nf.test new file mode 100644 index 0000000..40b36e8 --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test @@ -0,0 +1,137 @@ +nextflow_process { + + name "Test Process SAMTOOLS_MERGE" + script "../main.nf" + process "SAMTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/merge" + + test("bams") { + + config "./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.methylated.sorted.bam', checkIfExists: true), + 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.single_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, + { assert snapshot(process.out.cram).match("bams_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_csi") }, + { assert snapshot(process.out.crai).match("bams_crai") }, + { assert snapshot(process.out.versions).match("bams_versions") } + ) + } + } + + test("crams") { + + config "./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.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.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([ + [ id:'genome' ], // 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.cram[0][1]).name).match("crams_cram") }, + { assert snapshot(process.out.bam).match("crams_bam") }, + { assert snapshot(file(process.out.crai[0][1]).name).match("crams_crai") }, + { assert snapshot(process.out.csi).match("crams_csi") }, + { assert snapshot(process.out.versions).match("crams_versions") } + ) + } + } + + 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.methylated.sorted.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.cram).match("bam_cram") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.versions).match("bam_versions") } + ) + } + } + + test("bams_stub") { + + config "./index.config" + 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.methylated.sorted.bam', checkIfExists: true), + 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.single_end.sorted.bam', checkIfExists: true) ] + ]) + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, + { assert snapshot(process.out.cram).match("bams_stub_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_stub_csi") }, + { assert snapshot(process.out.crai).match("bams_stub_crai") }, + { assert snapshot(process.out.versions).match("bams_stub_versions") } + ) + } + } +} diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap new file mode 100644 index 0000000..0a41e01 --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -0,0 +1,228 @@ +{ + "crams_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.647389" + }, + "bams_stub_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.937013" + }, + "bams_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.928616" + }, + "bams_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.923289" + }, + "bams_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.925716" + }, + "crams_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.655959" + }, + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.319539" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:30.476887194" + }, + "bams_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.92719" + }, + "bams_stub_csi": { + "content": [ + "test.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.940498" + }, + "bam_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.328852" + }, + "bams_stub_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:52.203823961" + }, + "bam_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.324219" + }, + "bams_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.933153" + }, + "bams_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:29:57.524363148" + }, + "crams_bam": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.650652" + }, + "crams_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:06.977096207" + }, + "bam_csi": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.33292" + }, + "crams_crai": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.653512" + }, + "bams_stub_crai": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.943839" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/tags.yml b/modules/nf-core/samtools/merge/tests/tags.yml new file mode 100644 index 0000000..b869abc --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/merge: + - "modules/nf-core/samtools/merge/**" diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml new file mode 100644 index 0000000..62054fc --- /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 0000000..493525a --- /dev/null +++ b/modules/nf-core/samtools/stats/main.nf @@ -0,0 +1,49 @@ +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 args = task.ext.args ?: '' + 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 0000000..77b020f --- /dev/null +++ b/modules/nf-core/samtools/stats/meta.yml @@ -0,0 +1,66 @@ +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}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - - 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}" +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}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +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 0000000..5bc8930 --- /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 0000000..df507be --- /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/modules/nf-core/samtools/stats/tests/tags.yml b/modules/nf-core/samtools/stats/tests/tags.yml new file mode 100644 index 0000000..7c28e30 --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/stats: + - modules/nf-core/samtools/stats/** diff --git a/modules/nf-core/snpdists/environment.yml b/modules/nf-core/snpdists/environment.yml new file mode 100644 index 0000000..71c52aa --- /dev/null +++ b/modules/nf-core/snpdists/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snp-dists=0.8.2 diff --git a/modules/nf-core/snpdists/main.nf b/modules/nf-core/snpdists/main.nf new file mode 100644 index 0000000..9e8e2b6 --- /dev/null +++ b/modules/nf-core/snpdists/main.nf @@ -0,0 +1,33 @@ +process SNPDISTS { + 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/snp-dists:0.8.2--h5bf99c6_0' : + 'biocontainers/snp-dists:0.8.2--h5bf99c6_0' }" + + input: + tuple val(meta), path(alignment) + + output: + tuple val(meta), path("*.tsv"), emit: tsv + 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}" + """ + snp-dists \\ + $args \\ + $alignment > ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpdists: \$(snp-dists -v 2>&1 | sed 's/snp-dists //;') + END_VERSIONS + """ +} diff --git a/modules/nf-core/snpdists/meta.yml b/modules/nf-core/snpdists/meta.yml new file mode 100644 index 0000000..612638f --- /dev/null +++ b/modules/nf-core/snpdists/meta.yml @@ -0,0 +1,45 @@ +name: snpdists +description: Pairwise SNP distance matrix from a FASTA sequence alignment +keywords: + - snp + - dist + - distance + - matrix +tools: + - snpdists: + description: Convert a FASTA alignment to SNP distance matrix + homepage: https://github.com/tseemann/snp-dists + documentation: https://github.com/tseemann/snp-dists + tool_dev_url: https://github.com/tseemann/snp-dists + licence: ["GPL v3"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - alignment: + type: file + description: The input FASTA sequence alignment file + pattern: "*.{fasta,fasta.gz}" +output: + - tsv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: The output TSV file containing SNP distance matrix + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" +maintainers: + - "@abhi18av" diff --git a/modules/nf-core/snpdists/tests/main.nf.test b/modules/nf-core/snpdists/tests/main.nf.test new file mode 100644 index 0000000..f1d7c7f --- /dev/null +++ b/modules/nf-core/snpdists/tests/main.nf.test @@ -0,0 +1,32 @@ + +nextflow_process { + + name "Test Process SNPDISTS" + script "../main.nf" + process "SNPDISTS" + + tag "modules" + tag "modules_nfcore" + tag "snpdists" + + test("test-snpdists") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/snpdists/tests/main.nf.test.snap b/modules/nf-core/snpdists/tests/main.nf.test.snap new file mode 100644 index 0000000..b38ede9 --- /dev/null +++ b/modules/nf-core/snpdists/tests/main.nf.test.snap @@ -0,0 +1,37 @@ +{ + "test-snpdists": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,0018e5ec43990eb16abe2411fff4e47e" + ] + ], + "1": [ + "versions.yml:md5,62490c6d1f42c5d2eebeea9fcf78f619" + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,0018e5ec43990eb16abe2411fff4e47e" + ] + ], + "versions": [ + "versions.yml:md5,62490c6d1f42c5d2eebeea9fcf78f619" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-28T17:00:19.004853" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpeff/download/environment.yml b/modules/nf-core/snpeff/download/environment.yml new file mode 100644 index 0000000..f2ad925 --- /dev/null +++ b/modules/nf-core/snpeff/download/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snpeff=5.1 diff --git a/modules/nf-core/snpeff/download/main.nf b/modules/nf-core/snpeff/download/main.nf new file mode 100644 index 0000000..e422593 --- /dev/null +++ b/modules/nf-core/snpeff/download/main.nf @@ -0,0 +1,54 @@ +process SNPEFF_DOWNLOAD { + 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/snpeff:5.1--hdfd78af_2' : + 'biocontainers/snpeff:5.1--hdfd78af_2' }" + + input: + tuple val(meta), val(snpeff_db) + + output: + tuple val(meta), path('snpeff_cache'), emit: cache + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def avail_mem = 6144 + if (!task.memory) { + log.info '[snpEff] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + snpEff \\ + -Xmx${avail_mem}M \\ + download ${snpeff_db} \\ + -dataDir \${PWD}/snpeff_cache \\ + ${args} + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ + + stub: + """ + mkdir -p snpeff_cache/${snpeff_db} + + touch snpeff_cache/${snpeff_db}/sequence.I.bin + touch snpeff_cache/${snpeff_db}/sequence.bin + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ +} diff --git a/modules/nf-core/snpeff/download/meta.yml b/modules/nf-core/snpeff/download/meta.yml new file mode 100644 index 0000000..a3211fc --- /dev/null +++ b/modules/nf-core/snpeff/download/meta.yml @@ -0,0 +1,49 @@ +name: snpeff_download +description: Genetic variant annotation and functional effect prediction toolbox +keywords: + - annotation + - effect prediction + - snpeff + - variant + - vcf +tools: + - snpeff: + description: | + SnpEff is a variant annotation and effect prediction tool. + It annotates and predicts the effects of genetic variants on genes and proteins (such as amino acid changes). + homepage: https://pcingola.github.io/SnpEff/ + documentation: https://pcingola.github.io/SnpEff/se_introduction/ + licence: ["MIT"] + identifier: biotools:snpeff +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - genome: + type: file + description: Reference genome in FASTA format + pattern: "*.{fasta,fna,fa}" + - cache_version: + type: string + description: Version of the snpEff cache to download +output: + - cache: + - meta: + type: file + description: | + snpEff cache + - snpeff_cache: + type: file + description: | + snpEff cache + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/snpeff/download/tests/main.nf.test b/modules/nf-core/snpeff/download/tests/main.nf.test new file mode 100644 index 0000000..ef547c6 --- /dev/null +++ b/modules/nf-core/snpeff/download/tests/main.nf.test @@ -0,0 +1,51 @@ + +nextflow_process { + + name "Test Process SNPEFF_DOWNLOAD" + script "../main.nf" + process "SNPEFF_DOWNLOAD" + + tag "modules" + tag "modules_nfcore" + tag "snpeff" + tag "snpeff/download" + + test("test-snpeff-download") { + + when { + process { + """ + input[0] = [ [ id:"WBcel235.105" ], "WBcel235.105" ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-snpeff-download-stub") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:"WBcel235.105" ], "WBcel235.105" ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/snpeff/download/tests/main.nf.test.snap b/modules/nf-core/snpeff/download/tests/main.nf.test.snap new file mode 100644 index 0000000..5bccdd8 --- /dev/null +++ b/modules/nf-core/snpeff/download/tests/main.nf.test.snap @@ -0,0 +1,100 @@ +{ + "test-snpeff-download-stub": { + "content": [ + { + "0": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "sequence.bin:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ], + "cache": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "sequence.bin:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-19T12:48:45.183665736" + }, + "test-snpeff-download": { + "content": [ + { + "0": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,2fd1694bd91cf7952cbad8cfed161e53", + "sequence.II.bin:md5,bacedbdea89508e108223767fa260a4c", + "sequence.III.bin:md5,444118a9fb9d0a03c37e86094d8e52a9", + "sequence.IV.bin:md5,ff756628faa0b71cd65495668c3d82b5", + "sequence.V.bin:md5,d6ad5476162ac45829f719dd4ee3f4e7", + "sequence.X.bin:md5,b79bec6cc8f96b8373dac56bab5d0a6c", + "sequence.bin:md5,ec2bc2ae81755ab90fcf1848bc7ce41f", + "snpEffectPredictor.bin:md5,1d99251d0405f0a42913ed8b5b2c2fa7" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ], + "cache": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,2fd1694bd91cf7952cbad8cfed161e53", + "sequence.II.bin:md5,bacedbdea89508e108223767fa260a4c", + "sequence.III.bin:md5,444118a9fb9d0a03c37e86094d8e52a9", + "sequence.IV.bin:md5,ff756628faa0b71cd65495668c3d82b5", + "sequence.V.bin:md5,d6ad5476162ac45829f719dd4ee3f4e7", + "sequence.X.bin:md5,b79bec6cc8f96b8373dac56bab5d0a6c", + "sequence.bin:md5,ec2bc2ae81755ab90fcf1848bc7ce41f", + "snpEffectPredictor.bin:md5,1d99251d0405f0a42913ed8b5b2c2fa7" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T14:27:47.123555" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpeff/snpeff/environment.yml b/modules/nf-core/snpeff/snpeff/environment.yml new file mode 100644 index 0000000..f2ad925 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snpeff=5.1 diff --git a/modules/nf-core/snpeff/snpeff/main.nf b/modules/nf-core/snpeff/snpeff/main.nf new file mode 100644 index 0000000..28d1382 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/main.nf @@ -0,0 +1,62 @@ +process SNPEFF_SNPEFF { + 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/snpeff:5.1--hdfd78af_2' : + 'biocontainers/snpeff:5.1--hdfd78af_2' }" + + input: + tuple val(meta), path(vcf) + val db + tuple val(meta2), path(cache) + + output: + tuple val(meta), path("*.ann.vcf"), emit: vcf + tuple val(meta), path("*.csv"), emit: report + tuple val(meta), path("*.html"), emit: summary_html + tuple val(meta), path("*.genes.txt"), emit: genes_txt + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def avail_mem = 6144 + if (!task.memory) { + log.info '[snpEff] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + def prefix = task.ext.prefix ?: "${meta.id}" + def cache_command = cache ? "-dataDir \${PWD}/${cache}" : "" + """ + snpEff \\ + -Xmx${avail_mem}M \\ + $db \\ + $args \\ + -csvStats ${prefix}.csv \\ + $cache_command \\ + $vcf \\ + > ${prefix}.ann.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.ann.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpeff: \$(echo \$(snpEff -version 2>&1) | cut -f 2 -d ' ') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/snpeff/snpeff/meta.yml b/modules/nf-core/snpeff/snpeff/meta.yml new file mode 100644 index 0000000..ef3d495 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/meta.yml @@ -0,0 +1,90 @@ +name: snpeff_snpeff +description: Genetic variant annotation and functional effect prediction toolbox +keywords: + - annotation + - effect prediction + - snpeff + - variant + - vcf +tools: + - snpeff: + description: | + SnpEff is a variant annotation and effect prediction tool. + It annotates and predicts the effects of genetic variants on genes and proteins (such as amino acid changes). + homepage: https://pcingola.github.io/SnpEff/ + documentation: https://pcingola.github.io/SnpEff/se_introduction/ + licence: ["MIT"] + identifier: biotools:snpeff +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - - db: + type: string + description: | + which db to annotate with + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cache: + type: file + description: | + path to snpEff cache (optional) +output: + - vcf: + - meta: + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - "*.ann.vcf": + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - report: + - meta: + type: file + description: snpEff report csv file + pattern: "*.csv" + - "*.csv": + type: file + description: snpEff report csv file + pattern: "*.csv" + - summary_html: + - meta: + type: file + description: snpEff summary statistics in html file + pattern: "*.html" + - "*.html": + type: file + description: snpEff summary statistics in html file + pattern: "*.html" + - genes_txt: + - meta: + type: file + description: txt (tab separated) file having counts of the number of variants + affecting each transcript and gene + pattern: "*.genes.txt" + - "*.genes.txt": + type: file + description: txt (tab separated) file having counts of the number of variants + affecting each transcript and gene + pattern: "*.genes.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/snpeff/snpeff/tests/main.nf.test b/modules/nf-core/snpeff/snpeff/tests/main.nf.test new file mode 100644 index 0000000..2be0b7d --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/main.nf.test @@ -0,0 +1,51 @@ +nextflow_process { + + name "Test Process SNPEFF_SNPEFF" + script "../main.nf" + process "SNPEFF_SNPEFF" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "modules_snpeff" + tag "snpeff" + tag "snpeff/download" + tag "snpeff/snpeff" + + test("test_SNPEFF_SNPEFF") { + + setup { + run("SNPEFF_DOWNLOAD") { + script "../../download/main.nf" + process { + """ + input[0] = Channel.of([[id:params.snpeff_db], params.snpeff_db]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ]) + input[1] = params.snpeff_db + input[2] = SNPEFF_DOWNLOAD.out.cache + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.report[0][1]).exists() }, + { assert path(process.out.summary_html[0][1]).exists() }, + { assert path(process.out.vcf[0][1]).exists() }, + { assert snapshot(process.out.genes_txt).match("genes_txt") }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } +} diff --git a/modules/nf-core/snpeff/snpeff/tests/main.nf.test.snap b/modules/nf-core/snpeff/snpeff/tests/main.nf.test.snap new file mode 100644 index 0000000..0891b84 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/main.nf.test.snap @@ -0,0 +1,31 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,25d44a118d558b331d51ec00be0d997c" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T17:37:18.879477" + }, + "genes_txt": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.genes.txt:md5,130536bf0237d7f3f746d32aaa32840a" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T17:37:18.874822" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpeff/snpeff/tests/nextflow.config b/modules/nf-core/snpeff/snpeff/tests/nextflow.config new file mode 100644 index 0000000..a950a04 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/nextflow.config @@ -0,0 +1,3 @@ +params { + snpeff_db = "WBcel235.105" +} diff --git a/modules/nf-core/snpeff/snpeff/tests/tags.yml b/modules/nf-core/snpeff/snpeff/tests/tags.yml new file mode 100644 index 0000000..427b588 --- /dev/null +++ b/modules/nf-core/snpeff/snpeff/tests/tags.yml @@ -0,0 +1,2 @@ +snpeff/snpeff: + - "modules/nf-core/snpeff/snpeff/**" diff --git a/modules/nf-core/snpsites/environment.yml b/modules/nf-core/snpsites/environment.yml new file mode 100644 index 0000000..642d9a7 --- /dev/null +++ b/modules/nf-core/snpsites/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::snp-sites=2.5.1 diff --git a/modules/nf-core/snpsites/main.nf b/modules/nf-core/snpsites/main.nf new file mode 100644 index 0000000..c0cc608 --- /dev/null +++ b/modules/nf-core/snpsites/main.nf @@ -0,0 +1,50 @@ +process SNPSITES { + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/snp-sites:2.5.1--hed695b0_0' : + 'biocontainers/snp-sites:2.5.1--hed695b0_0' }" + + input: + path alignment + + output: + path "*.fas" , emit: fasta + path "*.sites.txt" , emit: constant_sites + path "versions.yml" , emit: versions + env CONSTANT_SITES, emit: constant_sites_string + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + snp-sites \\ + $alignment \\ + $args \\ + > filtered_alignment.fas + + echo \$(snp-sites -C $alignment) > constant.sites.txt + + CONSTANT_SITES=\$(cat constant.sites.txt) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpsites: \$(snp-sites -V 2>&1 | sed 's/snp-sites //') + END_VERSIONS + """ + stub: + """ + touch filtered_alignment.fas + touch constant.sites.txt + CONSTANT_SITES=\$(cat constant.sites.txt) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + snpsites: \$(snp-sites -V 2>&1 | sed 's/snp-sites //') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/snpsites/meta.yml b/modules/nf-core/snpsites/meta.yml new file mode 100644 index 0000000..eafac8e --- /dev/null +++ b/modules/nf-core/snpsites/meta.yml @@ -0,0 +1,43 @@ +name: snpsites +description: Rapidly extracts SNPs from a multi-FASTA alignment. +keywords: + - SNPs + - invariant + - constant +tools: + - snpsites: + description: Rapidly extracts SNPs from a multi-FASTA alignment. + homepage: https://www.sanger.ac.uk/tool/snp-sites/ + documentation: https://github.com/sanger-pathogens/snp-sites + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - alignment: + type: file + description: fasta alignment file + pattern: "*.{fasta,fas,fa,aln}" +output: + - fasta: + - "*.fas": + type: file + description: Variant fasta file + pattern: "*.{fas}" + - constant_sites: + - "*.sites.txt": + type: file + description: Text file containing counts of constant sites + pattern: "*.{sites.txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + - constant_sites_string: + - CONSTANT_SITES: + type: integer + description: Value with the number of constant sites + pattern: "*.{sites.txt}" +authors: + - "@avantonder" +maintainers: + - "@avantonder" diff --git a/modules/nf-core/snpsites/tests/main.nf.test b/modules/nf-core/snpsites/tests/main.nf.test new file mode 100644 index 0000000..60ae4b9 --- /dev/null +++ b/modules/nf-core/snpsites/tests/main.nf.test @@ -0,0 +1,49 @@ +nextflow_process { + + name "Test Process SNPSITES" + script "../main.nf" + process "SNPSITES" + + tag "modules" + tag "modules_nfcore" + tag "snpsites" + + test("sarscov2 - all_sites_fas") { + + when { + process { + """ + input[0] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/all_sites.fas', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - all_sites_fas - stub") { + options "-stub" + when { + process { + """ + input[0] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/all_sites.fas', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/snpsites/tests/main.nf.test.snap b/modules/nf-core/snpsites/tests/main.nf.test.snap new file mode 100644 index 0000000..71522e3 --- /dev/null +++ b/modules/nf-core/snpsites/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "sarscov2 - all_sites_fas - stub": { + "content": [ + { + "0": [ + "filtered_alignment.fas:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "1": [ + "constant.sites.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "2": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ], + "3": [ + "" + ], + "constant_sites": [ + "constant.sites.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "constant_sites_string": [ + "" + ], + "fasta": [ + "filtered_alignment.fas:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "versions": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T15:20:57.589176616" + }, + "sarscov2 - all_sites_fas": { + "content": [ + { + "0": [ + "filtered_alignment.fas:md5,f96c7513003e878e16fa9eac9fcda0f4" + ], + "1": [ + "constant.sites.txt:md5,8b9b226e3787f7baaefce07405af22c9" + ], + "2": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ], + "3": [ + "8789,5363,5747,9456" + ], + "constant_sites": [ + "constant.sites.txt:md5,8b9b226e3787f7baaefce07405af22c9" + ], + "constant_sites_string": [ + "8789,5363,5747,9456" + ], + "fasta": [ + "filtered_alignment.fas:md5,f96c7513003e878e16fa9eac9fcda0f4" + ], + "versions": [ + "versions.yml:md5,af6942a02036a7ff2eadb6ecf344c619" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T15:15:41.760289537" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpsites/tests/tags.yml b/modules/nf-core/snpsites/tests/tags.yml new file mode 100644 index 0000000..d33ff71 --- /dev/null +++ b/modules/nf-core/snpsites/tests/tags.yml @@ -0,0 +1,2 @@ +snpsites: + - "modules/nf-core/snpsites/**" diff --git a/modules/nf-core/tabix/bgzip/environment.yml b/modules/nf-core/tabix/bgzip/environment.yml new file mode 100644 index 0000000..017c259 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bioconda::htslib=1.20 + - bioconda::tabix=1.11 diff --git a/modules/nf-core/tabix/bgzip/main.nf b/modules/nf-core/tabix/bgzip/main.nf new file mode 100644 index 0000000..67991c7 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/main.nf @@ -0,0 +1,55 @@ +process TABIX_BGZIP { + 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/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("${output}") , emit: output + tuple val(meta), path("${output}.gzi"), emit: gzi, 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}" + in_bgzip = ["gz", "bgz", "bgzf"].contains(input.getExtension()) + extension = in_bgzip ? input.getBaseName().tokenize(".")[-1] : input.getExtension() + output = in_bgzip ? "${prefix}.${extension}" : "${prefix}.${extension}.gz" + command = in_bgzip ? '-d' : '' + // Name the index according to $prefix, unless a name has been requested + if ((args.matches("(^| )-i\\b") || args.matches("(^| )--index(\$| )")) && !args.matches("(^| )-I\\b") && !args.matches("(^| )--index-name\\b")) { + args = args + " -I ${output}.gzi" + } + """ + bgzip $command -c $args -@${task.cpus} $input > ${output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + in_bgzip = ["gz", "bgz", "bgzf"].contains(input.getExtension()) + output = in_bgzip ? input.getBaseName() : "${prefix}.${input.getExtension()}.gz" + + """ + echo "" | gzip > ${output} + touch ${output}.gzi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tabix/bgzip/meta.yml b/modules/nf-core/tabix/bgzip/meta.yml new file mode 100644 index 0000000..131e92c --- /dev/null +++ b/modules/nf-core/tabix/bgzip/meta.yml @@ -0,0 +1,61 @@ +name: tabix_bgzip +description: Compresses/decompresses files +keywords: + - compress + - decompress + - bgzip + - tabix +tools: + - bgzip: + description: | + Bgzip compresses or decompresses files in a similar manner to, and compatible with, gzip. + homepage: https://www.htslib.org/doc/tabix.html + documentation: http://www.htslib.org/doc/bgzip.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + identifier: biotools:tabix +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: file to compress or to decompress +output: + - output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}: + type: file + description: Output compressed/decompressed file + pattern: "*." + - gzi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}.gzi: + 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" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" + - "@nvnieuwk" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" + - "@nvnieuwk" diff --git a/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config b/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config new file mode 100644 index 0000000..6b6ff55 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIP { + ext.args = ' -i' + } +} diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test b/modules/nf-core/tabix/bgzip/tests/main.nf.test new file mode 100644 index 0000000..d784aa0 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test @@ -0,0 +1,111 @@ +nextflow_process { + + name "Test Process TABIX_BGZIP" + script "modules/nf-core/tabix/bgzip/main.nf" + process "TABIX_BGZIP" + + tag "modules" + tag "modules_nfcore" + tag "tabix" + tag "tabix/bgzip" + + test("sarscov2_vcf_bgzip_compress") { + when { + process { + """ + input[0] = [ + [ id:'bgzip_test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("bgzip_test") + } + ) + } + } + + test("homo_genome_bedgz_compress") { + when { + process { + """ + input[0] = [ + [ id:'bedgz_test' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("bedgz_test") + } + ) + } + } + + test("sarscov2_vcf_bgzip_compress_stub") { + options '-stub' + config "./bgzip_compress.config" + + when { + process { + """ + input[0] = [ + [ id:"test_stub" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("test_stub") + } + ) + } + } + + test("sarscov2_vcf_bgzip_compress_gzi") { + config "./bgzip_compress.config" + when { + process { + """ + input[0] = [ + [ id:"gzi_compress_test" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gzi[0][1]).name + ).match("gzi_compress_test") + } + ) + } + } +} diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap new file mode 100644 index 0000000..0748143 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap @@ -0,0 +1,218 @@ +{ + "gzi_compress_test": { + "content": [ + "gzi_compress_test.vcf.gz.gzi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:29.328146" + }, + "homo_genome_bedgz_compress": { + "content": [ + { + "0": [ + [ + { + "id": "bedgz_test" + }, + "bedgz_test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + + ], + "output": [ + [ + { + "id": "bedgz_test" + }, + "bedgz_test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:34.159992362" + }, + "test_stub": { + "content": [ + "test_stub.vcf.gz" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:20.811489" + }, + "sarscov2_vcf_bgzip_compress": { + "content": [ + { + "0": [ + [ + { + "id": "bgzip_test" + }, + "bgzip_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + + ], + "output": [ + [ + { + "id": "bgzip_test" + }, + "bgzip_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:22.087769106" + }, + "sarscov2_vcf_bgzip_compress_gzi": { + "content": [ + { + "0": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz.gzi:md5,26fd00d4e26141cd11561f6e7d4a2ad0" + ] + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz.gzi:md5,26fd00d4e26141cd11561f6e7d4a2ad0" + ] + ], + "output": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:57.15091665" + }, + "bgzip_test": { + "content": [ + "bgzip_test.vcf.gz" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:03.768295" + }, + "bedgz_test": { + "content": [ + "bedgz_test.bed" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:52:12.453855" + }, + "sarscov2_vcf_bgzip_compress_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ], + "gzi": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "output": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:45.219404786" + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/bgzip/tests/tags.yml b/modules/nf-core/tabix/bgzip/tests/tags.yml new file mode 100644 index 0000000..de0eec8 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/tags.yml @@ -0,0 +1,2 @@ +tabix/bgzip: + - "modules/nf-core/tabix/bgzip/**" diff --git a/modules/nf-core/tabix/bgzip/tests/vcf_none.config b/modules/nf-core/tabix/bgzip/tests/vcf_none.config new file mode 100644 index 0000000..f3a3c46 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/vcf_none.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIP { + ext.args = '' + } +} From ae797fbe2330c42da471c00736ba86cf394b072f Mon Sep 17 00:00:00 2001 From: "Davi Marcon (@Mxrcon)" Date: Mon, 28 Oct 2024 11:26:50 -0300 Subject: [PATCH 08/39] update modules to nf-core folder structure [ci skip] --- modules/local/mtbseq/tbamend/environment.yml | 0 modules/local/mtbseq/{tbamend.nf => tbamend/main.nf} | 0 modules/local/mtbseq/tbamend/meta.yml | 0 modules/local/mtbseq/tbbwa/environment.yml | 0 modules/local/mtbseq/{tbbwa.nf => tbbwa/main.nf} | 0 modules/local/mtbseq/tbbwa/meta.yml | 0 modules/local/mtbseq/tbfull/environment.yml | 0 modules/local/mtbseq/{tbfull.nf => tbfull/main.nf} | 0 modules/local/mtbseq/tbfull/meta.yml | 0 modules/local/mtbseq/tbgroups/environment.yml | 0 modules/local/mtbseq/{tbgroups.nf => tbgroups/main.nf} | 0 modules/local/mtbseq/tbgroups/meta.yml | 0 modules/local/mtbseq/tbjoin/environment.yml | 0 modules/local/mtbseq/{tbjoin.nf => tbjoin/main.nf} | 0 modules/local/mtbseq/tbjoin/meta.yml | 0 modules/local/mtbseq/tblist/environment.yml | 0 modules/local/mtbseq/{tblist.nf => tblist/main.nf} | 0 modules/local/mtbseq/tblist/meta.yml | 0 modules/local/mtbseq/tbpile/environment.yml | 0 modules/local/mtbseq/{tbpile.nf => tbpile/main.nf} | 0 modules/local/mtbseq/tbpile/meta.yml | 0 modules/local/mtbseq/tbrefine/environment.yml | 0 modules/local/mtbseq/{tbrefine.nf => tbrefine/main.nf} | 0 modules/local/mtbseq/tbrefine/meta.yml | 0 modules/local/mtbseq/tbstats/environment.yml | 0 modules/local/mtbseq/{tbstats.nf => tbstats/main.nf} | 0 modules/local/mtbseq/tbstats/meta.yml | 0 modules/local/mtbseq/tbstrains/environment.yml | 0 modules/local/mtbseq/{tbstrains.nf => tbstrains/main.nf} | 0 modules/local/mtbseq/tbstrains/meta.yml | 0 modules/local/mtbseq/tbvariants/environment.yml | 0 modules/local/mtbseq/{tbvariants.nf => tbvariants/main.nf} | 0 modules/local/mtbseq/tbvariants/meta.yml | 0 33 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 modules/local/mtbseq/tbamend/environment.yml rename modules/local/mtbseq/{tbamend.nf => tbamend/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbamend/meta.yml create mode 100644 modules/local/mtbseq/tbbwa/environment.yml rename modules/local/mtbseq/{tbbwa.nf => tbbwa/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbbwa/meta.yml create mode 100644 modules/local/mtbseq/tbfull/environment.yml rename modules/local/mtbseq/{tbfull.nf => tbfull/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbfull/meta.yml create mode 100644 modules/local/mtbseq/tbgroups/environment.yml rename modules/local/mtbseq/{tbgroups.nf => tbgroups/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbgroups/meta.yml create mode 100644 modules/local/mtbseq/tbjoin/environment.yml rename modules/local/mtbseq/{tbjoin.nf => tbjoin/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbjoin/meta.yml create mode 100644 modules/local/mtbseq/tblist/environment.yml rename modules/local/mtbseq/{tblist.nf => tblist/main.nf} (100%) create mode 100644 modules/local/mtbseq/tblist/meta.yml create mode 100644 modules/local/mtbseq/tbpile/environment.yml rename modules/local/mtbseq/{tbpile.nf => tbpile/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbpile/meta.yml create mode 100644 modules/local/mtbseq/tbrefine/environment.yml rename modules/local/mtbseq/{tbrefine.nf => tbrefine/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbrefine/meta.yml create mode 100644 modules/local/mtbseq/tbstats/environment.yml rename modules/local/mtbseq/{tbstats.nf => tbstats/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbstats/meta.yml create mode 100644 modules/local/mtbseq/tbstrains/environment.yml rename modules/local/mtbseq/{tbstrains.nf => tbstrains/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbstrains/meta.yml create mode 100644 modules/local/mtbseq/tbvariants/environment.yml rename modules/local/mtbseq/{tbvariants.nf => tbvariants/main.nf} (100%) create mode 100644 modules/local/mtbseq/tbvariants/meta.yml diff --git a/modules/local/mtbseq/tbamend/environment.yml b/modules/local/mtbseq/tbamend/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbamend.nf b/modules/local/mtbseq/tbamend/main.nf similarity index 100% rename from modules/local/mtbseq/tbamend.nf rename to modules/local/mtbseq/tbamend/main.nf diff --git a/modules/local/mtbseq/tbamend/meta.yml b/modules/local/mtbseq/tbamend/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbbwa/environment.yml b/modules/local/mtbseq/tbbwa/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbbwa.nf b/modules/local/mtbseq/tbbwa/main.nf similarity index 100% rename from modules/local/mtbseq/tbbwa.nf rename to modules/local/mtbseq/tbbwa/main.nf diff --git a/modules/local/mtbseq/tbbwa/meta.yml b/modules/local/mtbseq/tbbwa/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbfull/environment.yml b/modules/local/mtbseq/tbfull/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbfull.nf b/modules/local/mtbseq/tbfull/main.nf similarity index 100% rename from modules/local/mtbseq/tbfull.nf rename to modules/local/mtbseq/tbfull/main.nf diff --git a/modules/local/mtbseq/tbfull/meta.yml b/modules/local/mtbseq/tbfull/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbgroups/environment.yml b/modules/local/mtbseq/tbgroups/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbgroups.nf b/modules/local/mtbseq/tbgroups/main.nf similarity index 100% rename from modules/local/mtbseq/tbgroups.nf rename to modules/local/mtbseq/tbgroups/main.nf diff --git a/modules/local/mtbseq/tbgroups/meta.yml b/modules/local/mtbseq/tbgroups/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbjoin/environment.yml b/modules/local/mtbseq/tbjoin/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbjoin.nf b/modules/local/mtbseq/tbjoin/main.nf similarity index 100% rename from modules/local/mtbseq/tbjoin.nf rename to modules/local/mtbseq/tbjoin/main.nf diff --git a/modules/local/mtbseq/tbjoin/meta.yml b/modules/local/mtbseq/tbjoin/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tblist/environment.yml b/modules/local/mtbseq/tblist/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tblist.nf b/modules/local/mtbseq/tblist/main.nf similarity index 100% rename from modules/local/mtbseq/tblist.nf rename to modules/local/mtbseq/tblist/main.nf diff --git a/modules/local/mtbseq/tblist/meta.yml b/modules/local/mtbseq/tblist/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbpile/environment.yml b/modules/local/mtbseq/tbpile/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbpile.nf b/modules/local/mtbseq/tbpile/main.nf similarity index 100% rename from modules/local/mtbseq/tbpile.nf rename to modules/local/mtbseq/tbpile/main.nf diff --git a/modules/local/mtbseq/tbpile/meta.yml b/modules/local/mtbseq/tbpile/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbrefine/environment.yml b/modules/local/mtbseq/tbrefine/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbrefine.nf b/modules/local/mtbseq/tbrefine/main.nf similarity index 100% rename from modules/local/mtbseq/tbrefine.nf rename to modules/local/mtbseq/tbrefine/main.nf diff --git a/modules/local/mtbseq/tbrefine/meta.yml b/modules/local/mtbseq/tbrefine/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbstats/environment.yml b/modules/local/mtbseq/tbstats/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbstats.nf b/modules/local/mtbseq/tbstats/main.nf similarity index 100% rename from modules/local/mtbseq/tbstats.nf rename to modules/local/mtbseq/tbstats/main.nf diff --git a/modules/local/mtbseq/tbstats/meta.yml b/modules/local/mtbseq/tbstats/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbstrains/environment.yml b/modules/local/mtbseq/tbstrains/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbstrains.nf b/modules/local/mtbseq/tbstrains/main.nf similarity index 100% rename from modules/local/mtbseq/tbstrains.nf rename to modules/local/mtbseq/tbstrains/main.nf diff --git a/modules/local/mtbseq/tbstrains/meta.yml b/modules/local/mtbseq/tbstrains/meta.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbvariants/environment.yml b/modules/local/mtbseq/tbvariants/environment.yml new file mode 100644 index 0000000..e69de29 diff --git a/modules/local/mtbseq/tbvariants.nf b/modules/local/mtbseq/tbvariants/main.nf similarity index 100% rename from modules/local/mtbseq/tbvariants.nf rename to modules/local/mtbseq/tbvariants/main.nf diff --git a/modules/local/mtbseq/tbvariants/meta.yml b/modules/local/mtbseq/tbvariants/meta.yml new file mode 100644 index 0000000..e69de29 From 68b17820d9ea656179e26c34296402524dae8e8e Mon Sep 17 00:00:00 2001 From: "Davi Marcon (@Mxrcon)" Date: Mon, 28 Oct 2024 11:40:02 -0300 Subject: [PATCH 09/39] update module importation on base workflows [ci skip] --- subworkflows/local/mtbseq/parallel_mode.nf | 20 ++++++------ subworkflows/local/mtbseq/quality_check.nf | 38 ++++++++++++++++++++++ workflows/mtbseqnf.nf | 16 ++++----- 3 files changed, 56 insertions(+), 18 deletions(-) create mode 100644 subworkflows/local/mtbseq/quality_check.nf diff --git a/subworkflows/local/mtbseq/parallel_mode.nf b/subworkflows/local/mtbseq/parallel_mode.nf index f8a9ddc..9e6ed76 100644 --- a/subworkflows/local/mtbseq/parallel_mode.nf +++ b/subworkflows/local/mtbseq/parallel_mode.nf @@ -1,13 +1,13 @@ -include { TBBWA } from '../../../modules/mtbseq/tbbwa.nf' -include { TBREFINE } from '../../../modules/mtbseq/tbrefine.nf' -include { TBPILE } from '../../../modules/mtbseq/tbpile.nf' -include { TBLIST } from '../../../modules/mtbseq/tblist.nf' -include { TBVARIANTS } from '../../../modules/mtbseq/tbvariants.nf' -include { TBSTATS } from '../../../modules/mtbseq/tbstats.nf' -include { TBSTRAINS } from '../../../modules/mtbseq/tbstrains.nf' -include { TBJOIN } from '../../../modules/mtbseq/tbjoin.nf' -include { TBAMEND } from '../../../modules/mtbseq/tbamend.nf' -include { TBGROUPS } from '../../../modules/mtbseq/tbgroups.nf' +include { TBBWA } from '../../../modules/local/mtbseq/tbbwa/main' +include { TBREFINE } from '../../../modules/local/mtbseq/tbrefine/main' +include { TBPILE } from '../../../modules/local/mtbseq/tbpile/main' +include { TBLIST } from '../../../modules/local/mtbseq/tblist/main' +include { TBVARIANTS } from '../../../modules/local/mtbseq/tbvariants/main' +include { TBSTATS } from '../../../modules/local/mtbseq/tbstats/main' +include { TBSTRAINS } from '../../../modules/local/mtbseq/tbstrains/main' +include { TBJOIN } from '../../../modules/local/mtbseq/tbjoin/main' +include { TBAMEND } from '../../../modules/local/mtbseq/tbamend/main' +include { TBGROUPS } from '../../../modules/local/mtbseq/tbgroups/main' diff --git a/subworkflows/local/mtbseq/quality_check.nf b/subworkflows/local/mtbseq/quality_check.nf new file mode 100644 index 0000000..10556e6 --- /dev/null +++ b/subworkflows/local/mtbseq/quality_check.nf @@ -0,0 +1,38 @@ +include { FASTQC } from '../../../modules/nf-core/fastqc/main' +include { RENAME_FILES } from '../../../modules/utils/rename_files.nf' + + + +workflow QUALITY_CHECK { + take: + ch_samplesheet + + main: + + samples_tsv_file = Channel.empty() + + RENAME_FILES (ch_samplesheet) + + FASTQC (RENAME_FILES.out.meta_and_files) + + + if (!params.cohort_tsv) { + + samples_tsv_file = ch_samplesheet + .map {it -> it[0].id+"\t"+it[0].library} + .collectFile(name: "derived_cohort.tsv", newLine: true, sort: true, storeDir: "${params.outdir}/misc", cache: true) + + + } else { + samples_tsv_file = Channel.fromPath( params.cohort_tsv ) + } + + + emit: + reads_and_meta_ch = RENAME_FILES.out.meta_and_files + reads_ch = RENAME_FILES.out.files + multiqc_files = FASTQC.out.zip.collect{it[1]} + versions = FASTQC.out.versions.first() + derived_cohort_tsv = samples_tsv_file + +} diff --git a/workflows/mtbseqnf.nf b/workflows/mtbseqnf.nf index 0cea2cd..723aa75 100644 --- a/workflows/mtbseqnf.nf +++ b/workflows/mtbseqnf.nf @@ -4,14 +4,14 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { QUALITY_CHECK } from '../subworkflows/local/quality_check' -include { PARALLEL_MODE } from "../subworkflows/local/mtbseq-nf-modes/parallel_mode.nf" - -include { TBFULL } from '../modules/mtbseq/tbfull.nf' -include { TBJOIN } from '../modules/mtbseq/tbjoin.nf' -include { TBAMEND } from '../modules/mtbseq/tbamend.nf' -include { TBGROUPS } from '../modules/mtbseq/tbgroups.nf' -include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { QUALITY_CHECK } from '../subworkflows/local/mtbseq/quality_check.nf' +include { PARALLEL_MODE } from "../subworkflows/local/mtbseq/parallel_mode.nf" + +include { TBFULL } from '../modules/local/mtbseq/tbfull/main' +include { TBJOIN } from '../modules/local/mtbseq/tbjoin/main' +include { TBAMEND } from '../modules/local/mtbseq/tbamend/main' +include { TBGROUPS } from '../modules/local/mtbseq/tbgroups/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-validation' From 9eb6013f1c41d47657d07fa94763d01c2df1bb46 Mon Sep 17 00:00:00 2001 From: "Davi Marcon (@Mxrcon)" Date: Mon, 28 Oct 2024 11:44:03 -0300 Subject: [PATCH 10/39] add mtbseq-nf references data [ci skip] --- data/mtbseq-references/Readme.md | 7 + .../cat/MTB_Gene_Categories.txt | 3996 +++++++++++++++++ .../ref/M._tuberculosis_H37Rv_2015-11-13.dict | 2 + ...M._tuberculosis_H37Rv_2015-11-13.fasta.amb | 1 + ...M._tuberculosis_H37Rv_2015-11-13.fasta.ann | 3 + ...M._tuberculosis_H37Rv_2015-11-13.fasta.bwt | Bin 0 -> 4411632 bytes ...M._tuberculosis_H37Rv_2015-11-13.fasta.fai | 1 + ...M._tuberculosis_H37Rv_2015-11-13.fasta.pac | Bin 0 -> 1102885 bytes .../M._tuberculosis_H37Rv_2015-11-13.fasta.sa | Bin 0 -> 2205816 bytes ...M._tuberculosis_H37Rv_2015-11-13_genes.txt | 3955 ++++++++++++++++ .../res/MTB_Base_Calibration_List.vcf | 383 ++ .../res/MTB_Base_Calibration_List.vcf.idx | Bin 0 -> 413 bytes .../res/MTB_Extended_Resistance_Mediating.txt | 43 + .../res/MTB_Resistance_Mediating.txt | 614 +++ 14 files changed, 9005 insertions(+) create mode 100644 data/mtbseq-references/Readme.md create mode 100644 data/mtbseq-references/cat/MTB_Gene_Categories.txt create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.dict create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.amb create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.ann create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.bwt create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.fai create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.pac create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.sa create mode 100644 data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13_genes.txt create mode 100644 data/mtbseq-references/res/MTB_Base_Calibration_List.vcf create mode 100644 data/mtbseq-references/res/MTB_Base_Calibration_List.vcf.idx create mode 100644 data/mtbseq-references/res/MTB_Extended_Resistance_Mediating.txt create mode 100644 data/mtbseq-references/res/MTB_Resistance_Mediating.txt diff --git a/data/mtbseq-references/Readme.md b/data/mtbseq-references/Readme.md new file mode 100644 index 0000000..2b6e744 --- /dev/null +++ b/data/mtbseq-references/Readme.md @@ -0,0 +1,7 @@ +## NOTE ABOUT THE REFERENCE FILES + +These references are copied from `v1.0.3` of [MTBseq source tree](https://github.com/ngs-fzb/MTBseq_source/tree/v1.0.3/var). + + +These are copied here to be able to stage this files directly from the `projectDir` rather than depending upon the packaging option for `MTBseq` such as `conda` or `docker` container. + diff --git a/data/mtbseq-references/cat/MTB_Gene_Categories.txt b/data/mtbseq-references/cat/MTB_Gene_Categories.txt new file mode 100644 index 0000000..e6a2b1a --- /dev/null +++ b/data/mtbseq-references/cat/MTB_Gene_Categories.txt @@ -0,0 +1,3996 @@ +# ID category +# Rv2351c nonessential # also epitope +# Rv2666 epitope # also repetitive +# Rv3812 epitope # also repetitive +# Rv1818c repetitive #from_epitope +# Rv2654c repetitive #from_epitope +# Rv3873 repetitive #from_epitope +Rv1157c epitope #excluded #annotation: hypothetical protein +Rv2658c epitope #excluded #annotation: phage protein +Rv0001 essential +Rv0002 nonessential +Rv0003 nonessential +Rv0004 nonessential +Rv0005 essential +Rv0006 nonessential +Rv0007 nonessential +Rv0008c nonessential +Rv0009 nonessential +Rv0010c nonessential +Rv0011c nonessential +Rv0012 nonessential +Rv0013 nonessential +Rv0014c essential +Rv0015c essential +Rv0016c nonessential +Rv0017c nonessential +Rv0018c nonessential +Rv0019c nonessential +Rv0020c nonessential +Rv0021c nonessential +Rv0022c nonessential +Rv0023 nonessential +Rv0024 nonessential +Rv0025 nonessential +Rv0026 nonessential +Rv0027 nonessential +Rv0028 nonessential +Rv0029 nonessential +Rv0030 nonessential +Rv0032 nonessential +Rv0033 nonessential +Rv0034 nonessential +Rv0035 nonessential +Rv0036c nonessential +Rv0037c nonessential +Rv0038 nonessential +Rv0039c nonessential +Rv0040c nonessential +Rv0041 essential +Rv0042c nonessential +Rv0043c nonessential +Rv0044c nonessential +Rv0045c nonessential +Rv0046c nonessential +Rv0047c nonessential +Rv0048c nonessential +Rv0049 nonessential +Rv0050 nonessential +Rv0051 nonessential +Rv0052 nonessential +Rv0053 nonessential +Rv0054 nonessential +Rv0055 nonessential +Rv0056 nonessential +Rv0057 nonessential +Rv0058 essential +Rv0059 nonessential +Rv0060 essential +Rv0061 nonessential +Rv0062 nonessential +Rv0063 nonessential +Rv0064 nonessential +Rv0065 nonessential +Rv0066c nonessential +Rv0067c nonessential +Rv0068 nonessential +Rv0069c nonessential +Rv0070c nonessential +Rv0071 nonessential +Rv0072 nonessential +Rv0073 nonessential +Rv0074 nonessential +Rv0075 nonessential +Rv0076c nonessential +Rv0077c nonessential +Rv0078 nonessential +Rv0078A nonessential +Rv0079 nonessential +Rv0080 nonessential +Rv0081 nonessential +Rv0082 nonessential +Rv0083 nonessential +Rv0084 nonessential +Rv0085 essential +Rv0086 essential +Rv0087 nonessential +Rv0088 nonessential +Rv0089 nonessential +Rv0090 nonessential +Rv0091 nonessential +Rv0092 nonessential +Rv0093c nonessential +Rv0094c nonessential +Rv0095c nonessential +Rv0097 nonessential +Rv0098 essential +Rv0099 essential +Rv0100 essential +Rv0101 essential +Rv0102 essential +Rv0103c nonessential +Rv0104 nonessential +Rv0105c nonessential +Rv0106 nonessential +Rv0107c nonessential +Rv0108c nonessential +Rv0110 nonessential +Rv0111 nonessential +Rv0112 essential +Rv0113 nonessential +Rv0114 nonessential +Rv0115 nonessential +Rv0116c nonessential +Rv0117 nonessential +Rv0118c essential +Rv0119 nonessential +Rv0120c nonessential +Rv0121c nonessential +Rv0122 nonessential +Rv0123 nonessential +Rv0126 nonessential +Rv0127 essential +Rv0128 nonessential +Rv0130 nonessential +Rv0131c nonessential +Rv0132c nonessential +Rv0133 nonessential +Rv0134 nonessential +Rv0135c nonessential +Rv0136 nonessential +Rv0137c nonessential +Rv0138 nonessential +Rv0139 nonessential +Rv0140 nonessential +Rv0141c nonessential +Rv0142 nonessential +Rv0143c nonessential +Rv0144 nonessential +Rv0145 nonessential +Rv0146 nonessential +Rv0147 nonessential +Rv0148 nonessential +Rv0149 nonessential +Rv0150c nonessential +Rv0153c nonessential +Rv0154c nonessential +Rv0155 nonessential +Rv0156 nonessential +Rv0157 nonessential +Rv0158 nonessential +Rv0161 nonessential +Rv0162c nonessential +Rv0163 nonessential +Rv0164 nonessential +Rv0165c nonessential +Rv0166 nonessential +Rv0167 nonessential +Rv0168 nonessential +Rv0169 essential +Rv0170 essential +Rv0171 essential +Rv0172 nonessential +Rv0173 essential +Rv0174 nonessential +Rv0175 essential +Rv0176 essential +Rv0177 nonessential +Rv0178 nonessential +Rv0179c nonessential +Rv0180c nonessential +Rv0181c nonessential +Rv0182c nonessential +Rv0183 nonessential +Rv0184 nonessential +Rv0185 nonessential +Rv0186 nonessential +Rv0187 nonessential +Rv0188 nonessential +Rv0189c essential +Rv0190 nonessential +Rv0191 nonessential +Rv0192 nonessential +Rv0192A nonessential +Rv0193c nonessential +Rv0194 nonessential +Rv0195 nonessential +Rv0196 nonessential +Rv0197 nonessential +Rv0198c nonessential +Rv0199 essential +Rv0201c nonessential +Rv0202c nonessential +Rv0204c essential +Rv0205 essential +Rv0206c nonessential +Rv0207c nonessential +Rv0208c essential +Rv0209 nonessential +Rv0210 nonessential +Rv0211 nonessential +Rv0212c nonessential +Rv0213c nonessential +Rv0214 nonessential +Rv0215c nonessential +Rv0216 essential +Rv0217c nonessential +Rv0218 essential +Rv0219 nonessential +Rv0220 nonessential +Rv0221 nonessential +Rv0223c nonessential +Rv0224c essential +Rv0225 nonessential +Rv0226c essential +Rv0227c essential +Rv0228 essential +Rv0229c nonessential +Rv0230c nonessential +Rv0231 nonessential +Rv0232 nonessential +Rv0233 nonessential +Rv0234c nonessential +Rv0235c nonessential +Rv0236A nonessential +Rv0236c essential +Rv0237 nonessential +Rv0238 nonessential +Rv0239 nonessential +Rv0240 nonessential +Rv0241c nonessential +Rv0242c nonessential +Rv0243 nonessential +Rv0244c nonessential +Rv0245 nonessential +Rv0246 nonessential +Rv0247c nonessential +Rv0248c nonessential +Rv0249c essential +Rv0250c nonessential +Rv0251c nonessential +Rv0252 nonessential +Rv0253 nonessential +Rv0254c nonessential +Rv0255c nonessential +Rv0257 nonessential +Rv0258c nonessential +Rv0259c nonessential +Rv0260c nonessential +Rv0261c nonessential +Rv0262c nonessential +Rv0263c nonessential +Rv0264c nonessential +Rv0265c nonessential +Rv0266c nonessential +Rv0267 nonessential +Rv0268c nonessential +Rv0269c nonessential +Rv0270 nonessential +Rv0271c nonessential +Rv0272c nonessential +Rv0273c nonessential +Rv0274 nonessential +Rv0275c nonessential +Rv0276 nonessential +Rv0277c nonessential +Rv0281 nonessential +Rv0282 essential +Rv0283 essential +Rv0284 essential +Rv0289 essential +Rv0290 essential +Rv0291 essential +Rv0292 essential +Rv0293c nonessential +Rv0294 nonessential +Rv0295c nonessential +Rv0296c nonessential +Rv0298 nonessential +Rv0299 nonessential +Rv0300 nonessential +Rv0301 nonessential +Rv0302 nonessential +Rv0303 nonessential +Rv0306 nonessential +Rv0307c nonessential +Rv0308 nonessential +Rv0310c nonessential +Rv0311 essential +Rv0312 essential +Rv0313 nonessential +Rv0314c nonessential +Rv0315 nonessential +Rv0316 nonessential +Rv0317c nonessential +Rv0318c nonessential +Rv0319 nonessential +Rv0320 nonessential +Rv0321 nonessential +Rv0322 nonessential +Rv0323c nonessential +Rv0324 nonessential +Rv0325 nonessential +Rv0326 essential +Rv0327c nonessential +Rv0328 nonessential +Rv0329c nonessential +Rv0330c nonessential +Rv0331 nonessential +Rv0332 nonessential +Rv0333 nonessential +Rv0334 essential +Rv0336 nonessential +Rv0337c essential +Rv0338c essential +Rv0339c nonessential +Rv0340 nonessential +Rv0342 nonessential +Rv0343 nonessential +Rv0344c nonessential +Rv0345 nonessential +Rv0346c nonessential +Rv0347 essential +Rv0348 nonessential +Rv0349 nonessential +Rv0350 essential +Rv0351 essential +Rv0352 essential +Rv0353 nonessential +Rv0356c nonessential +Rv0357c essential +Rv0358 nonessential +Rv0359 nonessential +Rv0360c nonessential +Rv0361 nonessential +Rv0362 nonessential +Rv0363c nonessential +Rv0364 nonessential +Rv0365c nonessential +Rv0366c nonessential +Rv0367c nonessential +Rv0368c nonessential +Rv0369c nonessential +Rv0370c nonessential +Rv0371c nonessential +Rv0372c essential +Rv0373c nonessential +Rv0374c nonessential +Rv0375c nonessential +Rv0376c nonessential +Rv0377 nonessential +Rv0378 nonessential +Rv0379 nonessential +Rv0380c nonessential +Rv0381c nonessential +Rv0382c nonessential +Rv0383c essential +Rv0384c essential +Rv0385 nonessential +Rv0386 nonessential +Rv0389 nonessential +Rv0390 nonessential +Rv0391 nonessential +Rv0392c nonessential +Rv0393 nonessential +Rv0394c nonessential +Rv0395 nonessential +Rv0396 nonessential +Rv0397 nonessential +Rv0398c nonessential +Rv0399c essential +Rv0400c essential +Rv0401 nonessential +Rv0402c nonessential +Rv0403c nonessential +Rv0404 essential +Rv0405 nonessential +Rv0406c nonessential +Rv0407 nonessential +Rv0408 nonessential +Rv0409 nonessential +Rv0410c essential +Rv0411c essential +Rv0412c essential +Rv0413 nonessential +Rv0414c essential +Rv0415 essential +Rv0416 essential +Rv0417 essential +Rv0418 nonessential +Rv0419 nonessential +Rv0420c nonessential +Rv0421c nonessential +Rv0422c essential +Rv0423c essential +Rv0424c nonessential +Rv0425c essential +Rv0426c nonessential +Rv0427c essential +Rv0428c nonessential +Rv0429c essential +Rv0430 essential +Rv0431 nonessential +Rv0432 nonessential +Rv0433 nonessential +Rv0434 nonessential +Rv0435c nonessential +Rv0436c nonessential +Rv0437c nonessential +Rv0438c nonessential +Rv0439c nonessential +Rv0441c nonessential +Rv0443 nonessential +Rv0444c nonessential +Rv0445c nonessential +Rv0446c nonessential +Rv0447c nonessential +Rv0448c nonessential +Rv0449c nonessential +Rv0450c essential +Rv0451c nonessential +Rv0452 nonessential +Rv0454 nonessential +Rv0455c nonessential +Rv0456A nonessential +Rv0456c nonessential +Rv0457c nonessential +Rv0458 nonessential +Rv0459 nonessential +Rv0460 nonessential +Rv0461 nonessential +Rv0462 essential +Rv0463 nonessential +Rv0464c nonessential +Rv0465c nonessential +Rv0466 nonessential +Rv0467 nonessential +Rv0468 nonessential +Rv0469 nonessential +Rv0470A nonessential +Rv0470c essential +Rv0471c nonessential +Rv0472c nonessential +Rv0473 nonessential +Rv0474 nonessential +Rv0475 nonessential +Rv0476 nonessential +Rv0477 nonessential +Rv0478 nonessential +Rv0479c essential +Rv0480c nonessential +Rv0481c nonessential +Rv0482 nonessential +Rv0483 nonessential +Rv0484c nonessential +Rv0485 nonessential +Rv0486 nonessential +Rv0487 nonessential +Rv0488 nonessential +Rv0489 nonessential +Rv0490 essential +Rv0491 nonessential +Rv0492A nonessential +Rv0492c nonessential +Rv0493c nonessential +Rv0494 nonessential +Rv0495c nonessential +Rv0496 nonessential +Rv0497 nonessential +Rv0498 nonessential +Rv0499 nonessential +Rv0500 essential +Rv0500A nonessential +Rv0500B nonessential +Rv0501 nonessential +Rv0502 nonessential +Rv0503c nonessential +Rv0504c nonessential +Rv0505c nonessential +Rv0506 nonessential +Rv0507 nonessential +Rv0508 nonessential +Rv0509 essential +Rv0510 essential +Rv0511 essential +Rv0512 nonessential +Rv0513 nonessential +Rv0514 nonessential +Rv0515 nonessential +Rv0516c nonessential +Rv0517 nonessential +Rv0518 nonessential +Rv0519c nonessential +Rv0520 nonessential +Rv0521 nonessential +Rv0522 nonessential +Rv0523c nonessential +Rv0524 essential +Rv0525 essential +Rv0526 essential +Rv0527 essential +Rv0528 essential +Rv0529 essential +Rv0530 nonessential +Rv0531 nonessential +Rv0533c nonessential +Rv0534c nonessential +Rv0535 nonessential +Rv0536 nonessential +Rv0537c nonessential +Rv0538 nonessential +Rv0539 nonessential +Rv0540 essential +Rv0541c essential +Rv0542c essential +Rv0543c nonessential +Rv0544c nonessential +Rv0545c nonessential +Rv0546c nonessential +Rv0547c nonessential +Rv0548c nonessential +Rv0549c nonessential +Rv0550c nonessential +Rv0551c nonessential +Rv0552 nonessential +Rv0553 essential +Rv0554 nonessential +Rv0555 essential +Rv0556 essential +Rv0557 essential +Rv0558 essential +Rv0559c nonessential +Rv0560c nonessential +Rv0561c nonessential +Rv0562 essential +Rv0563 nonessential +Rv0564c nonessential +Rv0565c nonessential +Rv0566c essential +Rv0567 nonessential +Rv0568 nonessential +Rv0569 nonessential +Rv0570 nonessential +Rv0571c nonessential +Rv0572c nonessential +Rv0573c nonessential +Rv0574c nonessential +Rv0575c nonessential +Rv0576 nonessential +Rv0577 nonessential +Rv0579 nonessential +Rv0580c nonessential +Rv0581 nonessential +Rv0582 nonessential +Rv0583c nonessential +Rv0584 nonessential +Rv0585c nonessential +Rv0586 nonessential +Rv0587 nonessential +Rv0588 essential +Rv0590 nonessential +Rv0590A nonessential +Rv0591 nonessential +Rv0592 nonessential +Rv0593 nonessential +Rv0594 nonessential +Rv0595c nonessential +Rv0596c nonessential +Rv0597c nonessential +Rv0598c nonessential +Rv0599c nonessential +Rv0600c nonessential +Rv0601c nonessential +Rv0602c nonessential +Rv0603 nonessential +Rv0604 nonessential +Rv0605 nonessential +Rv0606 nonessential +Rv0607 essential +Rv0608 nonessential +Rv0609 nonessential +Rv0609A nonessential +Rv0610c nonessential +Rv0611c nonessential +Rv0612 nonessential +Rv0613c nonessential +Rv0614 nonessential +Rv0615 nonessential +Rv0616c nonessential +Rv0617 nonessential +Rv0618 nonessential +Rv0619 nonessential +Rv0620 nonessential +Rv0621 nonessential +Rv0622 nonessential +Rv0623 nonessential +Rv0624 nonessential +Rv0625c nonessential +Rv0626 nonessential +Rv0627 essential +Rv0628c essential +Rv0629c nonessential +Rv0630c nonessential +Rv0631c nonessential +Rv0632c nonessential +Rv0633c nonessential +Rv0634A nonessential +Rv0634B nonessential +Rv0634c nonessential +Rv0635 essential +Rv0636 essential +Rv0637 nonessential +Rv0638 essential +Rv0639 nonessential +Rv0640 essential +Rv0641 nonessential +Rv0642c nonessential +Rv0643c essential +Rv0644c nonessential +Rv0645c nonessential +Rv0646c nonessential +Rv0647c nonessential +Rv0648 nonessential +Rv0649 nonessential +Rv0650 nonessential +Rv0651 essential +Rv0652 essential +Rv0653c nonessential +Rv0654 nonessential +Rv0655 essential +Rv0656c nonessential +Rv0657c nonessential +Rv0658c nonessential +Rv0659c nonessential +Rv0660c nonessential +Rv0661c nonessential +Rv0662c nonessential +Rv0663 nonessential +Rv0664 nonessential +Rv0665 nonessential +Rv0666 essential +Rv0668 essential +Rv0669c nonessential +Rv0671 nonessential +Rv0672 nonessential +Rv0673 nonessential +Rv0674 essential +Rv0675 essential +Rv0676c nonessential +Rv0677c nonessential +Rv0678 nonessential +Rv0679c nonessential +Rv0680c nonessential +Rv0681 nonessential +Rv0682 essential +Rv0683 essential +Rv0684 essential +Rv0685 essential +Rv0686 nonessential +Rv0687 essential +Rv0688 nonessential +Rv0689c nonessential +Rv0690c nonessential +Rv0691c nonessential +Rv0692 nonessential +Rv0693 nonessential +Rv0694 nonessential +Rv0695 nonessential +Rv0696 nonessential +Rv0697 essential +Rv0698 nonessential +Rv0699 nonessential +Rv0700 essential +Rv0701 essential +Rv0702 essential +Rv0703 essential +Rv0704 essential +Rv0705 essential +Rv0706 essential +Rv0707 essential +Rv0708 essential +Rv0709 essential +Rv0710 essential +Rv0711 nonessential +Rv0712 nonessential +Rv0713 nonessential +Rv0714 essential +Rv0715 essential +Rv0716 essential +Rv0717 nonessential +Rv0718 essential +Rv0719 essential +Rv0720 essential +Rv0721 essential +Rv0722 essential +Rv0723 nonessential +Rv0724 nonessential +Rv0724A nonessential +Rv0725c nonessential +Rv0726c nonessential +Rv0727c nonessential +Rv0728c nonessential +Rv0729 nonessential +Rv0730 nonessential +Rv0731c nonessential +Rv0732 essential +Rv0733 nonessential +Rv0734 nonessential +Rv0735 nonessential +Rv0736 essential +Rv0737 nonessential +Rv0738 nonessential +Rv0739 nonessential +Rv0740 nonessential +Rv0743c nonessential +Rv0744c essential +Rv0745 nonessential +Rv0748 nonessential +Rv0749 nonessential +Rv0749A nonessential +Rv0750 nonessential +Rv0751c nonessential +Rv0752c nonessential +Rv0753c nonessential +Rv0756c nonessential +Rv0757 nonessential +Rv0758 nonessential +Rv0759c nonessential +Rv0760c nonessential +Rv0761c nonessential +Rv0762c nonessential +Rv0763c nonessential +Rv0764c nonessential +Rv0765c nonessential +Rv0766c nonessential +Rv0767c nonessential +Rv0768 nonessential +Rv0769 nonessential +Rv0770 nonessential +Rv0771 nonessential +Rv0772 essential +Rv0773c nonessential +Rv0774c nonessential +Rv0775 nonessential +Rv0776c nonessential +Rv0777 nonessential +Rv0778 nonessential +Rv0779c nonessential +Rv0780 essential +Rv0781 essential +Rv0782 nonessential +Rv0783c nonessential +Rv0784 nonessential +Rv0785 nonessential +Rv0786c nonessential +Rv0787 nonessential +Rv0787A nonessential +Rv0788 essential +Rv0789c nonessential +Rv0790c nonessential +Rv0791c nonessential +Rv0792c nonessential +Rv0793 nonessential +Rv0794c nonessential +Rv0798c essential +Rv0799c nonessential +Rv0800 nonessential +Rv0801 nonessential +Rv0802c nonessential +Rv0803 essential +Rv0804 nonessential +Rv0805 nonessential +Rv0806c nonessential +Rv0807 nonessential +Rv0808 essential +Rv0809 nonessential +Rv0810c nonessential +Rv0811c essential +Rv0812 nonessential +Rv0813c nonessential +Rv0814c nonessential +Rv0815c nonessential +Rv0816c nonessential +Rv0817c essential +Rv0818 nonessential +Rv0819 nonessential +Rv0820 nonessential +Rv0821c nonessential +Rv0822c nonessential +Rv0823c nonessential +Rv0824c essential +Rv0825c nonessential +Rv0826 nonessential +Rv0827c nonessential +Rv0828c nonessential +Rv0829 nonessential +Rv0830 nonessential +Rv0831c nonessential +Rv0835 nonessential +Rv0836c nonessential +Rv0837c nonessential +Rv0838 nonessential +Rv0839 nonessential +Rv0840c nonessential +Rv0841 nonessential +Rv0842 nonessential +Rv0843 nonessential +Rv0844c nonessential +Rv0845 nonessential +Rv0846c nonessential +Rv0847 nonessential +Rv0848 nonessential +Rv0849 nonessential +Rv0851c nonessential +Rv0852 nonessential +Rv0853c nonessential +Rv0854 nonessential +Rv0855 nonessential +Rv0856 nonessential +Rv0857 nonessential +Rv0858c nonessential +Rv0859 nonessential +Rv0860 nonessential +Rv0861c nonessential +Rv0862c nonessential +Rv0863 nonessential +Rv0864 nonessential +Rv0865 nonessential +Rv0866 nonessential +Rv0867c nonessential +Rv0868c nonessential +Rv0869c nonessential +Rv0870c nonessential +Rv0871 nonessential +Rv0873 nonessential +Rv0874c nonessential +Rv0875c essential +Rv0876c nonessential +Rv0877 nonessential +Rv0879c nonessential +Rv0880 nonessential +Rv0881 nonessential +Rv0882 nonessential +Rv0883c essential +Rv0884c essential +Rv0885 nonessential +Rv0886 nonessential +Rv0887c nonessential +Rv0888 nonessential +Rv0889c nonessential +Rv0890c nonessential +Rv0891c nonessential +Rv0892 nonessential +Rv0893c nonessential +Rv0894 essential +Rv0895 nonessential +Rv0896 nonessential +Rv0897c nonessential +Rv0898c nonessential +Rv0899 nonessential +Rv0900 essential +Rv0901 nonessential +Rv0902c nonessential +Rv0903c nonessential +Rv0904c nonessential +Rv0905 nonessential +Rv0906 nonessential +Rv0907 nonessential +Rv0908 nonessential +Rv0909 nonessential +Rv0910 nonessential +Rv0911 nonessential +Rv0912 nonessential +Rv0913c nonessential +Rv0914c nonessential +Rv0917 nonessential +Rv0918 nonessential +Rv0919 nonessential +Rv0921 nonessential +Rv0923c nonessential +Rv0924c nonessential +Rv0925c nonessential +Rv0926c nonessential +Rv0927c nonessential +Rv0928 nonessential +Rv0929 nonessential +Rv0930 nonessential +Rv0931c nonessential +Rv0932c nonessential +Rv0933 nonessential +Rv0935 nonessential +Rv0936 nonessential +Rv0937c nonessential +Rv0938 nonessential +Rv0939 nonessential +Rv0940c nonessential +Rv0941c nonessential +Rv0942 nonessential +Rv0943c nonessential +Rv0944 nonessential +Rv0945 nonessential +Rv0946c essential +Rv0948c nonessential +Rv0949 essential +Rv0950c essential +Rv0951 essential +Rv0952 essential +Rv0953c nonessential +Rv0954 nonessential +Rv0955 essential +Rv0956 nonessential +Rv0957 essential +Rv0958 nonessential +Rv0959 nonessential +Rv0960 nonessential +Rv0961 nonessential +Rv0962c nonessential +Rv0963c nonessential +Rv0964c nonessential +Rv0965c nonessential +Rv0966c nonessential +Rv0967 nonessential +Rv0968 nonessential +Rv0969 nonessential +Rv0970 nonessential +Rv0971c nonessential +Rv0972c nonessential +Rv0973c essential +Rv0974c nonessential +Rv0975c nonessential +Rv0976c nonessential +Rv0979A nonessential +Rv0979c nonessential +Rv0981 nonessential +Rv0982 essential +Rv0983 nonessential +Rv0984 nonessential +Rv0985c nonessential +Rv0986 nonessential +Rv0987 nonessential +Rv0988 nonessential +Rv0989c nonessential +Rv0990c nonessential +Rv0991c nonessential +Rv0992c nonessential +Rv0993 essential +Rv0994 nonessential +Rv0995 nonessential +Rv0996 nonessential +Rv0997 nonessential +Rv0998 nonessential +Rv0999 nonessential +Rv1000c nonessential +Rv1001 nonessential +Rv1002c essential +Rv1003 nonessential +Rv1004c nonessential +Rv1005c essential +Rv1006 nonessential +Rv1007c essential +Rv1008 nonessential +Rv1009 nonessential +Rv1010 nonessential +Rv1011 essential +Rv1012 nonessential +Rv1013 essential +Rv1014c essential +Rv1015c nonessential +Rv1016c essential +Rv1017c essential +Rv1018c essential +Rv1019 nonessential +Rv1020 nonessential +Rv1021 essential +Rv1022 nonessential +Rv1023 essential +Rv1024 essential +Rv1025 essential +Rv1026 essential +Rv1027c essential +Rv1028A nonessential +Rv1028c essential +Rv1029 nonessential +Rv1030 nonessential +Rv1031 nonessential +Rv1032c nonessential +Rv1033c nonessential +Rv1037c nonessential +Rv1038c nonessential +Rv1043c nonessential +Rv1044 nonessential +Rv1045 nonessential +Rv1046c nonessential +Rv1048c nonessential +Rv1049 nonessential +Rv1050 nonessential +Rv1051c nonessential +Rv1052 nonessential +Rv1053c nonessential +Rv1055 nonessential +Rv1056 nonessential +Rv1057 nonessential +Rv1058 nonessential +Rv1059 nonessential +Rv1060 nonessential +Rv1061 nonessential +Rv1062 nonessential +Rv1063c nonessential +Rv1064c nonessential +Rv1065 nonessential +Rv1066 nonessential +Rv1069c nonessential +Rv1070c nonessential +Rv1071c nonessential +Rv1072 nonessential +Rv1073 nonessential +Rv1074c nonessential +Rv1075c nonessential +Rv1076 nonessential +Rv1077 nonessential +Rv1078 nonessential +Rv1079 nonessential +Rv1080c nonessential +Rv1081c nonessential +Rv1082 nonessential +Rv1083 nonessential +Rv1084 nonessential +Rv1085c nonessential +Rv1086 nonessential +Rv1087A nonessential +Rv1089A nonessential +Rv1090 nonessential +Rv1092c essential +Rv1093 nonessential +Rv1094 essential +Rv1095 nonessential +Rv1096 nonessential +Rv1097c nonessential +Rv1098c essential +Rv1099c essential +Rv1100 nonessential +Rv1101c nonessential +Rv1102c nonessential +Rv1103c nonessential +Rv1104 nonessential +Rv1105 nonessential +Rv1106c nonessential +Rv1107c nonessential +Rv1108c nonessential +Rv1109c essential +Rv1110 nonessential +Rv1111c essential +Rv1112 nonessential +Rv1113 nonessential +Rv1114 nonessential +Rv1115 nonessential +Rv1116 nonessential +Rv1116A nonessential +Rv1117 nonessential +Rv1118c nonessential +Rv1119c nonessential +Rv1120c nonessential +Rv1121 nonessential +Rv1122 essential +Rv1123c nonessential +Rv1124 nonessential +Rv1125 nonessential +Rv1126c essential +Rv1127c nonessential +Rv1128c essential +Rv1129c nonessential +Rv1130 nonessential +Rv1131 nonessential +Rv1132 nonessential +Rv1133c essential +Rv1134 nonessential +Rv1135A nonessential +Rv1136 nonessential +Rv1137c nonessential +Rv1138c nonessential +Rv1139c nonessential +Rv1140 nonessential +Rv1141c nonessential +Rv1142c nonessential +Rv1143 nonessential +Rv1144 essential +Rv1145 nonessential +Rv1146 nonessential +Rv1147 nonessential +Rv1148c nonessential +Rv1151c nonessential +Rv1152 nonessential +Rv1153c nonessential +Rv1154c nonessential +Rv1155 nonessential +Rv1156 nonessential +Rv1159 nonessential +Rv1159A nonessential +Rv1160 nonessential +Rv1161 nonessential +Rv1162 nonessential +Rv1163 nonessential +Rv1164 nonessential +Rv1165 nonessential +Rv1166 essential +Rv1167c nonessential +Rv1170 nonessential +Rv1171 nonessential +Rv1173 nonessential +Rv1175c nonessential +Rv1176c nonessential +Rv1177 essential +Rv1178 nonessential +Rv1179c nonessential +Rv1180 nonessential +Rv1181 nonessential +Rv1182 essential +Rv1183 essential +Rv1185c essential +Rv1186c essential +Rv1187 essential +Rv1188 essential +Rv1189 nonessential +Rv1190 nonessential +Rv1191 nonessential +Rv1192 essential +Rv1193 essential +Rv1194c essential +Rv1197 nonessential +Rv1200 nonessential +Rv1201c essential +Rv1202 essential +Rv1203c nonessential +Rv1204c essential +Rv1205 nonessential +Rv1206 nonessential +Rv1207 nonessential +Rv1208 essential +Rv1209 nonessential +Rv1210 nonessential +Rv1211 essential +Rv1212c nonessential +Rv1213 nonessential +Rv1215c essential +Rv1216c nonessential +Rv1217c nonessential +Rv1218c nonessential +Rv1219c nonessential +Rv1220c nonessential +Rv1221 nonessential +Rv1222 nonessential +Rv1223 essential +Rv1224 essential +Rv1225c nonessential +Rv1226c nonessential +Rv1227c nonessential +Rv1228 nonessential +Rv1229c essential +Rv1230c nonessential +Rv1231c nonessential +Rv1232c essential +Rv1233c nonessential +Rv1234 nonessential +Rv1235 essential +Rv1236 essential +Rv1237 essential +Rv1238 essential +Rv1239c nonessential +Rv1240 nonessential +Rv1241 nonessential +Rv1244 essential +Rv1245c nonessential +Rv1246c nonessential +Rv1247c nonessential +Rv1248c essential +Rv1249c nonessential +Rv1250 nonessential +Rv1251c nonessential +Rv1252c nonessential +Rv1253 nonessential +Rv1254 essential +Rv1257c nonessential +Rv1258c nonessential +Rv1259 nonessential +Rv1260 nonessential +Rv1261c nonessential +Rv1262c nonessential +Rv1263 nonessential +Rv1264 nonessential +Rv1265 nonessential +Rv1266c nonessential +Rv1267c nonessential +Rv1268c nonessential +Rv1269c nonessential +Rv1270c nonessential +Rv1271c nonessential +Rv1272c essential +Rv1273c nonessential +Rv1274 essential +Rv1275 nonessential +Rv1276c nonessential +Rv1277 nonessential +Rv1278 essential +Rv1279 nonessential +Rv1281c nonessential +Rv1282c nonessential +Rv1283c nonessential +Rv1284 essential +Rv1285 essential +Rv1286 essential +Rv1287 nonessential +Rv1288 nonessential +Rv1289 nonessential +Rv1290A nonessential +Rv1290c nonessential +Rv1292 essential +Rv1293 essential +Rv1294 essential +Rv1295 essential +Rv1296 essential +Rv1297 essential +Rv1298 essential +Rv1299 essential +Rv1300 essential +Rv1301 essential +Rv1302 nonessential +Rv1303 essential +Rv1304 essential +Rv1305 essential +Rv1306 essential +Rv1307 essential +Rv1308 essential +Rv1309 essential +Rv1310 essential +Rv1311 essential +Rv1312 nonessential +Rv1314c nonessential +Rv1315 essential +Rv1316c nonessential +Rv1317c nonessential +Rv1318c nonessential +Rv1319c nonessential +Rv1320c nonessential +Rv1321 nonessential +Rv1322 nonessential +Rv1322A nonessential +Rv1323 essential +Rv1324 nonessential +Rv1326c essential +Rv1327c essential +Rv1328 nonessential +Rv1329c nonessential +Rv1330c nonessential +Rv1331 nonessential +Rv1332 essential +Rv1333 essential +Rv1334 nonessential +Rv1335 nonessential +Rv1336 nonessential +Rv1337 nonessential +Rv1338 essential +Rv1339 essential +Rv1340 nonessential +Rv1341 nonessential +Rv1342c essential +Rv1343c nonessential +Rv1344 nonessential +Rv1345 nonessential +Rv1346 nonessential +Rv1347c essential +Rv1348 essential +Rv1349 essential +Rv1350 essential +Rv1351 nonessential +Rv1352 nonessential +Rv1353c nonessential +Rv1354c nonessential +Rv1355c nonessential +Rv1356c nonessential +Rv1357c nonessential +Rv1358 nonessential +Rv1359 nonessential +Rv1360 nonessential +Rv1362c nonessential +Rv1363c nonessential +Rv1364c nonessential +Rv1365c nonessential +Rv1366 nonessential +Rv1367c nonessential +Rv1368 nonessential +Rv1371 essential +Rv1372 nonessential +Rv1373 nonessential +Rv1374c nonessential +Rv1375 nonessential +Rv1376 nonessential +Rv1377c nonessential +Rv1378c nonessential +Rv1379 nonessential +Rv1380 essential +Rv1381 essential +Rv1382 essential +Rv1383 essential +Rv1384 nonessential +Rv1385 nonessential +Rv1388 essential +Rv1389 essential +Rv1390 essential +Rv1391 essential +Rv1392 essential +Rv1393c nonessential +Rv1394c nonessential +Rv1395 nonessential +Rv1397c nonessential +Rv1398c nonessential +Rv1399c nonessential +Rv1400c nonessential +Rv1401 nonessential +Rv1402 nonessential +Rv1403c nonessential +Rv1404 nonessential +Rv1405c essential +Rv1406 essential +Rv1407 nonessential +Rv1408 nonessential +Rv1409 essential +Rv1410c essential +Rv1411c essential +Rv1412 nonessential +Rv1413 nonessential +Rv1414 nonessential +Rv1415 essential +Rv1416 essential +Rv1417 nonessential +Rv1418 nonessential +Rv1419 nonessential +Rv1420 essential +Rv1421 nonessential +Rv1422 essential +Rv1423 nonessential +Rv1424c nonessential +Rv1425 nonessential +Rv1426c nonessential +Rv1427c nonessential +Rv1428c nonessential +Rv1429 nonessential +Rv1431 nonessential +Rv1432 nonessential +Rv1433 nonessential +Rv1434 nonessential +Rv1435c nonessential +Rv1436 essential +Rv1437 essential +Rv1438 essential +Rv1439c nonessential +Rv1440 nonessential +Rv1442 nonessential +Rv1443c nonessential +Rv1444c nonessential +Rv1445c nonessential +Rv1446c essential +Rv1447c nonessential +Rv1448c essential +Rv1449c essential +Rv1451 nonessential +Rv1453 nonessential +Rv1454c nonessential +Rv1455 nonessential +Rv1456c essential +Rv1457c essential +Rv1458c nonessential +Rv1459c essential +Rv1460 essential +Rv1462 essential +Rv1463 essential +Rv1464 essential +Rv1465 essential +Rv1466 essential +Rv1467c nonessential +Rv1469 essential +Rv1470 nonessential +Rv1471 nonessential +Rv1472 nonessential +Rv1473 nonessential +Rv1473A nonessential +Rv1474c nonessential +Rv1475c essential +Rv1476 essential +Rv1477 essential +Rv1478 nonessential +Rv1479 essential +Rv1480 essential +Rv1481 nonessential +Rv1482c nonessential +Rv1483 nonessential +Rv1484 nonessential +Rv1485 essential +Rv1486c nonessential +Rv1487 nonessential +Rv1488 nonessential +Rv1489 nonessential +Rv1489A nonessential +Rv1490 essential +Rv1491c nonessential +Rv1492 nonessential +Rv1493 nonessential +Rv1494 nonessential +Rv1495 nonessential +Rv1496 nonessential +Rv1497 nonessential +Rv1498A nonessential +Rv1498c nonessential +Rv1499 nonessential +Rv1500 nonessential +Rv1501 nonessential +Rv1502 nonessential +Rv1503c nonessential +Rv1504c nonessential +Rv1505c nonessential +Rv1506c nonessential +Rv1507A nonessential +Rv1507c nonessential +Rv1508A nonessential +Rv1508c nonessential +Rv1509 nonessential +Rv1510 nonessential +Rv1511 nonessential +Rv1512 nonessential +Rv1513 nonessential +Rv1514c essential +Rv1515c nonessential +Rv1516c nonessential +Rv1517 nonessential +Rv1518 nonessential +Rv1519 nonessential +Rv1520 nonessential +Rv1521 nonessential +Rv1522c nonessential +Rv1523 nonessential +Rv1524 essential +Rv1525 nonessential +Rv1526c nonessential +Rv1527c nonessential +Rv1528c nonessential +Rv1529 nonessential +Rv1530 nonessential +Rv1531 nonessential +Rv1532c nonessential +Rv1533 nonessential +Rv1534 nonessential +Rv1535 nonessential +Rv1536 nonessential +Rv1537 nonessential +Rv1538c nonessential +Rv1539 essential +Rv1540 nonessential +Rv1541c nonessential +Rv1542c nonessential +Rv1543 nonessential +Rv1544 nonessential +Rv1545 nonessential +Rv1546 nonessential +Rv1547 essential +Rv1549 nonessential +Rv1550 nonessential +Rv1551 nonessential +Rv1552 nonessential +Rv1553 nonessential +Rv1554 nonessential +Rv1555 nonessential +Rv1556 nonessential +Rv1557 nonessential +Rv1558 nonessential +Rv1559 nonessential +Rv1560 essential +Rv1561 nonessential +Rv1562c nonessential +Rv1563c nonessential +Rv1564c nonessential +Rv1565c nonessential +Rv1566c nonessential +Rv1567c nonessential +Rv1568 essential +Rv1569 essential +Rv1570 nonessential +Rv1571 nonessential +Rv1572c nonessential +Rv1587c nonessential +Rv1588c nonessential +Rv1589 essential +Rv1590 essential +Rv1591 nonessential +Rv1592c nonessential +Rv1593c nonessential +Rv1594 essential +Rv1595 essential +Rv1596 nonessential +Rv1597 nonessential +Rv1598c nonessential +Rv1599 essential +Rv1600 essential +Rv1601 essential +Rv1602 essential +Rv1603 essential +Rv1604 nonessential +Rv1605 essential +Rv1606 essential +Rv1607 nonessential +Rv1608c nonessential +Rv1609 essential +Rv1610 essential +Rv1611 essential +Rv1612 essential +Rv1613 essential +Rv1614 essential +Rv1615 nonessential +Rv1616 nonessential +Rv1617 essential +Rv1618 nonessential +Rv1619 nonessential +Rv1620c nonessential +Rv1621c nonessential +Rv1622c essential +Rv1624c nonessential +Rv1625c nonessential +Rv1626 essential +Rv1627c nonessential +Rv1628c nonessential +Rv1629 essential +Rv1630 essential +Rv1631 essential +Rv1632c nonessential +Rv1633 nonessential +Rv1634 nonessential +Rv1635c nonessential +Rv1636 nonessential +Rv1637c nonessential +Rv1638 nonessential +Rv1638A nonessential +Rv1639c nonessential +Rv1640c essential +Rv1642 nonessential +Rv1643 nonessential +Rv1644 nonessential +Rv1645c nonessential +Rv1647 nonessential +Rv1648 nonessential +Rv1649 essential +Rv1650 essential +Rv1652 essential +Rv1653 essential +Rv1654 essential +Rv1655 essential +Rv1656 essential +Rv1657 nonessential +Rv1658 essential +Rv1659 essential +Rv1660 nonessential +Rv1661 essential +Rv1662 essential +Rv1663 essential +Rv1664 nonessential +Rv1665 nonessential +Rv1666c nonessential +Rv1667c nonessential +Rv1668c nonessential +Rv1669 nonessential +Rv1670 nonessential +Rv1671 nonessential +Rv1672c nonessential +Rv1673c nonessential +Rv1674c nonessential +Rv1675c nonessential +Rv1676 nonessential +Rv1677 nonessential +Rv1678 nonessential +Rv1679 nonessential +Rv1680 nonessential +Rv1681 nonessential +Rv1682 nonessential +Rv1683 essential +Rv1684 nonessential +Rv1685c nonessential +Rv1686c nonessential +Rv1687c nonessential +Rv1688 nonessential +Rv1689 essential +Rv1690 nonessential +Rv1691 nonessential +Rv1692 nonessential +Rv1693 nonessential +Rv1695 essential +Rv1696 essential +Rv1697 essential +Rv1698 nonessential +Rv1699 essential +Rv1700 nonessential +Rv1701 essential +Rv1702c nonessential +Rv1703c nonessential +Rv1704c nonessential +Rv1706A nonessential +Rv1707 nonessential +Rv1708 essential +Rv1709 nonessential +Rv1710 essential +Rv1711 essential +Rv1712 essential +Rv1713 essential +Rv1714 essential +Rv1715 essential +Rv1716 nonessential +Rv1717 nonessential +Rv1718 nonessential +Rv1719 nonessential +Rv1720c nonessential +Rv1721c nonessential +Rv1722 nonessential +Rv1723 nonessential +Rv1724c nonessential +Rv1725c nonessential +Rv1726 nonessential +Rv1727 nonessential +Rv1728c nonessential +Rv1729c nonessential +Rv1730c essential +Rv1731 nonessential +Rv1732c nonessential +Rv1733c nonessential +Rv1734c nonessential +Rv1735c nonessential +Rv1736c nonessential +Rv1737c nonessential +Rv1738 essential +Rv1739c nonessential +Rv1740 nonessential +Rv1741 nonessential +Rv1742 nonessential +Rv1743 nonessential +Rv1744c nonessential +Rv1745c nonessential +Rv1746 nonessential +Rv1747 nonessential +Rv1748 nonessential +Rv1749c nonessential +Rv1750c nonessential +Rv1751 nonessential +Rv1752 nonessential +Rv1754c nonessential +Rv1755c nonessential +Rv1758 nonessential +Rv1759c nonessential +Rv1760 nonessential +Rv1761c nonessential +Rv1762c nonessential +Rv1765c nonessential +Rv1766 nonessential +Rv1767 nonessential +Rv1769 nonessential +Rv1770 nonessential +Rv1771 nonessential +Rv1772 nonessential +Rv1773c nonessential +Rv1774 nonessential +Rv1775 nonessential +Rv1776c nonessential +Rv1777 nonessential +Rv1778c nonessential +Rv1779c nonessential +Rv1780 nonessential +Rv1781c nonessential +Rv1782 nonessential +Rv1783 nonessential +Rv1784 nonessential +Rv1785c nonessential +Rv1786 nonessential +Rv1794 nonessential +Rv1795 nonessential +Rv1796 nonessential +Rv1797 nonessential +Rv1798 nonessential +Rv1799 nonessential +Rv1804c nonessential +Rv1805c nonessential +Rv1810 nonessential +Rv1811 nonessential +Rv1812c nonessential +Rv1813c nonessential +Rv1814 nonessential +Rv1815 nonessential +Rv1816 nonessential +Rv1817 nonessential +Rv1819c nonessential +Rv1820 nonessential +Rv1821 essential +Rv1822 nonessential +Rv1823 nonessential +Rv1824 nonessential +Rv1825 nonessential +Rv1826 nonessential +Rv1827 nonessential +Rv1828 essential +Rv1829 nonessential +Rv1830 nonessential +Rv1831 nonessential +Rv1832 essential +Rv1833c nonessential +Rv1834 nonessential +Rv1835c nonessential +Rv1836c nonessential +Rv1837c nonessential +Rv1838c nonessential +Rv1839c nonessential +Rv1841c nonessential +Rv1842c nonessential +Rv1843c nonessential +Rv1844c nonessential +Rv1845c nonessential +Rv1846c nonessential +Rv1847 nonessential +Rv1848 nonessential +Rv1849 nonessential +Rv1850 essential +Rv1851 nonessential +Rv1852 nonessential +Rv1853 nonessential +Rv1854c nonessential +Rv1855c nonessential +Rv1856c nonessential +Rv1857 nonessential +Rv1858 nonessential +Rv1859 nonessential +Rv1861 nonessential +Rv1862 nonessential +Rv1863c nonessential +Rv1864c nonessential +Rv1865c nonessential +Rv1866 nonessential +Rv1867 nonessential +Rv1868 nonessential +Rv1869c nonessential +Rv1870c nonessential +Rv1871c nonessential +Rv1872c nonessential +Rv1873 nonessential +Rv1874 nonessential +Rv1875 nonessential +Rv1876 nonessential +Rv1877 nonessential +Rv1878 nonessential +Rv1879 nonessential +Rv1880c nonessential +Rv1881c nonessential +Rv1882c nonessential +Rv1883c nonessential +Rv1884c nonessential +Rv1885c nonessential +Rv1887 nonessential +Rv1888A nonessential +Rv1888c nonessential +Rv1889c nonessential +Rv1890c nonessential +Rv1891 nonessential +Rv1892 nonessential +Rv1893 nonessential +Rv1894c nonessential +Rv1895 nonessential +Rv1896c nonessential +Rv1897c nonessential +Rv1898 nonessential +Rv1899c nonessential +Rv1900c nonessential +Rv1901 nonessential +Rv1902c nonessential +Rv1903 nonessential +Rv1904 nonessential +Rv1905c nonessential +Rv1906c nonessential +Rv1907c nonessential +Rv1908c nonessential +Rv1909c nonessential +Rv1910c nonessential +Rv1911c nonessential +Rv1912c nonessential +Rv1913 nonessential +Rv1914c nonessential +Rv1915 nonessential +Rv1916 nonessential +Rv1919c nonessential +Rv1920 nonessential +Rv1921c nonessential +Rv1922 nonessential +Rv1923 nonessential +Rv1924c nonessential +Rv1925 nonessential +Rv1927 nonessential +Rv1928c nonessential +Rv1929c nonessential +Rv1930c essential +Rv1931c essential +Rv1932 nonessential +Rv1933c nonessential +Rv1934c nonessential +Rv1935c nonessential +Rv1936 nonessential +Rv1937 nonessential +Rv1938 nonessential +Rv1939 essential +Rv1940 nonessential +Rv1941 nonessential +Rv1942c nonessential +Rv1943c nonessential +Rv1944c nonessential +Rv1946c nonessential +Rv1947 nonessential +Rv1948c nonessential +Rv1949c nonessential +Rv1950c nonessential +Rv1951c nonessential +Rv1952 nonessential +Rv1953 nonessential +Rv1954c nonessential +Rv1955 nonessential +Rv1956 nonessential +Rv1957 nonessential +Rv1958c nonessential +Rv1959c nonessential +Rv1960c nonessential +Rv1961 nonessential +Rv1962c nonessential +Rv1963c essential +Rv1964 nonessential +Rv1965 nonessential +Rv1966 nonessential +Rv1967 nonessential +Rv1968 nonessential +Rv1969 nonessential +Rv1970 nonessential +Rv1971 nonessential +Rv1972 nonessential +Rv1973 nonessential +Rv1974 essential +Rv1975 nonessential +Rv1976c nonessential +Rv1978 nonessential +Rv1979c nonessential +Rv1981c nonessential +Rv1982c nonessential +Rv1984c nonessential +Rv1988 nonessential +Rv1989c nonessential +Rv1990A nonessential +Rv1990c nonessential +Rv1991c nonessential +Rv1992c nonessential +Rv1993c nonessential +Rv1994c nonessential +Rv1995 nonessential +Rv1996 nonessential +Rv1997 nonessential +Rv1998c nonessential +Rv1999c nonessential +Rv2000 nonessential +Rv2001 nonessential +Rv2002 nonessential +Rv2003c nonessential +Rv2004c essential +Rv2005c nonessential +Rv2006 nonessential +Rv2007c nonessential +Rv2008c nonessential +Rv2009 nonessential +Rv2010 nonessential +Rv2011c nonessential +Rv2012 nonessential +Rv2015c nonessential +Rv2016 nonessential +Rv2017 nonessential +Rv2018 nonessential +Rv2019 nonessential +Rv2020c nonessential +Rv2021c nonessential +Rv2022c nonessential +Rv2023c nonessential +Rv2024c nonessential +Rv2025c nonessential +Rv2026c essential +Rv2027c nonessential +Rv2028c nonessential +Rv2029c nonessential +Rv2030c nonessential +Rv2032 nonessential +Rv2033c nonessential +Rv2034 nonessential +Rv2035 nonessential +Rv2036 nonessential +Rv2037c nonessential +Rv2038c essential +Rv2039c nonessential +Rv2040c essential +Rv2041c essential +Rv2042c nonessential +Rv2043c nonessential +Rv2044c nonessential +Rv2045c nonessential +Rv2046 nonessential +Rv2047c nonessential +Rv2048c essential +Rv2049c nonessential +Rv2050 essential +Rv2051c nonessential +Rv2052c nonessential +Rv2053c nonessential +Rv2054 nonessential +Rv2055c nonessential +Rv2056c nonessential +Rv2057c nonessential +Rv2058c nonessential +Rv2059 nonessential +Rv2060 nonessential +Rv2061c nonessential +Rv2062c nonessential +Rv2063 nonessential +Rv2064 nonessential +Rv2065 nonessential +Rv2066 nonessential +Rv2067c nonessential +Rv2068c nonessential +Rv2069 nonessential +Rv2070c nonessential +Rv2071c nonessential +Rv2072c essential +Rv2073c nonessential +Rv2074 nonessential +Rv2075c nonessential +Rv2076c nonessential +Rv2077A nonessential +Rv2077c nonessential +Rv2078 nonessential +Rv2079 nonessential +Rv2080 nonessential +Rv2081c nonessential +Rv2082 nonessential +Rv2083 nonessential +Rv2084 nonessential +Rv2085 nonessential +Rv2086 nonessential +Rv2087 nonessential +Rv2088 nonessential +Rv2089c nonessential +Rv2090 nonessential +Rv2091c nonessential +Rv2092c nonessential +Rv2093c essential +Rv2094c nonessential +Rv2095c nonessential +Rv2096c nonessential +Rv2097c nonessential +Rv2100 nonessential +Rv2101 nonessential +Rv2102 nonessential +Rv2103c nonessential +Rv2104c nonessential +Rv2109c essential +Rv2110c essential +Rv2111c essential +Rv2112c nonessential +Rv2113 nonessential +Rv2114 nonessential +Rv2115c nonessential +Rv2116 nonessential +Rv2117 nonessential +Rv2118c nonessential +Rv2119 nonessential +Rv2120c nonessential +Rv2121c essential +Rv2122c essential +Rv2124c nonessential +Rv2125 nonessential +Rv2127 nonessential +Rv2128 nonessential +Rv2129c nonessential +Rv2130c essential +Rv2131c nonessential +Rv2132 nonessential +Rv2133c nonessential +Rv2134c nonessential +Rv2135c nonessential +Rv2136c nonessential +Rv2137c nonessential +Rv2138 essential +Rv2139 nonessential +Rv2140c nonessential +Rv2141c nonessential +Rv2142c nonessential +Rv2143 nonessential +Rv2144c nonessential +Rv2145c essential +Rv2146c nonessential +Rv2147c nonessential +Rv2148c nonessential +Rv2149c nonessential +Rv2150c essential +Rv2151c essential +Rv2152c essential +Rv2153c essential +Rv2154c essential +Rv2155c essential +Rv2156c essential +Rv2157c essential +Rv2158c nonessential +Rv2159c nonessential +Rv2160A nonessential +Rv2160c nonessential +Rv2161c nonessential +Rv2163c essential +Rv2164c essential +Rv2165c essential +Rv2166c essential +Rv2169c nonessential +Rv2170 nonessential +Rv2171 nonessential +Rv2172c nonessential +Rv2173 nonessential +Rv2174 essential +Rv2175c nonessential +Rv2176 nonessential +Rv2178c essential +Rv2179c essential +Rv2180c nonessential +Rv2181 nonessential +Rv2183c nonessential +Rv2184c nonessential +Rv2185c nonessential +Rv2186c nonessential +Rv2187 nonessential +Rv2188c essential +Rv2189c nonessential +Rv2191 nonessential +Rv2192c essential +Rv2193 essential +Rv2194 essential +Rv2195 essential +Rv2196 essential +Rv2197c nonessential +Rv2198c nonessential +Rv2199c nonessential +Rv2200c essential +Rv2201 essential +Rv2202c nonessential +Rv2203 nonessential +Rv2204c nonessential +Rv2205c nonessential +Rv2206 nonessential +Rv2207 nonessential +Rv2208 nonessential +Rv2209 nonessential +Rv2210c essential +Rv2211c essential +Rv2212 nonessential +Rv2213 nonessential +Rv2214c nonessential +Rv2215 essential +Rv2216 nonessential +Rv2217 essential +Rv2218 essential +Rv2219 essential +Rv2219A nonessential +Rv2221c essential +Rv2222c nonessential +Rv2224c essential +Rv2225 essential +Rv2226 nonessential +Rv2227 nonessential +Rv2228c nonessential +Rv2229c essential +Rv2230c nonessential +Rv2231c essential +Rv2232 nonessential +Rv2234 nonessential +Rv2235 essential +Rv2236c nonessential +Rv2237 nonessential +Rv2238c nonessential +Rv2239c nonessential +Rv2240c nonessential +Rv2241 essential +Rv2242 essential +Rv2243 nonessential +Rv2244 essential +Rv2245 essential +Rv2246 essential +Rv2247 essential +Rv2248 nonessential +Rv2249c nonessential +Rv2250A nonessential +Rv2250c nonessential +Rv2251 essential +Rv2252 nonessential +Rv2253 nonessential +Rv2254c nonessential +Rv2255c nonessential +Rv2256c nonessential +Rv2257c nonessential +Rv2258c nonessential +Rv2259 nonessential +Rv2260 essential +Rv2261c nonessential +Rv2262c nonessential +Rv2263 nonessential +Rv2264c nonessential +Rv2265 nonessential +Rv2266 nonessential +Rv2267c nonessential +Rv2268c essential +Rv2269c nonessential +Rv2270 nonessential +Rv2271 nonessential +Rv2272 nonessential +Rv2273 nonessential +Rv2274c nonessential +Rv2275 essential +Rv2276 nonessential +Rv2277c essential +Rv2280 nonessential +Rv2281 nonessential +Rv2282c nonessential +Rv2283 essential +Rv2284 nonessential +Rv2285 nonessential +Rv2286c nonessential +Rv2287 nonessential +Rv2288 nonessential +Rv2289 nonessential +Rv2291 nonessential +Rv2292c nonessential +Rv2293c nonessential +Rv2294 nonessential +Rv2295 nonessential +Rv2296 nonessential +Rv2297 nonessential +Rv2298 nonessential +Rv2299c nonessential +Rv2300c nonessential +Rv2301 nonessential +Rv2302 nonessential +Rv2303c nonessential +Rv2304c nonessential +Rv2305 nonessential +Rv2306A nonessential +Rv2306B nonessential +Rv2307A nonessential +Rv2307B nonessential +Rv2307c nonessential +Rv2307D nonessential +Rv2308 nonessential +Rv2309A nonessential +Rv2309c nonessential +Rv2310 nonessential +Rv2311 nonessential +Rv2312 nonessential +Rv2313c nonessential +Rv2314c nonessential +Rv2315c nonessential +Rv2316 nonessential +Rv2317 nonessential +Rv2318 nonessential +Rv2319c essential +Rv2320c nonessential +Rv2321c nonessential +Rv2322c nonessential +Rv2323c nonessential +Rv2324 nonessential +Rv2325c essential +Rv2326c nonessential +Rv2327 nonessential +Rv2329c nonessential +Rv2330c nonessential +Rv2331 nonessential +Rv2331A nonessential +Rv2332 nonessential +Rv2333c nonessential +Rv2334 nonessential +Rv2335 essential +Rv2336 nonessential +Rv2337c nonessential +Rv2338c essential +Rv2339 nonessential +Rv2341 nonessential +Rv2342 nonessential +Rv2343c essential +Rv2344c nonessential +Rv2345 nonessential +Rv2347c nonessential +Rv2348c nonessential +Rv2349c nonessential +Rv2350c nonessential +Rv2357c essential +Rv2358 nonessential +Rv2359 essential +Rv2360c nonessential +Rv2361c essential +Rv2362c nonessential +Rv2363 nonessential +Rv2364c essential +Rv2365c essential +Rv2366c nonessential +Rv2367c nonessential +Rv2368c nonessential +Rv2369c nonessential +Rv2370c nonessential +Rv2372c nonessential +Rv2373c essential +Rv2374c essential +Rv2375 nonessential +Rv2376c nonessential +Rv2377c nonessential +Rv2378c essential +Rv2379c nonessential +Rv2380c nonessential +Rv2381c nonessential +Rv2382c essential +Rv2383c nonessential +Rv2384 nonessential +Rv2385 nonessential +Rv2386c essential +Rv2387 essential +Rv2388c essential +Rv2389c nonessential +Rv2390c nonessential +Rv2391 essential +Rv2392 essential +Rv2393 nonessential +Rv2394 nonessential +Rv2395 nonessential +Rv2397c essential +Rv2398c essential +Rv2399c essential +Rv2400c essential +Rv2401 nonessential +Rv2401A nonessential +Rv2402 nonessential +Rv2403c nonessential +Rv2404c nonessential +Rv2405 nonessential +Rv2406c nonessential +Rv2407 nonessential +Rv2409c nonessential +Rv2410c nonessential +Rv2411c nonessential +Rv2412 essential +Rv2413c nonessential +Rv2414c nonessential +Rv2415c nonessential +Rv2416c nonessential +Rv2417c nonessential +Rv2418c essential +Rv2419c nonessential +Rv2420c nonessential +Rv2421c essential +Rv2422 nonessential +Rv2423 nonessential +Rv2425c nonessential +Rv2426c nonessential +Rv2427c nonessential +Rv2428 nonessential +Rv2429 nonessential +Rv2432c nonessential +Rv2433c nonessential +Rv2434c nonessential +Rv2435c nonessential +Rv2436 nonessential +Rv2437 essential +Rv2438A nonessential +Rv2438c essential +Rv2439c essential +Rv2440c essential +Rv2441c essential +Rv2442c essential +Rv2443 nonessential +Rv2444c essential +Rv2445c nonessential +Rv2446c nonessential +Rv2447c essential +Rv2448c essential +Rv2449c nonessential +Rv2450c nonessential +Rv2451 nonessential +Rv2452c nonessential +Rv2453c nonessential +Rv2454c nonessential +Rv2455c nonessential +Rv2456c nonessential +Rv2457c essential +Rv2458 nonessential +Rv2459 nonessential +Rv2460c essential +Rv2461c nonessential +Rv2462c nonessential +Rv2463 nonessential +Rv2464c nonessential +Rv2465c nonessential +Rv2466c nonessential +Rv2467 nonessential +Rv2468c nonessential +Rv2469c nonessential +Rv2470 nonessential +Rv2471 nonessential +Rv2472 essential +Rv2473 nonessential +Rv2474c nonessential +Rv2475c nonessential +Rv2477c essential +Rv2478c nonessential +Rv2481c nonessential +Rv2482c nonessential +Rv2483c essential +Rv2484c nonessential +Rv2485c nonessential +Rv2486 nonessential +Rv2488c nonessential +Rv2489c nonessential +Rv2491 nonessential +Rv2492 nonessential +Rv2493 nonessential +Rv2494 nonessential +Rv2495c nonessential +Rv2496c nonessential +Rv2497c nonessential +Rv2498c nonessential +Rv2499c nonessential +Rv2500c essential +Rv2501c nonessential +Rv2502c essential +Rv2503c nonessential +Rv2504c nonessential +Rv2505c nonessential +Rv2506 nonessential +Rv2507 essential +Rv2508c nonessential +Rv2509 nonessential +Rv2510c essential +Rv2511 essential +Rv2513 nonessential +Rv2514c nonessential +Rv2515c essential +Rv2516c essential +Rv2517c nonessential +Rv2518c nonessential +Rv2520c nonessential +Rv2521 nonessential +Rv2522c nonessential +Rv2523c nonessential +Rv2524c essential +Rv2525c nonessential +Rv2526 nonessential +Rv2527 nonessential +Rv2528c nonessential +Rv2529 nonessential +Rv2530A nonessential +Rv2530c nonessential +Rv2531c nonessential +Rv2532c nonessential +Rv2533c essential +Rv2534c essential +Rv2535c nonessential +Rv2536 nonessential +Rv2537c essential +Rv2538c essential +Rv2539c essential +Rv2540c essential +Rv2541 nonessential +Rv2542 nonessential +Rv2543 nonessential +Rv2544 nonessential +Rv2545 nonessential +Rv2546 nonessential +Rv2547 nonessential +Rv2548 nonessential +Rv2549c nonessential +Rv2550c nonessential +Rv2551c nonessential +Rv2552c essential +Rv2553c essential +Rv2554c essential +Rv2555c essential +Rv2556c nonessential +Rv2557 nonessential +Rv2558 nonessential +Rv2559c nonessential +Rv2560 nonessential +Rv2561 nonessential +Rv2562 nonessential +Rv2563 nonessential +Rv2564 nonessential +Rv2565 nonessential +Rv2566 nonessential +Rv2567 nonessential +Rv2568c nonessential +Rv2569c nonessential +Rv2570 nonessential +Rv2571c nonessential +Rv2572c nonessential +Rv2573 nonessential +Rv2574 nonessential +Rv2575 nonessential +Rv2576c nonessential +Rv2577 nonessential +Rv2578c nonessential +Rv2579 nonessential +Rv2580c essential +Rv2581c nonessential +Rv2582 essential +Rv2583c nonessential +Rv2584c nonessential +Rv2585c nonessential +Rv2586c nonessential +Rv2587c nonessential +Rv2588c nonessential +Rv2589 nonessential +Rv2590 nonessential +Rv2592c nonessential +Rv2593c nonessential +Rv2594c nonessential +Rv2595 nonessential +Rv2596 nonessential +Rv2597 nonessential +Rv2598 nonessential +Rv2599 nonessential +Rv2600 nonessential +Rv2601 nonessential +Rv2601A nonessential +Rv2602 nonessential +Rv2603c nonessential +Rv2604c nonessential +Rv2605c nonessential +Rv2606c nonessential +Rv2607 nonessential +Rv2609c nonessential +Rv2610c nonessential +Rv2611c essential +Rv2612c essential +Rv2613c essential +Rv2614A nonessential +Rv2614c essential +Rv2616 nonessential +Rv2617c nonessential +Rv2618 nonessential +Rv2619c nonessential +Rv2620c nonessential +Rv2621c nonessential +Rv2622 nonessential +Rv2623 essential +Rv2624c nonessential +Rv2625c nonessential +Rv2626c nonessential +Rv2627c nonessential +Rv2628 nonessential +Rv2629 nonessential +Rv2630 nonessential +Rv2631 nonessential +Rv2632c nonessential +Rv2633c nonessential +Rv2635 nonessential +Rv2636 nonessential +Rv2637 nonessential +Rv2638 nonessential +Rv2639c nonessential +Rv2640c nonessential +Rv2641 nonessential +Rv2642 nonessential +Rv2643 nonessential +Rv2644c nonessential +Rv2645 nonessential +Rv2647 nonessential +Rv2660c nonessential +Rv2661c nonessential +Rv2662 nonessential +Rv2663 nonessential +Rv2664 nonessential +Rv2665 nonessential +Rv2667 nonessential +Rv2668 nonessential +Rv2669 nonessential +Rv2670c nonessential +Rv2671 nonessential +Rv2672 nonessential +Rv2673 essential +Rv2674 nonessential +Rv2675c nonessential +Rv2676c nonessential +Rv2677c nonessential +Rv2678c nonessential +Rv2679 nonessential +Rv2680 nonessential +Rv2681 nonessential +Rv2682c essential +Rv2683 nonessential +Rv2684 nonessential +Rv2685 nonessential +Rv2686c nonessential +Rv2687c nonessential +Rv2688c nonessential +Rv2689c nonessential +Rv2690c nonessential +Rv2691 nonessential +Rv2692 essential +Rv2693c nonessential +Rv2694c nonessential +Rv2695 nonessential +Rv2696c essential +Rv2697c essential +Rv2698 essential +Rv2699c nonessential +Rv2700 essential +Rv2701c nonessential +Rv2702 essential +Rv2703 essential +Rv2704 nonessential +Rv2705c nonessential +Rv2706c nonessential +Rv2707 essential +Rv2708c nonessential +Rv2709 nonessential +Rv2710 essential +Rv2711 nonessential +Rv2712c nonessential +Rv2713 nonessential +Rv2714 nonessential +Rv2716 nonessential +Rv2717c nonessential +Rv2718c nonessential +Rv2719c nonessential +Rv2720 nonessential +Rv2721c nonessential +Rv2722 nonessential +Rv2723 nonessential +Rv2724c nonessential +Rv2725c nonessential +Rv2726c essential +Rv2727c essential +Rv2728c nonessential +Rv2729c nonessential +Rv2730 nonessential +Rv2731 nonessential +Rv2732c nonessential +Rv2733c nonessential +Rv2734 essential +Rv2735c nonessential +Rv2736c nonessential +Rv2737A nonessential +Rv2737c nonessential +Rv2738c nonessential +Rv2739c essential +Rv2740 nonessential +Rv2742c nonessential +Rv2743c nonessential +Rv2744c nonessential +Rv2745c nonessential +Rv2746c essential +Rv2747 essential +Rv2748c essential +Rv2749 nonessential +Rv2750 nonessential +Rv2751 nonessential +Rv2752c nonessential +Rv2753c essential +Rv2754c essential +Rv2755c nonessential +Rv2756c nonessential +Rv2757c nonessential +Rv2758c nonessential +Rv2759c nonessential +Rv2760c nonessential +Rv2761c nonessential +Rv2762c nonessential +Rv2763c nonessential +Rv2764c nonessential +Rv2765 nonessential +Rv2766c nonessential +Rv2767c nonessential +Rv2771c nonessential +Rv2772c nonessential +Rv2773c nonessential +Rv2774c nonessential +Rv2775 nonessential +Rv2776c nonessential +Rv2777c nonessential +Rv2778c nonessential +Rv2779c nonessential +Rv2781c nonessential +Rv2782c nonessential +Rv2783c nonessential +Rv2784c nonessential +Rv2785c nonessential +Rv2786c essential +Rv2787 nonessential +Rv2788 nonessential +Rv2789c nonessential +Rv2790c nonessential +Rv2792c nonessential +Rv2793c nonessential +Rv2794c nonessential +Rv2795c nonessential +Rv2796c nonessential +Rv2797c nonessential +Rv2798c nonessential +Rv2799 nonessential +Rv2800 nonessential +Rv2801c nonessential +Rv2802c nonessential +Rv2803 nonessential +Rv2804c nonessential +Rv2805 nonessential +Rv2806 nonessential +Rv2807 nonessential +Rv2808 essential +Rv2809 nonessential +Rv2811 nonessential +Rv2813 essential +Rv2816c nonessential +Rv2817c essential +Rv2818c nonessential +Rv2819c nonessential +Rv2820c nonessential +Rv2821c nonessential +Rv2822c nonessential +Rv2824c nonessential +Rv2825c nonessential +Rv2826c nonessential +Rv2827c essential +Rv2828c essential +Rv2829c nonessential +Rv2830c essential +Rv2831 nonessential +Rv2832c essential +Rv2833c essential +Rv2834c nonessential +Rv2835c nonessential +Rv2836c nonessential +Rv2837c essential +Rv2838c nonessential +Rv2839c essential +Rv2840c nonessential +Rv2841c essential +Rv2842c nonessential +Rv2843 nonessential +Rv2844 nonessential +Rv2845c essential +Rv2846c essential +Rv2847c nonessential +Rv2848c nonessential +Rv2849c nonessential +Rv2850c nonessential +Rv2851c nonessential +Rv2852c nonessential +Rv2854 nonessential +Rv2855 essential +Rv2856 essential +Rv2857c essential +Rv2858c nonessential +Rv2859c nonessential +Rv2860c nonessential +Rv2861c nonessential +Rv2862c nonessential +Rv2863 nonessential +Rv2864c nonessential +Rv2865 nonessential +Rv2866 nonessential +Rv2867c nonessential +Rv2868c nonessential +Rv2869c essential +Rv2870c nonessential +Rv2871 nonessential +Rv2872 nonessential +Rv2873 nonessential +Rv2874 nonessential +Rv2876 nonessential +Rv2877c nonessential +Rv2879c nonessential +Rv2880c nonessential +Rv2881c essential +Rv2882c essential +Rv2883c essential +Rv2884 nonessential +Rv2886c nonessential +Rv2887 nonessential +Rv2888c nonessential +Rv2889c essential +Rv2890c essential +Rv2891 nonessential +Rv2893 nonessential +Rv2894c nonessential +Rv2895c nonessential +Rv2896c nonessential +Rv2897c essential +Rv2898c nonessential +Rv2899c nonessential +Rv2900c nonessential +Rv2901c nonessential +Rv2902c nonessential +Rv2904c essential +Rv2905 nonessential +Rv2906c essential +Rv2907c essential +Rv2908c essential +Rv2909c nonessential +Rv2910c nonessential +Rv2911 nonessential +Rv2912c essential +Rv2913c nonessential +Rv2914c nonessential +Rv2915c nonessential +Rv2916c essential +Rv2917 nonessential +Rv2918c nonessential +Rv2919c nonessential +Rv2920c nonessential +Rv2921c essential +Rv2922A nonessential +Rv2922c nonessential +Rv2923c nonessential +Rv2924c nonessential +Rv2925c essential +Rv2926c essential +Rv2927c essential +Rv2928 nonessential +Rv2929 nonessential +Rv2930 nonessential +Rv2931 nonessential +Rv2932 nonessential +Rv2933 nonessential +Rv2934 nonessential +Rv2935 nonessential +Rv2936 essential +Rv2937 essential +Rv2938 essential +Rv2939 nonessential +Rv2940c nonessential +Rv2941 nonessential +Rv2942 essential +Rv2946c nonessential +Rv2947c nonessential +Rv2948c nonessential +Rv2949c nonessential +Rv2950c nonessential +Rv2951c nonessential +Rv2952 nonessential +Rv2953 nonessential +Rv2954c nonessential +Rv2955c nonessential +Rv2956 nonessential +Rv2957 nonessential +Rv2958c nonessential +Rv2959c nonessential +Rv2960c nonessential +Rv2962c nonessential +Rv2963 nonessential +Rv2964 nonessential +Rv2965c nonessential +Rv2966c nonessential +Rv2967c essential +Rv2968c essential +Rv2969c essential +Rv2970A nonessential +Rv2970c nonessential +Rv2971 essential +Rv2972c nonessential +Rv2973c nonessential +Rv2974c nonessential +Rv2975c nonessential +Rv2976c essential +Rv2977c essential +Rv2979c nonessential +Rv2980 nonessential +Rv2981c essential +Rv2982c nonessential +Rv2983 nonessential +Rv2984 nonessential +Rv2985 nonessential +Rv2986c essential +Rv2987c essential +Rv2988c nonessential +Rv2989 nonessential +Rv2990c nonessential +Rv2991 nonessential +Rv2992c essential +Rv2993c nonessential +Rv2994 nonessential +Rv2995c essential +Rv2996c essential +Rv2997 nonessential +Rv2998 essential +Rv2998A nonessential +Rv2999 essential +Rv3000 nonessential +Rv3001c essential +Rv3002c essential +Rv3003c essential +Rv3004 nonessential +Rv3005c nonessential +Rv3006 nonessential +Rv3007c nonessential +Rv3008 nonessential +Rv3009c essential +Rv3010c nonessential +Rv3011c essential +Rv3012c nonessential +Rv3013 nonessential +Rv3014c essential +Rv3015c nonessential +Rv3016 nonessential +Rv3020c nonessential +Rv3024c nonessential +Rv3025c essential +Rv3026c nonessential +Rv3027c nonessential +Rv3028c nonessential +Rv3029c essential +Rv3030 essential +Rv3031 essential +Rv3032 essential +Rv3033 nonessential +Rv3034c nonessential +Rv3035 nonessential +Rv3036c nonessential +Rv3037c nonessential +Rv3038c nonessential +Rv3039c nonessential +Rv3040c nonessential +Rv3041c nonessential +Rv3042c essential +Rv3043c essential +Rv3044 nonessential +Rv3045 nonessential +Rv3046c nonessential +Rv3047c nonessential +Rv3048c essential +Rv3049c nonessential +Rv3050c essential +Rv3051c essential +Rv3052c nonessential +Rv3053c nonessential +Rv3054c nonessential +Rv3055 nonessential +Rv3056 nonessential +Rv3057c nonessential +Rv3058c nonessential +Rv3059 nonessential +Rv3060c nonessential +Rv3061c essential +Rv3062 nonessential +Rv3063 nonessential +Rv3064c nonessential +Rv3065 nonessential +Rv3066 nonessential +Rv3067 nonessential +Rv3068c nonessential +Rv3069 nonessential +Rv3070 nonessential +Rv3071 nonessential +Rv3072c nonessential +Rv3073c nonessential +Rv3074 nonessential +Rv3075c nonessential +Rv3076 nonessential +Rv3077 nonessential +Rv3078 nonessential +Rv3079c nonessential +Rv3080c nonessential +Rv3081 nonessential +Rv3082c nonessential +Rv3083 nonessential +Rv3084 nonessential +Rv3085 nonessential +Rv3086 nonessential +Rv3087 essential +Rv3088 nonessential +Rv3089 nonessential +Rv3090 nonessential +Rv3091 nonessential +Rv3092c nonessential +Rv3093c nonessential +Rv3094c nonessential +Rv3095 nonessential +Rv3096 nonessential +Rv3097c nonessential +Rv3098c nonessential +Rv3099c nonessential +Rv3100c nonessential +Rv3101c essential +Rv3102c nonessential +Rv3103c essential +Rv3104c nonessential +Rv3105c essential +Rv3107c nonessential +Rv3108 nonessential +Rv3109 essential +Rv3110 nonessential +Rv3111 essential +Rv3112 essential +Rv3113 essential +Rv3114 essential +Rv3116 nonessential +Rv3117 nonessential +Rv3118 nonessential +Rv3119 nonessential +Rv3120 nonessential +Rv3121 nonessential +Rv3122 nonessential +Rv3123 nonessential +Rv3124 nonessential +Rv3126c nonessential +Rv3127 nonessential +Rv3129 nonessential +Rv3130c nonessential +Rv3131 essential +Rv3132c essential +Rv3133c nonessential +Rv3134c nonessential +Rv3137 essential +Rv3138 nonessential +Rv3139 essential +Rv3140 essential +Rv3141 nonessential +Rv3142c nonessential +Rv3143 nonessential +Rv3145 nonessential +Rv3146 nonessential +Rv3147 nonessential +Rv3148 nonessential +Rv3149 nonessential +Rv3150 nonessential +Rv3151 nonessential +Rv3152 nonessential +Rv3153 nonessential +Rv3154 nonessential +Rv3155 nonessential +Rv3156 nonessential +Rv3157 nonessential +Rv3158 nonessential +Rv3160c nonessential +Rv3161c nonessential +Rv3162c nonessential +Rv3163c nonessential +Rv3164c nonessential +Rv3165c nonessential +Rv3166c nonessential +Rv3167c nonessential +Rv3168 essential +Rv3169 nonessential +Rv3170 nonessential +Rv3171c nonessential +Rv3172c nonessential +Rv3173c nonessential +Rv3174 nonessential +Rv3175 nonessential +Rv3176c nonessential +Rv3177 essential +Rv3178 essential +Rv3179 nonessential +Rv3180c nonessential +Rv3181c nonessential +Rv3182 nonessential +Rv3183 nonessential +Rv3188 nonessential +Rv3189 nonessential +Rv3190c nonessential +Rv3192 nonessential +Rv3193c nonessential +Rv3194c nonessential +Rv3195 nonessential +Rv3196 nonessential +Rv3196A nonessential +Rv3197 nonessential +Rv3197A nonessential +Rv3198A nonessential +Rv3198c essential +Rv3199c nonessential +Rv3200c nonessential +Rv3202c nonessential +Rv3203 nonessential +Rv3204 nonessential +Rv3205c nonessential +Rv3206c nonessential +Rv3208 nonessential +Rv3208A nonessential +Rv3209 nonessential +Rv3210c essential +Rv3211 nonessential +Rv3212 nonessential +Rv3213c nonessential +Rv3214 nonessential +Rv3215 nonessential +Rv3216 nonessential +Rv3217c nonessential +Rv3218 nonessential +Rv3219 nonessential +Rv3220c nonessential +Rv3221A nonessential +Rv3221c nonessential +Rv3222c nonessential +Rv3223c nonessential +Rv3224 nonessential +Rv3224A nonessential +Rv3224B nonessential +Rv3225c nonessential +Rv3226c nonessential +Rv3227 nonessential +Rv3228 nonessential +Rv3229c essential +Rv3230c nonessential +Rv3231c nonessential +Rv3232c nonessential +Rv3233c nonessential +Rv3234c nonessential +Rv3235 nonessential +Rv3236c essential +Rv3237c nonessential +Rv3238c nonessential +Rv3239c nonessential +Rv3240c essential +Rv3241c nonessential +Rv3242c nonessential +Rv3243c essential +Rv3244c essential +Rv3245c essential +Rv3246c essential +Rv3247c nonessential +Rv3248c essential +Rv3249c nonessential +Rv3250c nonessential +Rv3251c nonessential +Rv3252c nonessential +Rv3253c nonessential +Rv3254 nonessential +Rv3255c essential +Rv3256c nonessential +Rv3257c essential +Rv3258c essential +Rv3259 nonessential +Rv3260c nonessential +Rv3261 nonessential +Rv3262 nonessential +Rv3263 nonessential +Rv3264c essential +Rv3265c essential +Rv3266c nonessential +Rv3267 essential +Rv3268 nonessential +Rv3269 nonessential +Rv3270 essential +Rv3271c essential +Rv3272 nonessential +Rv3273 nonessential +Rv3274c nonessential +Rv3275c essential +Rv3276c nonessential +Rv3277 essential +Rv3278c nonessential +Rv3279c nonessential +Rv3280 nonessential +Rv3281 essential +Rv3282 nonessential +Rv3283 nonessential +Rv3284 nonessential +Rv3285 essential +Rv3286c nonessential +Rv3287c nonessential +Rv3288c nonessential +Rv3289c nonessential +Rv3290c nonessential +Rv3291c nonessential +Rv3292 nonessential +Rv3293 nonessential +Rv3294c nonessential +Rv3295 nonessential +Rv3297 nonessential +Rv3298c nonessential +Rv3299c nonessential +Rv3300c nonessential +Rv3301c nonessential +Rv3302c nonessential +Rv3303c nonessential +Rv3304 nonessential +Rv3305c nonessential +Rv3306c nonessential +Rv3307 nonessential +Rv3308 nonessential +Rv3309c nonessential +Rv3310 nonessential +Rv3311 nonessential +Rv3312A nonessential +Rv3312c nonessential +Rv3313c nonessential +Rv3314c nonessential +Rv3315c nonessential +Rv3316 nonessential +Rv3317 nonessential +Rv3318 nonessential +Rv3319 nonessential +Rv3320c nonessential +Rv3321c nonessential +Rv3322c nonessential +Rv3323c nonessential +Rv3324c nonessential +Rv3328c nonessential +Rv3329 nonessential +Rv3330 nonessential +Rv3331 nonessential +Rv3332 essential +Rv3334 nonessential +Rv3335c essential +Rv3336c essential +Rv3337 nonessential +Rv3338 nonessential +Rv3339c nonessential +Rv3340 nonessential +Rv3341 essential +Rv3342 nonessential +Rv3346c nonessential +Rv3351c nonessential +Rv3352c nonessential +Rv3353c nonessential +Rv3354 nonessential +Rv3355c nonessential +Rv3356c essential +Rv3357 nonessential +Rv3358 nonessential +Rv3359 nonessential +Rv3360 nonessential +Rv3361c nonessential +Rv3362c nonessential +Rv3363c nonessential +Rv3364c nonessential +Rv3365c nonessential +Rv3366 nonessential +Rv3368c nonessential +Rv3369 nonessential +Rv3370c nonessential +Rv3371 essential +Rv3372 essential +Rv3373 nonessential +Rv3374 nonessential +Rv3375 essential +Rv3376 nonessential +Rv3377c nonessential +Rv3379c nonessential +Rv3382c nonessential +Rv3383c nonessential +Rv3384c nonessential +Rv3385c nonessential +Rv3389c nonessential +Rv3390 nonessential +Rv3391 nonessential +Rv3392c nonessential +Rv3393 nonessential +Rv3394c nonessential +Rv3395A nonessential +Rv3395c nonessential +Rv3396c essential +Rv3397c nonessential +Rv3398c essential +Rv3399 nonessential +Rv3400 essential +Rv3401 nonessential +Rv3402c nonessential +Rv3403c nonessential +Rv3404c nonessential +Rv3405c nonessential +Rv3406 nonessential +Rv3407 nonessential +Rv3408 nonessential +Rv3409c nonessential +Rv3410c nonessential +Rv3411c essential +Rv3412 nonessential +Rv3413c nonessential +Rv3414c nonessential +Rv3415c nonessential +Rv3416 nonessential +Rv3417c essential +Rv3419c essential +Rv3420c nonessential +Rv3421c nonessential +Rv3422c essential +Rv3423c essential +Rv3424c nonessential +Rv3431c nonessential +Rv3432c nonessential +Rv3433c nonessential +Rv3434c nonessential +Rv3435c nonessential +Rv3436c essential +Rv3437 nonessential +Rv3438 nonessential +Rv3439c nonessential +Rv3440c nonessential +Rv3441c essential +Rv3442c nonessential +Rv3443c essential +Rv3444c nonessential +Rv3445c nonessential +Rv3446c nonessential +Rv3447c nonessential +Rv3448 nonessential +Rv3449 nonessential +Rv3450c nonessential +Rv3451 nonessential +Rv3452 nonessential +Rv3453 nonessential +Rv3454 nonessential +Rv3455c essential +Rv3456c nonessential +Rv3457c essential +Rv3458c essential +Rv3459c essential +Rv3460c nonessential +Rv3461c nonessential +Rv3462c essential +Rv3463 nonessential +Rv3464 essential +Rv3465 essential +Rv3466 nonessential +Rv3468c nonessential +Rv3469c nonessential +Rv3470c nonessential +Rv3471c nonessential +Rv3472 essential +Rv3473c nonessential +Rv3476c nonessential +Rv3479 nonessential +Rv3480c nonessential +Rv3481c nonessential +Rv3482c nonessential +Rv3483c nonessential +Rv3484 essential +Rv3485c nonessential +Rv3486 nonessential +Rv3487c nonessential +Rv3488 nonessential +Rv3489 essential +Rv3490 essential +Rv3491 nonessential +Rv3492c nonessential +Rv3493c nonessential +Rv3494c nonessential +Rv3495c essential +Rv3496c nonessential +Rv3498c nonessential +Rv3499c essential +Rv3500c nonessential +Rv3501c essential +Rv3502c essential +Rv3503c nonessential +Rv3504 nonessential +Rv3505 nonessential +Rv3506 nonessential +Rv3509c nonessential +Rv3510c nonessential +Rv3513c nonessential +Rv3515c nonessential +Rv3516 nonessential +Rv3517 nonessential +Rv3518c nonessential +Rv3519 essential +Rv3520c nonessential +Rv3521 nonessential +Rv3522 nonessential +Rv3523 essential +Rv3524 nonessential +Rv3525c nonessential +Rv3526 nonessential +Rv3527 nonessential +Rv3528c nonessential +Rv3529c nonessential +Rv3530c nonessential +Rv3531c nonessential +Rv3534c essential +Rv3535c nonessential +Rv3536c nonessential +Rv3537 nonessential +Rv3538 essential +Rv3540c essential +Rv3541c essential +Rv3542c essential +Rv3543c nonessential +Rv3544c essential +Rv3545c essential +Rv3546 nonessential +Rv3547 nonessential +Rv3548c nonessential +Rv3549c nonessential +Rv3550 nonessential +Rv3551 essential +Rv3552 nonessential +Rv3553 nonessential +Rv3554 nonessential +Rv3555c nonessential +Rv3556c essential +Rv3557c nonessential +Rv3559c essential +Rv3560c essential +Rv3561 nonessential +Rv3562 nonessential +Rv3563 essential +Rv3564 essential +Rv3565 nonessential +Rv3566A nonessential +Rv3566c nonessential +Rv3567c nonessential +Rv3568c nonessential +Rv3569c nonessential +Rv3570c nonessential +Rv3571 nonessential +Rv3572 nonessential +Rv3573c nonessential +Rv3574 essential +Rv3575c nonessential +Rv3576 nonessential +Rv3577 nonessential +Rv3578 nonessential +Rv3579c essential +Rv3580c essential +Rv3581c essential +Rv3582c essential +Rv3583c nonessential +Rv3584 nonessential +Rv3585 nonessential +Rv3586 nonessential +Rv3587c nonessential +Rv3588c essential +Rv3589 nonessential +Rv3591c nonessential +Rv3592 nonessential +Rv3593 essential +Rv3594 nonessential +Rv3596c essential +Rv3597c essential +Rv3598c essential +Rv3599c nonessential +Rv3600c nonessential +Rv3601c nonessential +Rv3602c essential +Rv3603c nonessential +Rv3604c essential +Rv3605c nonessential +Rv3606c nonessential +Rv3607c essential +Rv3608c essential +Rv3609c essential +Rv3610c essential +Rv3611 essential +Rv3612c nonessential +Rv3613c nonessential +Rv3614c essential +Rv3615c essential +Rv3616c essential +Rv3617 nonessential +Rv3618 nonessential +Rv3620c nonessential +Rv3623 nonessential +Rv3624c nonessential +Rv3625c essential +Rv3626c nonessential +Rv3627c essential +Rv3628 nonessential +Rv3629c nonessential +Rv3630 nonessential +Rv3631 essential +Rv3632 nonessential +Rv3633 nonessential +Rv3634c essential +Rv3635 essential +Rv3639c nonessential +Rv3641c nonessential +Rv3642c nonessential +Rv3643 nonessential +Rv3644c nonessential +Rv3645 nonessential +Rv3646c essential +Rv3647c nonessential +Rv3648c essential +Rv3649 essential +Rv3651 essential +Rv3654c nonessential +Rv3655c nonessential +Rv3656c nonessential +Rv3657c nonessential +Rv3658c essential +Rv3659c nonessential +Rv3660c essential +Rv3661 nonessential +Rv3662c nonessential +Rv3663c essential +Rv3664c nonessential +Rv3665c nonessential +Rv3666c essential +Rv3667 nonessential +Rv3668c nonessential +Rv3669 essential +Rv3670 nonessential +Rv3671c nonessential +Rv3672c nonessential +Rv3673c nonessential +Rv3674c nonessential +Rv3675 nonessential +Rv3676 nonessential +Rv3677c nonessential +Rv3678A nonessential +Rv3678c nonessential +Rv3679 essential +Rv3680 nonessential +Rv3681c nonessential +Rv3682 nonessential +Rv3683 essential +Rv3684 nonessential +Rv3685c nonessential +Rv3686c nonessential +Rv3687c nonessential +Rv3688c nonessential +Rv3690 nonessential +Rv3691 nonessential +Rv3692 nonessential +Rv3693 nonessential +Rv3694c nonessential +Rv3695 nonessential +Rv3696c nonessential +Rv3697c nonessential +Rv3698 nonessential +Rv3699 nonessential +Rv3700c nonessential +Rv3701c essential +Rv3702c nonessential +Rv3703c nonessential +Rv3704c nonessential +Rv3705A nonessential +Rv3705c nonessential +Rv3706c nonessential +Rv3707c nonessential +Rv3708c essential +Rv3709c essential +Rv3710 essential +Rv3711c nonessential +Rv3712 essential +Rv3713 essential +Rv3715c nonessential +Rv3716c nonessential +Rv3717 essential +Rv3718c nonessential +Rv3719 nonessential +Rv3720 nonessential +Rv3721c essential +Rv3722c essential +Rv3723 essential +Rv3724A nonessential +Rv3724B nonessential +Rv3725 nonessential +Rv3726 nonessential +Rv3727 nonessential +Rv3728 nonessential +Rv3729 nonessential +Rv3730c nonessential +Rv3731 nonessential +Rv3732 nonessential +Rv3733c nonessential +Rv3734c nonessential +Rv3735 nonessential +Rv3736 nonessential +Rv3737 nonessential +Rv3740c nonessential +Rv3741c nonessential +Rv3742c nonessential +Rv3743c nonessential +Rv3744 nonessential +Rv3745c nonessential +Rv3747 nonessential +Rv3748 nonessential +Rv3749c nonessential +Rv3750c nonessential +Rv3752c essential +Rv3753c nonessential +Rv3754 nonessential +Rv3755c nonessential +Rv3756c nonessential +Rv3757c nonessential +Rv3758c essential +Rv3759c nonessential +Rv3760 nonessential +Rv3761c nonessential +Rv3762c nonessential +Rv3764c nonessential +Rv3765c nonessential +Rv3766 nonessential +Rv3767c nonessential +Rv3768 nonessential +Rv3769 nonessential +Rv3770A nonessential +Rv3770B nonessential +Rv3770c nonessential +Rv3771c nonessential +Rv3772 nonessential +Rv3773c nonessential +Rv3774 nonessential +Rv3775 nonessential +Rv3776 nonessential +Rv3777 nonessential +Rv3778c essential +Rv3779 nonessential +Rv3780 nonessential +Rv3781 essential +Rv3782 essential +Rv3783 nonessential +Rv3784 nonessential +Rv3785 nonessential +Rv3786c nonessential +Rv3787c nonessential +Rv3788 nonessential +Rv3789 nonessential +Rv3790 essential +Rv3791 essential +Rv3792 essential +Rv3793 essential +Rv3794 essential +Rv3795 essential +Rv3796 nonessential +Rv3797 nonessential +Rv3799c essential +Rv3800c essential +Rv3801c essential +Rv3802c essential +Rv3805c essential +Rv3806c essential +Rv3807c nonessential +Rv3808c essential +Rv3809c nonessential +Rv3810 essential +Rv3811 nonessential +Rv3813c nonessential +Rv3814c nonessential +Rv3815c nonessential +Rv3816c nonessential +Rv3817 nonessential +Rv3818 nonessential +Rv3819 nonessential +Rv3820c nonessential +Rv3821 nonessential +Rv3822 nonessential +Rv3823c nonessential +Rv3824c nonessential +Rv3825c nonessential +Rv3826 nonessential +Rv3828c nonessential +Rv3829c nonessential +Rv3830c nonessential +Rv3831 nonessential +Rv3832c nonessential +Rv3833 nonessential +Rv3834c essential +Rv3835 nonessential +Rv3836 nonessential +Rv3837c nonessential +Rv3838c nonessential +Rv3839 nonessential +Rv3840 nonessential +Rv3841 nonessential +Rv3842c nonessential +Rv3843c nonessential +Rv3845 nonessential +Rv3847 nonessential +Rv3848 nonessential +Rv3849 nonessential +Rv3850 nonessential +Rv3851 nonessential +Rv3852 nonessential +Rv3853 nonessential +Rv3854c nonessential +Rv3855 essential +Rv3856c nonessential +Rv3857c nonessential +Rv3858c essential +Rv3859c essential +Rv3860 nonessential +Rv3861 nonessential +Rv3862c nonessential +Rv3863 nonessential +Rv3864 essential +Rv3865 nonessential +Rv3866 nonessential +Rv3867 nonessential +Rv3868 essential +Rv3869 essential +Rv3870 essential +Rv3876 essential +Rv3877 essential +Rv3880c nonessential +Rv3881c nonessential +Rv3882c essential +Rv3883c nonessential +Rv3884c nonessential +Rv3885c nonessential +Rv3886c nonessential +Rv3887c nonessential +Rv3888c nonessential +Rv3889c nonessential +Rv3890c nonessential +Rv3891c nonessential +Rv3894c nonessential +Rv3895c nonessential +Rv3896c nonessential +Rv3897c nonessential +Rv3898c nonessential +Rv3899c nonessential +Rv3900c nonessential +Rv3901c nonessential +Rv3902c nonessential +Rv3903c nonessential +Rv3904c nonessential +Rv3905c nonessential +Rv3906c nonessential +Rv3907c essential +Rv3908 nonessential +Rv3909 nonessential +Rv3910 essential +Rv3911 nonessential +Rv3912 nonessential +Rv3913 essential +Rv3914 nonessential +Rv3915 essential +Rv3916c nonessential +Rv3917c essential +Rv3918c essential +Rv3919c nonessential +Rv3920c nonessential +Rv3921c essential +Rv3922c nonessential +Rv3923c essential +Rv3924c nonessential +Rv0125 epitope +Rv0129c epitope +Rv0200 epitope +Rv0203 epitope +Rv0222 epitope +Rv0287 epitope +Rv0288 epitope +Rv0309 epitope +Rv0341 epitope +Rv0440 epitope +Rv0589 epitope +Rv0667 epitope +Rv0670 epitope +Rv0934 epitope +Rv1158c epitope +Rv1174c epitope +Rv1184c epitope +Rv1198 epitope +Rv1242 epitope +Rv1255c epitope +Rv1256c epitope +Rv1280c epitope +Rv1291c epitope +Rv1461 epitope +Rv1623c epitope +Rv1641 epitope +Rv1694 epitope +Rv1793 epitope +Rv1860 epitope +Rv1886c epitope +Rv1926c epitope +Rv1945 epitope +Rv1977 epitope +Rv1980c epitope +Rv1985c epitope +Rv1986 epitope +Rv1987 epitope +Rv2031c epitope +Rv2182c epitope +Rv2190c epitope +Rv2220 epitope +Rv2223c epitope +Rv2290 epitope +Rv2346c epitope +Rv2351c epitope +Rv2476c epitope +Rv2715 epitope +Rv2780 epitope +Rv2823c epitope +Rv2875 epitope +Rv2878c epitope +Rv2903c epitope +Rv2945c epitope +Rv3017c epitope +Rv3019c epitope +Rv3106 epitope +Rv3201c epitope +Rv3207c epitope +Rv3296 epitope +Rv3333c epitope +Rv3378c epitope +Rv3418c epitope +Rv3467 epitope +Rv3497c epitope +Rv3619c epitope +Rv3689 epitope +Rv3714c epitope +Rv3763 epitope +Rv3803c epitope +Rv3804c epitope +Rv3846 epitope +Rv3871 epitope +Rv3874 epitope +Rv3875 epitope +Rv3878 epitope +Rv3879c epitope +Rv0031 repetitive +Rv0096 repetitive +Rv0109 repetitive +Rv0124 repetitive +Rv0151c repetitive +Rv0152c repetitive +Rv0159c repetitive +Rv0160c repetitive +Rv0256c repetitive +Rv0278c repetitive +Rv0279c repetitive +Rv0280 repetitive +Rv0285 repetitive +Rv0286 repetitive +Rv0297 repetitive +Rv0304c repetitive +Rv0305c repetitive +Rv0335c repetitive +Rv0354c repetitive +Rv0355c repetitive +Rv0387c repetitive +Rv0388c repetitive +Rv0442c repetitive +Rv0453 repetitive +Rv0532 repetitive +Rv0578c repetitive +Rv0741 repetitive +Rv0742 repetitive +Rv0746 repetitive +Rv0747 repetitive +Rv0754 repetitive +Rv0755A repetitive +Rv0755c repetitive +Rv0795 repetitive +Rv0796 repetitive +Rv0797 repetitive +Rv0832 repetitive +Rv0833 repetitive +Rv0834c repetitive +Rv0850 repetitive +Rv0872c repetitive +Rv0878c repetitive +Rv0915c repetitive +Rv0916c repetitive +Rv0920c repetitive +Rv0922 repetitive +Rv0977 repetitive +Rv0978c repetitive +Rv0980c repetitive +Rv1034c repetitive +Rv1035c repetitive +Rv1036c repetitive +Rv1039c repetitive +Rv1040c repetitive +Rv1041c repetitive +Rv1042c repetitive +Rv1047 repetitive +Rv1054 repetitive +Rv1067c repetitive +Rv1068c repetitive +Rv1087 repetitive +Rv1088 repetitive +Rv1089 repetitive +Rv1091 repetitive +Rv1135c repetitive +Rv1149 repetitive +Rv1168c repetitive +Rv1169c repetitive +Rv1172c repetitive +Rv1195 repetitive +Rv1196 repetitive +Rv1199c repetitive +Rv1214c repetitive +Rv1243c repetitive +Rv1313c repetitive +Rv1325c repetitive +Rv1361c repetitive +Rv1369c repetitive +Rv1370c repetitive +Rv1386 repetitive +Rv1387 repetitive +Rv1396c repetitive +Rv1430 repetitive +Rv1441c repetitive +Rv1450c repetitive +Rv1452c repetitive +Rv1468c repetitive +Rv1548c repetitive +Rv1573 repetitive +Rv1574 repetitive +Rv1575 repetitive +Rv1576c repetitive +Rv1577c repetitive +Rv1578c repetitive +Rv1579c repetitive +Rv1580c repetitive +Rv1581c repetitive +Rv1582c repetitive +Rv1583c repetitive +Rv1584c repetitive +Rv1585c repetitive +Rv1586c repetitive +Rv1646 repetitive +Rv1651c repetitive +Rv1705c repetitive +Rv1706c repetitive +Rv1753c repetitive +Rv1756c repetitive +Rv1757c repetitive +Rv1763 repetitive +Rv1764 repetitive +Rv1765A repetitive +Rv1768 repetitive +Rv1787 repetitive +Rv1788 repetitive +Rv1789 repetitive +Rv1790 repetitive +Rv1791 repetitive +Rv1800 repetitive +Rv1801 repetitive +Rv1802 repetitive +Rv1803c repetitive +Rv1806 repetitive +Rv1807 repetitive +Rv1808 repetitive +Rv1809 repetitive +Rv1818c repetitive +Rv1840c repetitive +Rv1917c repetitive +Rv1918c repetitive +Rv1983 repetitive +Rv2013 repetitive +Rv2014 repetitive +Rv2105 repetitive +Rv2106 repetitive +Rv2107 repetitive +Rv2108 repetitive +Rv2123 repetitive +Rv2126c repetitive +Rv2162c repetitive +Rv2167c repetitive +Rv2168c repetitive +Rv2177c repetitive +Rv2278 repetitive +Rv2279 repetitive +Rv2328 repetitive +Rv2340c repetitive +Rv2352c repetitive +Rv2353c repetitive +Rv2354 repetitive +Rv2355 repetitive +Rv2356c repetitive +Rv2371 repetitive +Rv2396 repetitive +Rv2408 repetitive +Rv2424c repetitive +Rv2430c repetitive +Rv2431c repetitive +Rv2479c repetitive +Rv2480c repetitive +Rv2487c repetitive +Rv2490c repetitive +Rv2512c repetitive +Rv2519 repetitive +Rv2591 repetitive +Rv2608 repetitive +Rv2615c repetitive +Rv2634c repetitive +Rv2646 repetitive +Rv2648 repetitive +Rv2649 repetitive +Rv2650c repetitive +Rv2651c repetitive +Rv2652c repetitive +Rv2653c repetitive +Rv2654c repetitive +Rv2655c repetitive +Rv2656c repetitive +Rv2657c repetitive +Rv2659c repetitive +Rv2666 repetitive +Rv2741 repetitive +Rv2768c repetitive +Rv2769c repetitive +Rv2770c repetitive +Rv2791c repetitive +Rv2810c repetitive +Rv2812 repetitive +Rv2814c repetitive +Rv2815c repetitive +Rv2853 repetitive +Rv2885c repetitive +Rv2892c repetitive +Rv2943 repetitive +Rv2943A repetitive +Rv2944 repetitive +Rv2961 repetitive +Rv2978c repetitive +Rv3018A repetitive +Rv3018c repetitive +Rv3021c repetitive +Rv3022A repetitive +Rv3022c repetitive +Rv3023c repetitive +Rv3115 repetitive +Rv3125c repetitive +Rv3135 repetitive +Rv3136 repetitive +Rv3144c repetitive +Rv3159c repetitive +Rv3184 repetitive +Rv3185 repetitive +Rv3186 repetitive +Rv3187 repetitive +Rv3191c repetitive +Rv3325 repetitive +Rv3326 repetitive +Rv3327 repetitive +Rv3343c repetitive +Rv3344c repetitive +Rv3345c repetitive +Rv3347c repetitive +Rv3348 repetitive +Rv3349c repetitive +Rv3350c repetitive +Rv3367 repetitive +Rv3380c repetitive +Rv3381c repetitive +Rv3386 repetitive +Rv3387 repetitive +Rv3388 repetitive +Rv3425 repetitive +Rv3426 repetitive +Rv3427c repetitive +Rv3428c repetitive +Rv3429 repetitive +Rv3430c repetitive +Rv3474 repetitive +Rv3475 repetitive +Rv3477 repetitive +Rv3478 repetitive +Rv3507 repetitive +Rv3508 repetitive +Rv3511 repetitive +Rv3512 repetitive +Rv3514 repetitive +Rv3532 repetitive +Rv3533c repetitive +Rv3539 repetitive +Rv3558 repetitive +Rv3590c repetitive +Rv3595c repetitive +Rv3621c repetitive +Rv3622c repetitive +Rv3636 repetitive +Rv3637 repetitive +Rv3638 repetitive +Rv3640c repetitive +Rv3650 repetitive +Rv3652 repetitive +Rv3653 repetitive +Rv3738c repetitive +Rv3739c repetitive +Rv3746c repetitive +Rv3751 repetitive +Rv3798 repetitive +Rv3812 repetitive +Rv3827c repetitive +Rv3844 repetitive +Rv3872 repetitive +Rv3873 repetitive +Rv3892c repetitive +Rv3893c repetitive diff --git a/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.dict b/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.dict new file mode 100644 index 0000000..baeb7f0 --- /dev/null +++ b/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.dict @@ -0,0 +1,2 @@ +@HD VN:1.5 +@SQ SN:M.tuberculosis_H37Rv LN:4411532 M5:57b12ff2773c5fd3a0f879972f176e50 UR:file:/home/cutpatel/auto/Thecus_cutpatel/Projects/Tbseq/MTBseq_Dev/var/ref/M._tuberculosis_H37Rv_2015-11-13.fasta diff --git a/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.amb b/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.amb new file mode 100644 index 0000000..8169c4d --- /dev/null +++ b/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.amb @@ -0,0 +1 @@ +4411532 1 0 diff --git a/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.ann b/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.ann new file mode 100644 index 0000000..4ba968b --- /dev/null +++ b/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.ann @@ -0,0 +1,3 @@ +4411532 1 11 +0 M.tuberculosis_H37Rv NC_000962.3 +0 4411532 0 diff --git a/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.bwt b/data/mtbseq-references/ref/M._tuberculosis_H37Rv_2015-11-13.fasta.bwt new file mode 100644 index 0000000000000000000000000000000000000000..3eb49d6c60475085f8fa04006c4c4d6ba0bb1f03 GIT binary patch literal 4411632 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

2l%)};vPxY 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